Example #1
0
 /**
  * @dataProvider sourcesProvider
  */
 public function testCompiles($source, $expectedOutput, $locals)
 {
     //
     // parse
     //
     $parseContext = new ParserContext();
     $parseContext->setString($source)->setBaseDirectory(__DIR__);
     $template = $parseContext->parse();
     $this->assertInstanceOf('Skrz\\Templating\\Engine\\AST\\TemplateNode', $template);
     //
     // compile
     //
     $compilerContext = new CompilerContext();
     $compilerContext->setNamespace('Skrz\\Templating\\Engine')->setClassName("Template_" . sha1(uniqid('', true)))->setTemplate($template)->setParserContext($parseContext)->addModifier("strip_tags", function (Compiler $compiler, ModifierNode $modifier, $text) {
         return new ModifierCompilerResult("strip_tags({$text})");
     })->addFunction("inferno", function (Compiler $compiler, FunctionNode $function) {
         /** @var StatementAndExpressionVO $hell */
         $hell = $compiler->walk($function->getArgument("hell"));
         $ret = "";
         $ret .= "echo '666 ';";
         $ret .= $hell->getStatement();
         $ret .= "echo " . $hell->getExpression() . ";";
         $ret .= "echo ' 666';";
         return new FunctionCompilerResult($ret);
     });
     $compiled = $compilerContext->compile();
     //
     // debug
     //
     //		echo "\n\n";
     //		echo "$source\n";
     //		echo "--------\n";
     //		echo $compiled;
     //		echo "\n";
     //
     // run
     //
     $this->assertNull(eval("?>{$compiled}"));
     $fullyQualifiedClassName = $compilerContext->getFullyQualifiedClassName();
     $templateInstance = new $fullyQualifiedClassName();
     ob_start();
     $templateInstance($locals);
     $actualOutput = ob_get_contents();
     ob_end_clean();
     $this->assertEquals($expectedOutput, $actualOutput);
 }