/** * 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('<strong>Test</strong>', $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(), '', ''); }