| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 | 
							- <?php
 - 
 - /*
 -  * This file is part of Twig.
 -  *
 -  * (c) Fabien Potencier
 -  *
 -  * For the full copyright and license information, please view the LICENSE
 -  * file that was distributed with this source code.
 -  */
 - class Twig_Tests_ParserTest extends PHPUnit_Framework_TestCase
 - {
 -     /**
 -      * @expectedException Twig_Error_Syntax
 -      */
 -     public function testSetMacroThrowsExceptionOnReservedMethods()
 -     {
 -         $parser = new Twig_Parser(new Twig_Environment());
 -         $parser->setMacro('display', $this->getMock('Twig_Node_Macro', array(), array(), '', null));
 -     }
 - 
 -     /**
 -      * @expectedException        Twig_Error_Syntax
 -      * @expectedExceptionMessage Unknown tag name "foo". Did you mean "for" at line 0
 -      */
 -     public function testUnkownTag()
 -     {
 -         $stream = new Twig_TokenStream(array(
 -             new Twig_Token(Twig_Token::BLOCK_START_TYPE, '', 0),
 -             new Twig_Token(Twig_Token::NAME_TYPE, 'foo', 0),
 -             new Twig_Token(Twig_Token::BLOCK_END_TYPE, '', 0),
 -             new Twig_Token(Twig_Token::EOF_TYPE, '', 0),
 -         ));
 -         $parser = new Twig_Parser(new Twig_Environment());
 -         $parser->parse($stream);
 -     }
 - 
 -     /**
 -      * @dataProvider getFilterBodyNodesData
 -      */
 -     public function testFilterBodyNodes($input, $expected)
 -     {
 -         $parser = $this->getParserForFilterBodyNodes();
 - 
 -         $this->assertEquals($expected, $parser->filterBodyNodes($input));
 -     }
 - 
 -     public function getFilterBodyNodesData()
 -     {
 -         return array(
 -             array(
 -                 new Twig_Node(array(new Twig_Node_Text('   ', 0))),
 -                 new Twig_Node(array()),
 -             ),
 -             array(
 -                 $input = new Twig_Node(array(new Twig_Node_Set(false, new Twig_Node(), new Twig_Node(), 0))),
 -                 $input,
 -             ),
 -             array(
 -                 $input = new Twig_Node(array(new Twig_Node_Set(true, new Twig_Node(), new Twig_Node(array(new Twig_Node(array(new Twig_Node_Text('foo', 0))))), 0))),
 -                 $input,
 -             ),
 -         );
 -     }
 - 
 -     /**
 -      * @dataProvider getFilterBodyNodesDataThrowsException
 -      * @expectedException Twig_Error_Syntax
 -      */
 -     public function testFilterBodyNodesThrowsException($input)
 -     {
 -         $parser = $this->getParserForFilterBodyNodes();
 - 
 -         $parser->filterBodyNodes($input);
 -     }
 - 
 -     public function getFilterBodyNodesDataThrowsException()
 -     {
 -         return array(
 -             array(new Twig_Node_Text('foo', 0)),
 -             array(new Twig_Node(array(new Twig_Node(array(new Twig_Node_Text('foo', 0)))))),
 -         );
 -     }
 - 
 -     /**
 -      * @expectedException Twig_Error_Syntax
 -      * @expectedExceptionMessage A template that extends another one cannot have a body but a byte order mark (BOM) has been detected; it must be removed at line 0.
 -      */
 -     public function testFilterBodyNodesWithBOM()
 -     {
 -         $parser = $this->getParserForFilterBodyNodes();
 -         $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());
 -         $parser->setParent(new Twig_Node());
 -         $parser->stream = $this->getMockBuilder('Twig_TokenStream')->disableOriginalConstructor()->getMock();
 - 
 -         return $parser;
 -     }
 - }
 - 
 - class TestParser extends Twig_Parser
 - {
 -     public $stream;
 - 
 -     public function filterBodyNodes(Twig_NodeInterface $node)
 -     {
 -         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';
 -     }
 - }
 
 
  |