15        $env = 
new Twig_Environment($this->getMockBuilder(
'Twig_LoaderInterface')->getMock(), array(
'cache' => 
false, 
'autoescape' => 
false));
 
   19        $node = 
$stream->getNode(
'body')->getNode(0);
 
   21        $this->assertEquals(
'Twig_Node_Expression_BlockReference', get_class($node));
 
   22        $this->assertTrue($node->getAttribute(
'output'));
 
   27        $env = 
new Twig_Environment($this->getMockBuilder(
'Twig_LoaderInterface')->getMock(), array(
'cache' => 
false, 
'autoescape' => 
false));
 
   29        $stream = 
$env->parse(
$env->tokenize(
new Twig_Source(
'{% extends "foo" %}{% block content %}{{ parent() }}{% endblock %}', 
'index')));
 
   31        $node = 
$stream->getNode(
'blocks')->getNode(
'content')->getNode(0)->getNode(
'body');
 
   33        $this->assertEquals(
'Twig_Node_Expression_Parent', get_class($node));
 
   34        $this->assertTrue($node->getAttribute(
'output'));
 
   39        if (PHP_VERSION_ID >= 50400) {
 
   40            $this->markTestSkipped(
'not needed on PHP >= 5.4');
 
   43        $env = 
new Twig_Environment($this->getMockBuilder(
'Twig_LoaderInterface')->getMock(), array(
'cache' => 
false, 
'autoescape' => 
false));
 
   46        $node = 
$stream->getNode(
'body')->getNode(0)->getNode(1);
 
   48        $this->assertEquals(
'Twig_Node_Expression_BlockReference', get_class($node));
 
   49        $this->assertTrue($node->getAttribute(
'output'));
 
   57        $env = 
new Twig_Environment($this->getMockBuilder(
'Twig_LoaderInterface')->getMock(), array(
'cache' => 
false));
 
   61        foreach ($expected as 
$target => $withLoop) {
 
   69            array(
'{% for i in foo %}{% endfor %}', array(
'i' => 
false)),
 
   71            array(
'{% for i in foo %}{{ loop.index }}{% endfor %}', array(
'i' => 
true)),
 
   73            array(
'{% for i in foo %}{% for j in foo %}{% endfor %}{% endfor %}', array(
'i' => 
false, 
'j' => 
false)),
 
   75            array(
'{% for i in foo %}{% include "foo" %}{% endfor %}', array(
'i' => 
true)),
 
   77            array(
'{% for i in foo %}{% include "foo" only %}{% endfor %}', array(
'i' => 
false)),
 
   79            array(
'{% for i in foo %}{% include "foo" with { "foo": "bar" } only %}{% endfor %}', array(
'i' => 
false)),
 
   81            array(
'{% for i in foo %}{% include "foo" with { "foo": loop.index } only %}{% endfor %}', array(
'i' => 
true)),
 
   83            array(
'{% for i in foo %}{% for j in foo %}{{ loop.index }}{% endfor %}{% endfor %}', array(
'i' => 
false, 
'j' => 
true)),
 
   85            array(
'{% for i in foo %}{% for j in foo %}{{ loop.parent.loop.index }}{% endfor %}{% endfor %}', array(
'i' => 
true, 
'j' => 
true)),
 
   87            array(
'{% for i in foo %}{% set l = loop %}{% for j in foo %}{{ l.index }}{% endfor %}{% endfor %}', array(
'i' => 
true, 
'j' => 
false)),
 
   89            array(
'{% for i in foo %}{% for j in foo %}{{ foo.parent.loop.index }}{% endfor %}{% endfor %}', array(
'i' => 
false, 
'j' => 
false)),
 
   91            array(
'{% for i in foo %}{% for j in foo %}{{ loop["parent"].loop.index }}{% endfor %}{% endfor %}', array(
'i' => 
true, 
'j' => 
true)),
 
   93            array(
'{% for i in foo %}{{ include("foo") }}{% endfor %}', array(
'i' => 
true)),
 
   95            array(
'{% for i in foo %}{{ include("foo", with_context = false) }}{% endfor %}', array(
'i' => 
false)),
 
   97            array(
'{% for i in foo %}{{ include("foo", with_context = true) }}{% endfor %}', array(
'i' => 
true)),
 
   99            array(
'{% for i in foo %}{{ include("foo", { "foo": "bar" }, with_context = false) }}{% endfor %}', array(
'i' => 
false)),
 
  101            array(
'{% for i in foo %}{{ include("foo", { "foo": loop.index }, with_context = false) }}{% endfor %}', array(
'i' => 
true)),
 
  107        if (
null === $node) {
 
  111        foreach ($node as 
$n) {
 
  113                if (
$target === 
$n->getNode(
'value_target')->getAttribute(
'name')) {
 
  114                    return $withLoop == 
$n->getAttribute(
'with_loop');
 
An exception for terminatinating execution or to throw for unit testing.
Stores the Twig configuration.
Holds information about a non-compiled Twig template.
getTestsForForOptimizer()
testRenderParentBlockOptimizer()
testForOptimizer($template, $expected)
@dataProvider getTestsForForOptimizer
testRenderVariableBlockOptimizer()
checkForConfiguration(Twig_NodeInterface $node=null, $target, $withLoop)
testRenderBlockOptimizer()
Represents a node in the AST.
$stream
PHP stream implementation.