From: Fabien Potencier Date: Tue, 24 Jan 2012 18:09:28 +0000 (+0100) Subject: add a unit test for previous merge X-Git-Url: http://git.silmor.de/gitweb/?a=commitdiff_plain;h=f958d91e79a8e007017341659ffea998b490fc51;p=web%2Fkonrad%2Ftwig.git add a unit test for previous merge --- diff --git a/test/Twig/Tests/ParserTest.php b/test/Twig/Tests/ParserTest.php index 147a278..76f257a 100644 --- a/test/Twig/Tests/ParserTest.php +++ b/test/Twig/Tests/ParserTest.php @@ -92,6 +92,29 @@ class Twig_Tests_ParserTest extends PHPUnit_Framework_TestCase $parser->filterBodyNodes(new Twig_Node_Text(chr(0xEF).chr(0xBB).chr(0xBF), 0)); } + public function testParseIsReentrant() + { + $twig = new Twig_Environment(null, array( + 'autoescape' => false, + 'optimizations' => 0, + )); + $twig->addTokenParser(new TestTokenParser()); + + $parser = new Twig_Parser($twig); + + $parser->parse(new Twig_TokenStream(array( + new Twig_Token(Twig_Token::BLOCK_START_TYPE, '', 0), + new Twig_Token(Twig_Token::NAME_TYPE, 'test', 0), + new Twig_Token(Twig_Token::BLOCK_END_TYPE, '', 0), + new Twig_Token(Twig_Token::VAR_START_TYPE, '', 0), + new Twig_Token(Twig_Token::NAME_TYPE, 'foo', 0), + new Twig_Token(Twig_Token::VAR_END_TYPE, '', 0), + new Twig_Token(Twig_Token::EOF_TYPE, '', 0), + ))); + + $this->assertEquals(null, $parser->getParent()); + } + protected function getParserForFilterBodyNodes() { $parser = new TestParser(new Twig_Environment()); @@ -111,3 +134,27 @@ class TestParser extends Twig_Parser return parent::filterBodyNodes($node); } } + +class TestTokenParser extends Twig_TokenParser +{ + public function parse(Twig_Token $token) + { + // simulate the parsing of another template right in the middle of the parsing of the current template + $this->parser->parse(new Twig_TokenStream(array( + new Twig_Token(Twig_Token::BLOCK_START_TYPE, '', 0), + new Twig_Token(Twig_Token::NAME_TYPE, 'extends', 0), + new Twig_Token(Twig_Token::STRING_TYPE, 'base', 0), + new Twig_Token(Twig_Token::BLOCK_END_TYPE, '', 0), + new Twig_Token(Twig_Token::EOF_TYPE, '', 0), + ))); + + $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE); + + return new Twig_Node(array()); + } + + public function getTag() + { + return 'test'; + } +}