コード例 #1
0
 /**
  * Custom helper test
  */
 public function testCustomHelper()
 {
     $loader = new \Handlebars\Loader\StringLoader();
     $engine = new \Handlebars\Handlebars(array('loader' => $loader));
     $engine->addHelper('test', function () {
         return 'Test helper is called';
     });
     $this->assertEquals('Test helper is called', $engine->render('{{#test}}', array()));
     $this->assertEquals('Test helper is called', $engine->render('{{test}}', array()));
     $engine->addHelper('test2', function ($template, $context, $arg) {
         return 'Test helper is called with ' . $arg;
     });
     $this->assertEquals('Test helper is called with a b c', $engine->render('{{#test2 a b c}}', array()));
     $this->assertEquals('Test helper is called with a b c', $engine->render('{{test2 a b c}}', array()));
     $engine->addHelper('renderme', function () {
         return new \Handlebars\String("{{test}}");
     });
     $this->assertEquals('Test helper is called', $engine->render('{{#renderme}}', array()));
     $engine->addHelper('dontrenderme', function () {
         return "{{test}}";
     });
     $this->assertEquals('{{test}}', $engine->render('{{#dontrenderme}}', array()));
     $engine->addHelper('markupHelper', function () {
         return '<strong>Test</strong>';
     });
     $this->assertEquals('<strong>Test</strong>', $engine->render('{{{markupHelper}}}', array()));
     $this->assertEquals('&lt;strong&gt;Test&lt;/strong&gt;', $engine->render('{{markupHelper}}', array()));
     $engine->addHelper('safeStringTest', function () {
         return new \Handlebars\SafeString('<strong>Test</strong>');
     });
     $this->assertEquals('<strong>Test</strong>', $engine->render('{{safeStringTest}}', array()));
     $engine->addHelper('argsTest', function ($template, $context, $arg) {
         $parsedArgs = $template->parseArguments($arg);
         return implode(' ', $parsedArgs);
     });
     $this->assertEquals("a \"b\" c", $engine->render('{{{argsTest "a" "\\"b\\"" \'c\'}}}', array()));
     // This is just a fun thing to do :)
     $that = $this;
     $engine->addHelper('stopToken', function ($template, $context, $arg) use($that) {
         /** @var $template \Handlebars\Template */
         $parsedArgs = $template->parseArguments($arg);
         $first = array_shift($parsedArgs);
         $last = array_shift($parsedArgs);
         if ($last == 'yes') {
             $template->setStopToken($first);
             $that->assertEquals($first, $template->getStopToken());
             $buffer = $template->render($context);
             $template->setStopToken(false);
             $template->discard($context);
         } else {
             $template->setStopToken($first);
             $that->assertEquals($first, $template->getStopToken());
             $template->discard($context);
             $template->setStopToken(false);
             $buffer = $template->render($context);
         }
         return $buffer;
     });
     $this->assertEquals("Used", $engine->render('{{# stopToken fun no}}Not used{{ fun }}Used{{/stopToken }}', array()));
     $this->assertEquals("Not used", $engine->render('{{# stopToken any yes}}Not used{{ any }}Used{{/stopToken }}', array()));
     $this->setExpectedException('InvalidArgumentException');
     $engine->getHelpers()->call('invalid', $engine->loadTemplate(''), new \Handlebars\Context(), '', '');
 }