public function testProcessorParentContext()
 {
     $handlers = new HandlerContainer();
     $handlers->add('outer', function (ProcessedShortcode $s) {
         $name = $s->getParent() ? $s->getParent()->getName() : 'root';
         return $name . '[' . $s->getContent() . ']';
     });
     $handlers->addAlias('inner', 'outer');
     $handlers->addAlias('level', 'outer');
     $processor = new Processor(new RegexParser(), $handlers);
     $text = 'x [outer]a [inner]c [level]x[/level] d[/inner] b[/outer] y';
     $result = 'x root[a outer[c inner[x] d] b] y';
     $this->assertSame($result, $processor->process($text));
     $this->assertSame($result . $result, $processor->process($text . $text));
 }
 public function testImmutableHandlerContainer()
 {
     $handlers = new HandlerContainer();
     $handlers->add('code', function () {
     });
     $handlers->addAlias('c', 'code');
     $handlers = new ImmutableHandlerContainer($handlers);
     $this->assertNull($handlers->get('missing'));
     $this->assertNotNull($handlers->get('code'));
     $this->assertNotNull($handlers->get('c'));
     $defaultHandlers = new HandlerContainer();
     $defaultHandlers->setDefault(function () {
     });
     $defaultHandlers = new ImmutableHandlerContainer($defaultHandlers);
     $this->assertNotNull($defaultHandlers->get('missing'));
 }
 public function addHandlerAlias($alias, $name)
 {
     $this->handlers->addAlias($alias, $name);
     return $this;
 }
Beispiel #4
0
 public function testValidProcessAfterHandlerRemoval()
 {
     $handlers = new HandlerContainer();
     $handlers->add('name', function (ShortcodeInterface $s) {
         return $s->getName();
     });
     $handlers->addAlias('n', 'name');
     $processor = new Processor(new RegexParser(), $handlers);
     $this->assertSame('n', $processor->process('[n]'));
     $this->assertSame('name', $processor->process('[name]'));
     $handlers->remove('name');
     $this->assertSame('n', $processor->process('[n]'));
     $this->assertSame('[name]', $processor->process('[name]'));
 }