diff --git a/src/Handlebars/Helper/IfHelper.php b/src/Handlebars/Helper/IfHelper.php index e4dd945..9c0cb4a 100644 --- a/src/Handlebars/Helper/IfHelper.php +++ b/src/Handlebars/Helper/IfHelper.php @@ -50,11 +50,8 @@ class IfHelper implements Helper */ public function execute(Template $template, Context $context, $args, $source) { - if (is_numeric($args)) { - $tmp = $args; - } else { - $tmp = $context->get($args); - } + $parsedArgs = $template->parseArguments($args); + $tmp = $context->get($parsedArgs[0]); $context->push($context->last()); if ($tmp) { diff --git a/src/Handlebars/Helper/UnlessHelper.php b/src/Handlebars/Helper/UnlessHelper.php index f851bf7..e099532 100644 --- a/src/Handlebars/Helper/UnlessHelper.php +++ b/src/Handlebars/Helper/UnlessHelper.php @@ -50,7 +50,8 @@ class UnlessHelper implements Helper */ public function execute(Template $template, Context $context, $args, $source) { - $tmp = $context->get($args); + $parsedArgs = $template->parseArguments($args); + $tmp = $context->get($parsedArgs[0]); $context->push($context->last()); diff --git a/tests/Xamin/HandlebarsTest.php b/tests/Xamin/HandlebarsTest.php index 9fa5d5b..5be6d48 100644 --- a/tests/Xamin/HandlebarsTest.php +++ b/tests/Xamin/HandlebarsTest.php @@ -1155,4 +1155,54 @@ class HandlebarsTest extends \PHPUnit_Framework_TestCase $args = new \Handlebars\Arguments($argsString); $this->assertEquals($argsString, (string)$args); } + + + public function stringLiteralsInIfAndUnlessHelpersProvider() { + return array( + // IfHelper + array('{{#if "truthyString"}}true{{else}}false{{/if}}', array(), "true"), + array("{{#if 'truthyStringSingleQuotes'}}true{{else}}false{{/if}}", array(), "true"), + array("{{#if ''}}true{{else}}false{{/if}}", array(), "false"), + array("{{#if '0'}}true{{else}}false{{/if}}", array(), "false"), + array("{{#if (add 0 1)}}true{{else}}false{{/if}}", array(), "true"), + array("{{#if (add 1 -1)}}true{{else}}false{{/if}}", array(), "false"), + // UnlessHelper + array('{{#unless "truthyString"}}true{{else}}false{{/unless}}', array(), "false"), + array("{{#unless 'truthyStringSingleQuotes'}}true{{else}}false{{/unless}}", array(), "false"), + array("{{#unless ''}}true{{else}}false{{/unless}}", array(), "true"), + array("{{#unless '0'}}true{{else}}false{{/unless}}", array(), "true"), + array("{{#unless (add 0 1)}}true{{else}}false{{/unless}}", array(), "false"), + array("{{#unless (add 1 -1)}}true{{else}}false{{/unless}}", array(), "true"), + ); + } + + /** + * Test string literals in the context of if and unless helpers + * + * @param string $template template text + * @param array $data context data + * @param string $results The Expected Results + * + * @dataProvider stringLiteralsInIfAndUnlessHelpersProvider + * + * @return void + */ + public function testStringLiteralsInIfAndUnlessHelpers($template, $data, $results) + { + $engine = new \Handlebars\Handlebars(); + + $engine->addHelper('add', function ($template, $context, $args) { + $sum = 0; + + foreach ($template->parseArguments($args) as $value) { + $sum += intval($context->get($value)); + } + + return $sum; + }); + + $res = $engine->render($template, $data); + $this->assertEquals($res, $results); + } + }