add another test

This commit is contained in:
fzerorubigd 2014-02-26 21:13:11 +03:30
parent 939c58bbee
commit 9c91ea7d64
No known key found for this signature in database
GPG Key ID: D6EE858AF9D2999A
3 changed files with 113 additions and 63 deletions

View File

@ -1,3 +1,6 @@
inherit: true inherit: true
filter:
paths: [src/*]
excluded_paths: [tests/*]
tools: tools:
php_code_coverage: true php_code_coverage: true

View File

@ -278,12 +278,12 @@ class Context
/** /**
* Splits variable name to chunks. * Splits variable name to chunks.
* *
* @param string $variable_name Fully qualified name of a variable. * @param string $variableName Fully qualified name of a variable.
* *
* @throws \InvalidArgumentException if variable name is invalid. * @throws \InvalidArgumentException if variable name is invalid.
* @return array * @return array
*/ */
private function _splitVariableName($variable_name) private function _splitVariableName($variableName)
{ {
$bad_chars = preg_quote(self::NOT_VALID_NAME_CHARS, '/'); $bad_chars = preg_quote(self::NOT_VALID_NAME_CHARS, '/');
$bad_seg_chars = preg_quote(self::NOT_VALID_SEGMENT_NAME_CHARS, '/'); $bad_seg_chars = preg_quote(self::NOT_VALID_SEGMENT_NAME_CHARS, '/');
@ -292,11 +292,11 @@ class Context
$check_pattern = "/^((" . $name_pattern . ")\.)*(" . $name_pattern . ")\.?$/"; $check_pattern = "/^((" . $name_pattern . ")\.)*(" . $name_pattern . ")\.?$/";
$get_pattern = "/(?:" . $name_pattern . ")/"; $get_pattern = "/(?:" . $name_pattern . ")/";
if (!preg_match($check_pattern, $variable_name)) { if (!preg_match($check_pattern, $variableName)) {
throw new \InvalidArgumentException('variable name is invalid'); throw new \InvalidArgumentException('variable name is invalid');
} }
preg_match_all($get_pattern, $variable_name, $matches); preg_match_all($get_pattern, $variableName, $matches);
$chunks = array(); $chunks = array();
foreach ($matches[0] as $chunk) { foreach ($matches[0] as $chunk) {

View File

@ -24,6 +24,7 @@ class HandlebarsTest extends \PHPUnit_Framework_TestCase
{ {
\Handlebars\Autoloader::register(); \Handlebars\Autoloader::register();
} }
/** /**
* Test handlebars autoloader * Test handlebars autoloader
* *
@ -83,27 +84,27 @@ class HandlebarsTest extends \PHPUnit_Framework_TestCase
), ),
array( array(
'{{data.length}}', '{{data.length}}',
array("data" => array(1,2,3,4)), array("data" => array(1, 2, 3, 4)),
'4' '4'
), ),
array( array(
'{{data.length}}', '{{data.length}}',
array("data"=> (object)array(1,2,3,4)), array("data" => (object)array(1, 2, 3, 4)),
'' ''
), ),
array( array(
'{{data.length}}', '{{data.length}}',
array("data"=>array("length"=>"15 inches", "test","test","test")), array("data" => array("length" => "15 inches", "test", "test", "test")),
"15 inches" "15 inches"
), ),
array( array(
'{{data.0}}', '{{data.0}}',
array("data" => array(1,2,3,4)), array("data" => array(1, 2, 3, 4)),
'1' '1'
), ),
array( array(
'{{data.property.3}}', '{{data.property.3}}',
array("data"=>array("property"=>array(1,2,3,4))), array("data" => array("property" => array(1, 2, 3, 4))),
'4' '4'
), ),
array( array(
@ -170,17 +171,17 @@ class HandlebarsTest extends \PHPUnit_Framework_TestCase
), ),
array( array(
'{{#each data}}{{@key}}=>{{this}}{{/each}}', '{{#each data}}{{@key}}=>{{this}}{{/each}}',
array('data' => array('key1'=>1, 'key2'=>2,)), array('data' => array('key1' => 1, 'key2' => 2,)),
'key1=>1key2=>2' 'key1=>1key2=>2'
), ),
array( array(
'{{#each data}}{{@key}}=>{{this}}{{/each}}', '{{#each data}}{{@key}}=>{{this}}{{/each}}',
array('data' => new \ArrayIterator(array('key1'=>1, 'key2'=>2))), array('data' => new \ArrayIterator(array('key1' => 1, 'key2' => 2))),
'key1=>1key2=>2' 'key1=>1key2=>2'
), ),
array( array(
'{{#each data}}{{@index}}=>{{this}},{{/each}}', '{{#each data}}{{@index}}=>{{this}},{{/each}}',
array('data' => array('key1'=>1, 'key2'=>2,)), array('data' => array('key1' => 1, 'key2' => 2,)),
'0=>1,1=>2,' '0=>1,1=>2,'
), ),
array( array(
@ -238,7 +239,7 @@ class HandlebarsTest extends \PHPUnit_Framework_TestCase
public function testHelpersManagement() public function testHelpersManagement()
{ {
$helpers = new \Handlebars\Helpers(array('test' => function () { $helpers = new \Handlebars\Helpers(array('test' => function () {
}), false); }), false);
$engine = new \Handlebars\Handlebars(array('helpers' => $helpers)); $engine = new \Handlebars\Handlebars(array('helpers' => $helpers));
$this->assertTrue(is_callable($engine->getHelper('test'))); $this->assertTrue(is_callable($engine->getHelper('test')));
$this->assertTrue($engine->hasHelper('test')); $this->assertTrue($engine->hasHelper('test'));
@ -265,19 +266,23 @@ class HandlebarsTest extends \PHPUnit_Framework_TestCase
$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()));
$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}}");}); $engine->addHelper('renderme', function () {
return new \Handlebars\String("{{test}}");
});
$this->assertEquals('Test helper is called', $engine->render('{{#renderme}}', array())); $this->assertEquals('Test helper is called', $engine->render('{{#renderme}}', array()));
$engine->addHelper('dontrenderme', function() {return "{{test}}";}); $engine->addHelper('dontrenderme', function () {
return "{{test}}";
});
$this->assertEquals('{{test}}', $engine->render('{{#dontrenderme}}', array())); $this->assertEquals('{{test}}', $engine->render('{{#dontrenderme}}', array()));
$engine->addHelper('markupHelper', function() { $engine->addHelper('markupHelper', function () {
return '<strong>Test</strong>'; return '<strong>Test</strong>';
}); });
$this->assertEquals('<strong>Test</strong>', $engine->render('{{{markupHelper}}}', array())); $this->assertEquals('<strong>Test</strong>', $engine->render('{{{markupHelper}}}', array()));
$this->assertEquals('&lt;strong&gt;Test&lt;/strong&gt;', $engine->render('{{markupHelper}}', array())); $this->assertEquals('&lt;strong&gt;Test&lt;/strong&gt;', $engine->render('{{markupHelper}}', array()));
$engine->addHelper('safeStringTest', function() { $engine->addHelper('safeStringTest', function () {
return new \Handlebars\SafeString('<strong>Test</strong>'); return new \Handlebars\SafeString('<strong>Test</strong>');
}); });
$this->assertEquals('<strong>Test</strong>', $engine->render('{{safeStringTest}}', array())); $this->assertEquals('<strong>Test</strong>', $engine->render('{{safeStringTest}}', array()));
@ -306,16 +311,16 @@ class HandlebarsTest extends \PHPUnit_Framework_TestCase
{ {
$loader = new \Handlebars\Loader\StringLoader(); $loader = new \Handlebars\Loader\StringLoader();
$engine = new \Handlebars\Handlebars(array('loader' => $loader)); $engine = new \Handlebars\Handlebars(array('loader' => $loader));
$this->assertEquals('yes', $engine->render('{{#x}}yes{{/x}}', array ('x' => true))); $this->assertEquals('yes', $engine->render('{{#x}}yes{{/x}}', array('x' => true)));
$this->assertEquals('', $engine->render('{{#x}}yes{{/x}}', array ('x' => false))); $this->assertEquals('', $engine->render('{{#x}}yes{{/x}}', array('x' => false)));
$this->assertEquals('yes', $engine->render('{{^x}}yes{{/x}}', array ('x' => false))); $this->assertEquals('yes', $engine->render('{{^x}}yes{{/x}}', array('x' => false)));
$this->assertEquals('1234', $engine->render('{{#x}}{{this}}{{/x}}', array ('x' => array (1,2,3,4)))); $this->assertEquals('1234', $engine->render('{{#x}}{{this}}{{/x}}', array('x' => array(1, 2, 3, 4))));
$this->assertEquals('012', $engine->render('{{#x}}{{@index}}{{/x}}', array ('x' => array ('a','b','c')))); $this->assertEquals('012', $engine->render('{{#x}}{{@index}}{{/x}}', array('x' => array('a', 'b', 'c'))));
$this->assertEquals('abc', $engine->render('{{#x}}{{@key}}{{/x}}', array ('x' => array ('a'=>1,'b'=>2,'c'=>3)))); $this->assertEquals('abc', $engine->render('{{#x}}{{@key}}{{/x}}', array('x' => array('a' => 1, 'b' => 2, 'c' => 3))));
$std = new stdClass(); $std = new stdClass();
$std->value = 1; $std->value = 1;
$this->assertEquals('1', $engine->render('{{#x}}{{value}}{{/x}}', array ('x' => $std))); $this->assertEquals('1', $engine->render('{{#x}}{{value}}{{/x}}', array('x' => $std)));
$this->assertEquals('1', $engine->render('{{{x}}}', array ('x' => 1))); $this->assertEquals('1', $engine->render('{{{x}}}', array('x' => 1)));
} }
/** /**
@ -334,11 +339,13 @@ class HandlebarsTest extends \PHPUnit_Framework_TestCase
public function testHelpersClass() public function testHelpersClass()
{ {
$helpers = new \Handlebars\Helpers(); $helpers = new \Handlebars\Helpers();
$helpers->add('test', function(){}); $helpers->add('test', function () {
});
$this->assertTrue($helpers->has('test')); $this->assertTrue($helpers->has('test'));
$this->assertTrue(isset($helpers->test)); $this->assertTrue(isset($helpers->test));
$this->assertFalse($helpers->isEmpty()); $this->assertFalse($helpers->isEmpty());
$helpers->test2 = function(){}; $helpers->test2 = function () {
};
$this->assertTrue($helpers->has('test2')); $this->assertTrue($helpers->has('test2'));
$this->assertTrue(isset($helpers->test2)); $this->assertTrue(isset($helpers->test2));
$this->assertFalse($helpers->isEmpty()); $this->assertFalse($helpers->isEmpty());
@ -450,6 +457,7 @@ class HandlebarsTest extends \PHPUnit_Framework_TestCase
$engine->setLoader($loader); $engine->setLoader($loader);
$this->assertEquals('test', $engine->render('loader', array())); $this->assertEquals('test', $engine->render('loader', array()));
} }
/** /**
* Test file system loader * Test file system loader
*/ */
@ -473,6 +481,7 @@ class HandlebarsTest extends \PHPUnit_Framework_TestCase
/** /**
* Test file system loader * Test file system loader
*
* @expectedException \InvalidArgumentException * @expectedException \InvalidArgumentException
*/ */
public function testFileSystemLoaderNotFound() public function testFileSystemLoaderNotFound()
@ -482,8 +491,10 @@ class HandlebarsTest extends \PHPUnit_Framework_TestCase
$engine->setLoader($loader); $engine->setLoader($loader);
$engine->render('invalid_file', array()); $engine->render('invalid_file', array());
} }
/** /**
* Test file system loader * Test file system loader
*
* @expectedException \RuntimeException * @expectedException \RuntimeException
*/ */
public function testFileSystemLoaderInvalidFolder() public function testFileSystemLoaderInvalidFolder()
@ -600,7 +611,7 @@ class HandlebarsTest extends \PHPUnit_Framework_TestCase
public function getInvalidData() public function getInvalidData()
{ {
return array ( return array(
array('../../data'), array('../../data'),
array('data'), array('data'),
array(''), array(''),
@ -611,11 +622,12 @@ class HandlebarsTest extends \PHPUnit_Framework_TestCase
/** /**
* Test for proper handling of the length property * Test for proper handling of the length property
**/ **/
public function testArrayLengthEmulation(){ public function testArrayLengthEmulation()
{
$data = array("numbers"=>array(1,2,3,4), $data = array("numbers" => array(1, 2, 3, 4),
"object"=>(object)array("prop1"=>"val1", "prop2"=>"val2"), "object" => (object)array("prop1" => "val1", "prop2" => "val2"),
"object_with_length_property"=>(object)array("length"=>"15cm") "object_with_length_property" => (object)array("length" => "15cm")
); );
$context = new \Handlebars\Context($data); $context = new \Handlebars\Context($data);
// make sure we are getting the array length when given an array // make sure we are getting the array length when given an array
@ -626,17 +638,18 @@ class HandlebarsTest extends \PHPUnit_Framework_TestCase
$this->assertEquals($context->get("object_with_length_property.length"), "15cm"); $this->assertEquals($context->get("object_with_length_property.length"), "15cm");
} }
public function argumentParserProvider(){ public function argumentParserProvider()
{
return array( return array(
array('arg1 arg2', array("arg1","arg2")), array('arg1 arg2', array("arg1", "arg2")),
array('"arg1 arg2"', array("arg1 arg2")), array('"arg1 arg2"', array("arg1 arg2")),
array('arg1 arg2 "arg number 3"', array("arg1","arg2","arg number 3")), array('arg1 arg2 "arg number 3"', array("arg1", "arg2", "arg number 3")),
array('arg1 "arg\"2" "\"arg3\""', array("arg1",'arg"2', '"arg3"')), array('arg1 "arg\"2" "\"arg3\""', array("arg1", 'arg"2', '"arg3"')),
array("'arg1 arg2'", array("arg1 arg2")), array("'arg1 arg2'", array("arg1 arg2")),
array("arg1 arg2 'arg number 3'", array("arg1","arg2","arg number 3")), array("arg1 arg2 'arg number 3'", array("arg1", "arg2", "arg number 3")),
array('arg1 "arg\"2" "\\\'arg3\\\'"', array("arg1",'arg"2', "'arg3'")), array('arg1 "arg\"2" "\\\'arg3\\\'"', array("arg1", 'arg"2', "'arg3'")),
array('arg1 arg2.[value\'s "segment"].val', array("arg1", 'arg2.[value\'s "segment"].val')), array('arg1 arg2.[value\'s "segment"].val', array("arg1", 'arg2.[value\'s "segment"].val')),
array('"arg1.[value 1]" arg2', array("arg1.[value 1]", 'arg2')), array('"arg1.[value 1]" arg2', array("arg1.[value 1]", 'arg2')),
); );
} }
@ -650,51 +663,85 @@ class HandlebarsTest extends \PHPUnit_Framework_TestCase
* *
* @return void * @return void
*/ */
public function testArgumentParser($arg_string, $expected_array){ public function testArgumentParser($arg_string, $expected_array)
{
$engine = new \Handlebars\Handlebars(); $engine = new \Handlebars\Handlebars();
$template = new \Handlebars\Template($engine, null, null); $template = new \Handlebars\Template($engine, null, null);
// get the string version of the arguments array // get the string version of the arguments array
$args = $template->parseArguments($arg_string); $args = $template->parseArguments($arg_string);
$args = array_map(function($a){ return (string)$a; }, $args); $args = array_map(function ($a) {
return (string)$a;
}, $args);
$this->assertEquals($args, $expected_array); $this->assertEquals($args, $expected_array);
} }
public function stringLiteralInCustomHelperProvider(){ public function stringLiteralInCustomHelperProvider()
{
return array( return array(
array('{{#test2 arg1 "Argument 2"}}', array("arg1"=>"Argument 1"), "Argument 1:Argument 2"), array('{{#test2 arg1 "Argument 2"}}', array("arg1" => "Argument 1"), "Argument 1:Argument 2"),
array('{{#test2 "Argument 1" "Argument 2"}}', array("arg1"=>"Argument 1"), "Argument 1:Argument 2"), array('{{#test2 "Argument 1" "Argument 2"}}', array("arg1" => "Argument 1"), "Argument 1:Argument 2"),
array('{{#test2 "Argument 1" arg2}}', array("arg2"=>"Argument 2"), "Argument 1:Argument 2") array('{{#test2 "Argument 1" arg2}}', array("arg2" => "Argument 2"), "Argument 1:Argument 2")
); );
} }
/** /**
* Test String literals in the context of a helper * Test String literals in the context of a helper
* *
* @param string $template template text * @param string $template template text
* @param array $data context data * @param array $data context data
* @param string $results The Expected Results * @param string $results The Expected Results
* *
* @dataProvider stringLiteralInCustomHelperProvider * @dataProvider stringLiteralInCustomHelperProvider
* *
* @return void * @return void
*/ */
public function testStringLiteralInCustomHelper($template, $data, $results){ public function testStringLiteralInCustomHelper($template, $data, $results)
{
$engine = new \Handlebars\Handlebars(); $engine = new \Handlebars\Handlebars();
$engine->addHelper('test2', function ($template, $context, $args) { $engine->addHelper('test2', function ($template, $context, $args) {
$args = $template->parseArguments($args); $args = $template->parseArguments($args);
$args = array_map(function ($a) use ($context) {return $context->get($a);}, $args); $args = array_map(function ($a) use ($context) {
return $context->get($a);
}, $args);
return implode(':', $args); return implode(':', $args);
}); });
$res = $engine->render($template, $data); $res = $engine->render($template, $data);
$this->assertEquals($res, $results); $this->assertEquals($res, $results);
} }
public function testString(){ public function testString()
{
$string = new \Handlebars\String("Hello World"); $string = new \Handlebars\String("Hello World");
$this->assertEquals((string)$string, "Hello World"); $this->assertEquals((string)$string, "Hello World");
} }
public function testInvalidNames()
{
$loader = new \Handlebars\Loader\StringLoader();
$engine = new \Handlebars\Handlebars(
array(
'loader' => $loader,
)
);
$all = \Handlebars\Context::NOT_VALID_NAME_CHARS;
for ($i = 0; $i < strlen($all); $i++) {
// Dot in string is valid, its an exception here
if ($all{$i} === '.') {
continue;
}
try {
$name = 'var' . $all{$i} . 'var';
$engine->render('{{' . $name . '}}', array($name => 'VALUE'));
throw new Exception("Accept the $name :/");
} catch (Exception $e) {
$this->assertInstanceOf("InvalidArgumentException", $e);
}
}
}
} }