1*04fd306cSNickeau<?php 2*04fd306cSNickeau 3*04fd306cSNickeau/** 4*04fd306cSNickeau * Class AutoloaderTest 5*04fd306cSNickeau */ 6*04fd306cSNickeauclass HandlebarsTest extends PHPUnit\Framework\TestCase 7*04fd306cSNickeau{ 8*04fd306cSNickeau /** 9*04fd306cSNickeau * Test handlebars autoloader 10*04fd306cSNickeau * 11*04fd306cSNickeau * @return void 12*04fd306cSNickeau */ 13*04fd306cSNickeau public function testAutoLoad() 14*04fd306cSNickeau { 15*04fd306cSNickeau Handlebars\Autoloader::register(realpath(__DIR__ . '/../fixture/')); 16*04fd306cSNickeau 17*04fd306cSNickeau $this->assertTrue(class_exists('Handlebars\\Test')); 18*04fd306cSNickeau $this->assertTrue(class_exists('Handlebars\\Example\\Test')); 19*04fd306cSNickeau } 20*04fd306cSNickeau 21*04fd306cSNickeau /** 22*04fd306cSNickeau * Test basic tags 23*04fd306cSNickeau * 24*04fd306cSNickeau * @param string $src handlebars source 25*04fd306cSNickeau * @param array $data data 26*04fd306cSNickeau * @param string $result expected data 27*04fd306cSNickeau * 28*04fd306cSNickeau * @dataProvider simpleTagdataProvider 29*04fd306cSNickeau * 30*04fd306cSNickeau * @return void 31*04fd306cSNickeau */ 32*04fd306cSNickeau public function testBasicTags($src, $data, $result) 33*04fd306cSNickeau { 34*04fd306cSNickeau $loader = new \Handlebars\Loader\StringLoader(); 35*04fd306cSNickeau $engine = new \Handlebars\Handlebars(array('loader' => $loader)); 36*04fd306cSNickeau $this->assertEquals($result, $engine->render($src, $data)); 37*04fd306cSNickeau } 38*04fd306cSNickeau 39*04fd306cSNickeau /** 40*04fd306cSNickeau * Simple tag provider 41*04fd306cSNickeau * 42*04fd306cSNickeau * @return array 43*04fd306cSNickeau */ 44*04fd306cSNickeau public function simpleTagdataProvider() 45*04fd306cSNickeau { 46*04fd306cSNickeau return array( 47*04fd306cSNickeau array( 48*04fd306cSNickeau '{{! This is comment}}', 49*04fd306cSNickeau array(), 50*04fd306cSNickeau '' 51*04fd306cSNickeau ), 52*04fd306cSNickeau array( 53*04fd306cSNickeau '{{data}}', 54*04fd306cSNickeau array('data' => 'result'), 55*04fd306cSNickeau 'result' 56*04fd306cSNickeau ), 57*04fd306cSNickeau array( 58*04fd306cSNickeau '{{data.key}}', 59*04fd306cSNickeau array('data' => array('key' => 'result')), 60*04fd306cSNickeau 'result' 61*04fd306cSNickeau ), 62*04fd306cSNickeau ); 63*04fd306cSNickeau } 64*04fd306cSNickeau 65*04fd306cSNickeau 66*04fd306cSNickeau /** 67*04fd306cSNickeau * Test helpers (internal helpers) 68*04fd306cSNickeau * 69*04fd306cSNickeau * @param string $src handlebars source 70*04fd306cSNickeau * @param array $data data 71*04fd306cSNickeau * @param string $result expected data 72*04fd306cSNickeau * 73*04fd306cSNickeau * @dataProvider internalHelpersdataProvider 74*04fd306cSNickeau * 75*04fd306cSNickeau * @return void 76*04fd306cSNickeau */ 77*04fd306cSNickeau public function testSimpleHelpers($src, $data, $result) 78*04fd306cSNickeau { 79*04fd306cSNickeau $loader = new \Handlebars\Loader\StringLoader(); 80*04fd306cSNickeau $helpers = new \Handlebars\Helpers(); 81*04fd306cSNickeau $engine = new \Handlebars\Handlebars(array('loader' => $loader, 'helpers' => $helpers)); 82*04fd306cSNickeau 83*04fd306cSNickeau $this->assertEquals($result, $engine->render($src, $data)); 84*04fd306cSNickeau } 85*04fd306cSNickeau 86*04fd306cSNickeau /** 87*04fd306cSNickeau * Simple helpers provider 88*04fd306cSNickeau * 89*04fd306cSNickeau * @return array 90*04fd306cSNickeau */ 91*04fd306cSNickeau public function internalHelpersdataProvider() 92*04fd306cSNickeau { 93*04fd306cSNickeau return [ 94*04fd306cSNickeau [ 95*04fd306cSNickeau '{{#if data}}Yes{{/if}}', 96*04fd306cSNickeau ['data' => true], 97*04fd306cSNickeau 'Yes' 98*04fd306cSNickeau ], 99*04fd306cSNickeau [ 100*04fd306cSNickeau '{{#if data}}Yes{{/if}}', 101*04fd306cSNickeau ['data' => false], 102*04fd306cSNickeau '' 103*04fd306cSNickeau ], 104*04fd306cSNickeau [ 105*04fd306cSNickeau '{{#unless data}}OK{{/unless}}', 106*04fd306cSNickeau ['data' => false], 107*04fd306cSNickeau 'OK' 108*04fd306cSNickeau ], 109*04fd306cSNickeau [ 110*04fd306cSNickeau '{{#unless data}}OK {{else}}I believe{{/unless}}', 111*04fd306cSNickeau ['data' => true], 112*04fd306cSNickeau 'I believe' 113*04fd306cSNickeau ], 114*04fd306cSNickeau [ 115*04fd306cSNickeau '{{#with data}}{{key}}{{/with}}', 116*04fd306cSNickeau ['data' => ['key' => 'result']], 117*04fd306cSNickeau 'result' 118*04fd306cSNickeau ], 119*04fd306cSNickeau [ 120*04fd306cSNickeau '{{#each data}}{{this}}{{/each}}', 121*04fd306cSNickeau ['data' => [1, 2, 3, 4]], 122*04fd306cSNickeau '1234' 123*04fd306cSNickeau ], 124*04fd306cSNickeau [ 125*04fd306cSNickeau '{{#each data[0:2]}}{{this}}{{/each}}', 126*04fd306cSNickeau ['data' => [1, 2, 3, 4]], 127*04fd306cSNickeau '12' 128*04fd306cSNickeau ], 129*04fd306cSNickeau [ 130*04fd306cSNickeau '{{#each data[1:2]}}{{this}}{{/each}}', 131*04fd306cSNickeau ['data' => [1, 2, 3, 4]], 132*04fd306cSNickeau '23' 133*04fd306cSNickeau ], 134*04fd306cSNickeau [ 135*04fd306cSNickeau '{{#upper data}}', 136*04fd306cSNickeau ['data' => "hello"], 137*04fd306cSNickeau 'HELLO' 138*04fd306cSNickeau ], 139*04fd306cSNickeau [ 140*04fd306cSNickeau '{{#lower data}}', 141*04fd306cSNickeau ['data' => "HELlO"], 142*04fd306cSNickeau 'hello' 143*04fd306cSNickeau ], 144*04fd306cSNickeau [ 145*04fd306cSNickeau '{{#capitalize data}}', 146*04fd306cSNickeau ['data' => "hello"], 147*04fd306cSNickeau 'Hello' 148*04fd306cSNickeau ], 149*04fd306cSNickeau [ 150*04fd306cSNickeau '{{#capitalize_words data}}', 151*04fd306cSNickeau ['data' => "hello world"], 152*04fd306cSNickeau 'Hello World' 153*04fd306cSNickeau ], 154*04fd306cSNickeau [ 155*04fd306cSNickeau '{{#reverse data}}', 156*04fd306cSNickeau ['data' => "hello"], 157*04fd306cSNickeau 'olleh' 158*04fd306cSNickeau ], 159*04fd306cSNickeau [ 160*04fd306cSNickeau "{{#inflect count 'album' 'albums' }}", 161*04fd306cSNickeau ["count" => 1], 162*04fd306cSNickeau 'album' 163*04fd306cSNickeau ], 164*04fd306cSNickeau [ 165*04fd306cSNickeau "{{#inflect count 'album' 'albums' }}", 166*04fd306cSNickeau ["count" => 10], 167*04fd306cSNickeau 'albums' 168*04fd306cSNickeau ], 169*04fd306cSNickeau [ 170*04fd306cSNickeau "{{#inflect count '%d album' '%d albums' }}", 171*04fd306cSNickeau ["count" => 1], 172*04fd306cSNickeau '1 album' 173*04fd306cSNickeau ], 174*04fd306cSNickeau [ 175*04fd306cSNickeau "{{#inflect count '%d album' '%d albums' }}", 176*04fd306cSNickeau ["count" => 10], 177*04fd306cSNickeau '10 albums' 178*04fd306cSNickeau ], 179*04fd306cSNickeau [ 180*04fd306cSNickeau "{{#default data 'OK' }}", 181*04fd306cSNickeau ["data" => "hello"], 182*04fd306cSNickeau 'hello' 183*04fd306cSNickeau ], 184*04fd306cSNickeau [ 185*04fd306cSNickeau "{{#default data 'OK' }}", 186*04fd306cSNickeau [], 187*04fd306cSNickeau 'OK' 188*04fd306cSNickeau ], 189*04fd306cSNickeau [ 190*04fd306cSNickeau "{{#truncate data 8 '...'}}", 191*04fd306cSNickeau ["data" => "Hello World! How are you?"], 192*04fd306cSNickeau 'Hello Wo...' 193*04fd306cSNickeau ], 194*04fd306cSNickeau [ 195*04fd306cSNickeau "{{#raw}}I'm raw {{data}}{{/raw}}", 196*04fd306cSNickeau ["data" => "raw to be included, but won't :)"], 197*04fd306cSNickeau "I'm raw {{data}}" 198*04fd306cSNickeau ], 199*04fd306cSNickeau [ 200*04fd306cSNickeau "{{#repeat 3}}Yes {{/repeat}}", 201*04fd306cSNickeau [], 202*04fd306cSNickeau "Yes Yes Yes " 203*04fd306cSNickeau ], 204*04fd306cSNickeau [ 205*04fd306cSNickeau "{{#repeat 4}}Nice {{data}} {{/repeat}}", 206*04fd306cSNickeau ["data" => "Daddy!"], 207*04fd306cSNickeau "Nice Daddy! Nice Daddy! Nice Daddy! Nice Daddy! " 208*04fd306cSNickeau ], 209*04fd306cSNickeau [ 210*04fd306cSNickeau "{{#define test}}I'm Defined and Invoked{{/define}}{{#invoke test}}", 211*04fd306cSNickeau [], 212*04fd306cSNickeau "I'm Defined and Invoked" 213*04fd306cSNickeau ], 214*04fd306cSNickeau ]; 215*04fd306cSNickeau } 216*04fd306cSNickeau 217*04fd306cSNickeau /** 218*04fd306cSNickeau * @param string $src 219*04fd306cSNickeau * @param array $data 220*04fd306cSNickeau * @param string $result 221*04fd306cSNickeau * @param bool $enableDataVariables 222*04fd306cSNickeau * @dataProvider internalDataVariablesDataProvider 223*04fd306cSNickeau */ 224*04fd306cSNickeau public function testDataVariables($src, $data, $result, $enableDataVariables) 225*04fd306cSNickeau { 226*04fd306cSNickeau $loader = new \Handlebars\Loader\StringLoader(); 227*04fd306cSNickeau $helpers = new \Handlebars\Helpers(); 228*04fd306cSNickeau $engine = new \Handlebars\Handlebars(array( 229*04fd306cSNickeau 'loader' => $loader, 230*04fd306cSNickeau 'helpers' => $helpers, 231*04fd306cSNickeau 'enableDataVariables'=> $enableDataVariables, 232*04fd306cSNickeau )); 233*04fd306cSNickeau 234*04fd306cSNickeau $this->assertEquals($result, $engine->render($src, $data)); 235*04fd306cSNickeau } 236*04fd306cSNickeau 237*04fd306cSNickeau public function testDataVariables1() 238*04fd306cSNickeau { 239*04fd306cSNickeau $object = new stdClass; 240*04fd306cSNickeau $object->{'@first'} = 'apple'; 241*04fd306cSNickeau $object->{'@last'} = 'banana'; 242*04fd306cSNickeau $object->{'@index'} = 'carrot'; 243*04fd306cSNickeau $object->{'@unknown'} = 'zucchini'; 244*04fd306cSNickeau $data = ['data' => [$object]]; 245*04fd306cSNickeau $engine = new \Handlebars\Handlebars(array( 246*04fd306cSNickeau 'loader' => new \Handlebars\Loader\StringLoader(), 247*04fd306cSNickeau 'helpers' => new \Handlebars\Helpers(), 248*04fd306cSNickeau 'enableDataVariables'=> false, 249*04fd306cSNickeau )); 250*04fd306cSNickeau $template = "{{#each data}}{{@first}}, {{@last}}, {{@index}}, {{@unknown}}{{/each}}"; 251*04fd306cSNickeau 252*04fd306cSNickeau $this->assertEquals('apple, banana, 0, zucchini', $engine->render($template, $data)); 253*04fd306cSNickeau } 254*04fd306cSNickeau 255*04fd306cSNickeau /** 256*04fd306cSNickeau * Data provider for data variables 257*04fd306cSNickeau * @return array 258*04fd306cSNickeau */ 259*04fd306cSNickeau public function internalDataVariablesDataProvider() 260*04fd306cSNickeau { 261*04fd306cSNickeau // Build a standard set of objects to test against 262*04fd306cSNickeau $keyPropertyName = '@key'; 263*04fd306cSNickeau $firstPropertyName = '@first'; 264*04fd306cSNickeau $lastPropertyName = '@last'; 265*04fd306cSNickeau $unknownPropertyName = '@unknown'; 266*04fd306cSNickeau $objects = []; 267*04fd306cSNickeau foreach (['apple', 'banana', 'carrot', 'zucchini'] as $itemValue) { 268*04fd306cSNickeau $object = new stdClass(); 269*04fd306cSNickeau $object->$keyPropertyName = $itemValue; 270*04fd306cSNickeau $object->$firstPropertyName = $itemValue; 271*04fd306cSNickeau $object->$lastPropertyName = $itemValue; 272*04fd306cSNickeau $object->$unknownPropertyName = $itemValue; 273*04fd306cSNickeau $objects[] = $object; 274*04fd306cSNickeau } 275*04fd306cSNickeau 276*04fd306cSNickeau // Build a list of scenarios. These will be used later to build fanned out scenarios that will be used against 277*04fd306cSNickeau // the test. Each entry represents two different tests: (1) when enableDataVariables is enabled and (2) not enabled. 278*04fd306cSNickeau $scenarios = [ 279*04fd306cSNickeau [ 280*04fd306cSNickeau 'src' => '{{#each data}}{{@index}}{{/each}}', 281*04fd306cSNickeau 'data' => ['data' => ['apple', 'banana', 'carrot', 'zucchini']], 282*04fd306cSNickeau // @index should work the same regardless of the feature flag 283*04fd306cSNickeau 'outputNotEnabled' => '0123', 284*04fd306cSNickeau 'outputEnabled' => '0123', 285*04fd306cSNickeau ], 286*04fd306cSNickeau [ 287*04fd306cSNickeau 'src' => '{{#each data}}{{@key}}{{/each}}', 288*04fd306cSNickeau 'data' => ['data' => ['apple', 'banana', 'carrot', 'zucchini']], 289*04fd306cSNickeau 'outputNotEnabled' => '', 290*04fd306cSNickeau 'outputEnabled' => '0123' 291*04fd306cSNickeau ], 292*04fd306cSNickeau [ 293*04fd306cSNickeau 'src' => '{{#each data}}{{#each this}}outer: {{@../key}},inner: {{@key}};{{/each}}{{/each}}', 294*04fd306cSNickeau 'data' => ['data' => [['apple', 'banana'], ['carrot', 'zucchini']]], 295*04fd306cSNickeau 'outputNotEnabled' => 'outer: ,inner: ;outer: ,inner: ;outer: ,inner: ;outer: ,inner: ;', 296*04fd306cSNickeau 'outputEnabled' => 'outer: 0,inner: 0;outer: 0,inner: 1;outer: 1,inner: 0;outer: 1,inner: 1;', 297*04fd306cSNickeau ], 298*04fd306cSNickeau [ 299*04fd306cSNickeau 'src' => '{{#each data}}{{#if @first}}true{{else}}false{{/if}}{{/each}}', 300*04fd306cSNickeau 'data' => ['data' => ['apple', 'banana', 'carrot', 'zucchini']], 301*04fd306cSNickeau 'outputNotEnabled' => 'falsefalsefalsefalse', 302*04fd306cSNickeau 'outputEnabled' => 'truefalsefalsefalse', 303*04fd306cSNickeau ], 304*04fd306cSNickeau [ 305*04fd306cSNickeau 'src' => '{{#each data}}{{@first}}{{/each}}', 306*04fd306cSNickeau 'data' => ['data' => ['apple', 'banana', 'carrot', 'zucchini']], 307*04fd306cSNickeau 'outputNotEnabled' => '', 308*04fd306cSNickeau 'outputEnabled' => 'truefalsefalsefalse', 309*04fd306cSNickeau ], 310*04fd306cSNickeau [ 311*04fd306cSNickeau 'src' => '{{#each data}}{{#each this}}outer: {{@../first}},inner: {{@first}};{{/each}}{{/each}}', 312*04fd306cSNickeau 'data' => ['data' => [['apple', 'banana'], ['carrot', 'zucchini']]], 313*04fd306cSNickeau 'outputNotEnabled' => 'outer: ,inner: ;outer: ,inner: ;outer: ,inner: ;outer: ,inner: ;', 314*04fd306cSNickeau 'outputEnabled' => 'outer: true,inner: true;outer: true,inner: false;outer: false,inner: true;outer: false,inner: false;', 315*04fd306cSNickeau ], 316*04fd306cSNickeau [ 317*04fd306cSNickeau 'src' => '{{#each data}}{{#if @last}}true{{else}}false{{/if}}{{/each}}', 318*04fd306cSNickeau 'data' => ['data' => ['apple', 'banana', 'carrot', 'zucchini']], 319*04fd306cSNickeau 'outputNotEnabled' => 'falsefalsefalsefalse', 320*04fd306cSNickeau 'outputEnabled' => 'falsefalsefalsetrue' 321*04fd306cSNickeau ], 322*04fd306cSNickeau [ 323*04fd306cSNickeau 'src' => '{{#each data}}{{@last}}{{/each}}', 324*04fd306cSNickeau 'data' => ['data' => ['apple', 'banana', 'carrot', 'zucchini']], 325*04fd306cSNickeau 'outputNotEnabled' => '', 326*04fd306cSNickeau 'outputEnabled' => 'falsefalsefalsetrue' 327*04fd306cSNickeau ], 328*04fd306cSNickeau [ 329*04fd306cSNickeau 'src' => '{{#each data}}{{#each this}}outer: {{@../last}},inner: {{@last}};{{/each}}{{/each}}', 330*04fd306cSNickeau 'data' => ['data' => [['apple', 'banana'], ['carrot', 'zucchini']]], 331*04fd306cSNickeau 'outputNotEnabled' => 'outer: ,inner: ;outer: ,inner: ;outer: ,inner: ;outer: ,inner: ;', 332*04fd306cSNickeau 'outputEnabled' => 'outer: false,inner: false;outer: false,inner: true;outer: true,inner: false;outer: true,inner: true;' 333*04fd306cSNickeau ], 334*04fd306cSNickeau [ 335*04fd306cSNickeau // @index variables are ignored and the data variable is used 336*04fd306cSNickeau 'src' => '{{#each data}}{{@index}}{{/each}}', 337*04fd306cSNickeau 'data' => ['data' => [['@index' => 'apple'], ['@index' => 'banana'], ['@index' => 'carrot'], ['@index' => 'zucchini']]], 338*04fd306cSNickeau 'outputNotEnabled' => '0123', 339*04fd306cSNickeau 'outputEnabled' => '0123' 340*04fd306cSNickeau ], 341*04fd306cSNickeau [ 342*04fd306cSNickeau // @key variables are ignored and the data variable is used 343*04fd306cSNickeau 'src' => '{{#each data}}{{@index}}{{/each}}', 344*04fd306cSNickeau 'data' => ['data' => $objects], 345*04fd306cSNickeau 'outputNotEnabled' => '0123', 346*04fd306cSNickeau 'outputEnabled' => '0123' 347*04fd306cSNickeau ], 348*04fd306cSNickeau [ 349*04fd306cSNickeau // @first variables are used when data variables are not enabled. 350*04fd306cSNickeau 'src' => '{{#each data}}{{@first}}{{/each}}', 351*04fd306cSNickeau 'data' => ['data' => $objects], 352*04fd306cSNickeau 'outputNotEnabled' => 'applebananacarrotzucchini', 353*04fd306cSNickeau 'outputEnabled' => 'truefalsefalsefalse' 354*04fd306cSNickeau ], 355*04fd306cSNickeau [ 356*04fd306cSNickeau // @last variables are used when data variables are not enabled. 357*04fd306cSNickeau 'src' => '{{#each data}}{{@last}}{{/each}}', 358*04fd306cSNickeau 'data' => ['data' => $objects], 359*04fd306cSNickeau 'outputNotEnabled' => 'applebananacarrotzucchini', 360*04fd306cSNickeau 'outputEnabled' => 'falsefalsefalsetrue' 361*04fd306cSNickeau ], 362*04fd306cSNickeau [ 363*04fd306cSNickeau // @unknown variables are used when data variables are not enabled however since "unknown" is not a valid 364*04fd306cSNickeau // value it should ignored. 365*04fd306cSNickeau 'src' => '{{#each data}}{{@unknown}}{{/each}}', 366*04fd306cSNickeau 'data' => ['data' => $objects], 367*04fd306cSNickeau 'outputNotEnabled' => 'applebananacarrotzucchini', 368*04fd306cSNickeau 'outputEnabled' => '' 369*04fd306cSNickeau ], 370*04fd306cSNickeau [ 371*04fd306cSNickeau 'src' => '{{#each data}}{{@key}}{{/each}}', 372*04fd306cSNickeau 'data' => ['data' => ['fruit' => 'apple', '19' => 'banana', 'true' => 'carrot']], 373*04fd306cSNickeau 'outputNotEnabled' => 'fruit19true', 374*04fd306cSNickeau 'outputEnabled' => 'fruit19true', 375*04fd306cSNickeau ], 376*04fd306cSNickeau ]; 377*04fd306cSNickeau 378*04fd306cSNickeau // Build out a test case for when the enableDataVariables feature is enabled and when it's not 379*04fd306cSNickeau $fannedOutScenarios = []; 380*04fd306cSNickeau foreach ($scenarios as $scenario) { 381*04fd306cSNickeau $fannedOutScenarios['not enabled: ' . $scenario['src']] = [ 382*04fd306cSNickeau $scenario['src'], 383*04fd306cSNickeau $scenario['data'], 384*04fd306cSNickeau $scenario['outputNotEnabled'], 385*04fd306cSNickeau false, 386*04fd306cSNickeau ]; 387*04fd306cSNickeau $fannedOutScenarios['enabled: ' . $scenario['src']] = [ 388*04fd306cSNickeau $scenario['src'], 389*04fd306cSNickeau $scenario['data'], 390*04fd306cSNickeau $scenario['outputEnabled'], 391*04fd306cSNickeau true, 392*04fd306cSNickeau ]; 393*04fd306cSNickeau } 394*04fd306cSNickeau return $fannedOutScenarios; 395*04fd306cSNickeau } 396*04fd306cSNickeau 397*04fd306cSNickeau /** 398*04fd306cSNickeau * Management helpers 399*04fd306cSNickeau */ 400*04fd306cSNickeau public function testHelpersManagement() 401*04fd306cSNickeau { 402*04fd306cSNickeau $helpers = new \Handlebars\Helpers(array('test' => function () { 403*04fd306cSNickeau }), false); 404*04fd306cSNickeau $engine = new \Handlebars\Handlebars(array('helpers' => $helpers)); 405*04fd306cSNickeau $this->assertTrue(is_callable($engine->getHelper('test'))); 406*04fd306cSNickeau $this->assertTrue($engine->hasHelper('test')); 407*04fd306cSNickeau $engine->removeHelper('test'); 408*04fd306cSNickeau $this->assertFalse($engine->hasHelper('test')); 409*04fd306cSNickeau } 410*04fd306cSNickeau 411*04fd306cSNickeau /** 412*04fd306cSNickeau * Custom helper test 413*04fd306cSNickeau */ 414*04fd306cSNickeau public function testCustomHelper() 415*04fd306cSNickeau { 416*04fd306cSNickeau $loader = new \Handlebars\Loader\StringLoader(); 417*04fd306cSNickeau $engine = new \Handlebars\Handlebars(array('loader' => $loader)); 418*04fd306cSNickeau $engine->addHelper('test', function () { 419*04fd306cSNickeau return 'Test helper is called'; 420*04fd306cSNickeau }); 421*04fd306cSNickeau $this->assertEquals('Test helper is called', $engine->render('{{#test}}', [])); 422*04fd306cSNickeau } 423*04fd306cSNickeau 424*04fd306cSNickeau /** 425*04fd306cSNickeau * @param $dir 426*04fd306cSNickeau * 427*04fd306cSNickeau * @return bool 428*04fd306cSNickeau */ 429*04fd306cSNickeau private function delTree($dir) 430*04fd306cSNickeau { 431*04fd306cSNickeau $contents = scandir($dir); 432*04fd306cSNickeau if ($contents === false) { 433*04fd306cSNickeau return; 434*04fd306cSNickeau } 435*04fd306cSNickeau $files = array_diff($contents, array('.', '..')); 436*04fd306cSNickeau foreach ($files as $file) { 437*04fd306cSNickeau (is_dir("$dir/$file")) ? delTree("$dir/$file") : unlink("$dir/$file"); 438*04fd306cSNickeau } 439*04fd306cSNickeau 440*04fd306cSNickeau return rmdir($dir); 441*04fd306cSNickeau } 442*04fd306cSNickeau 443*04fd306cSNickeau /** 444*04fd306cSNickeau * Its not a good test :) but ok 445*04fd306cSNickeau */ 446*04fd306cSNickeau public function testCacheSystem() 447*04fd306cSNickeau { 448*04fd306cSNickeau $path = sys_get_temp_dir() . '/__cache__handlebars'; 449*04fd306cSNickeau 450*04fd306cSNickeau @$this->delTree($path); 451*04fd306cSNickeau 452*04fd306cSNickeau $dummy = new \Handlebars\Cache\Disk($path); 453*04fd306cSNickeau $engine = new \Handlebars\Handlebars(array('cache' => $dummy)); 454*04fd306cSNickeau $this->assertEquals(0, count(glob($path . '/*'))); 455*04fd306cSNickeau $engine->render('test', array()); 456*04fd306cSNickeau $this->assertEquals(1, count(glob($path . '/*'))); 457*04fd306cSNickeau } 458*04fd306cSNickeau} 459