Server IP : 23.254.227.96 / Your IP : 216.73.216.7 Web Server : Apache/2.4.62 (Unix) OpenSSL/1.1.1k System : Linux hwsrv-1277026.hostwindsdns.com 4.18.0-477.13.1.el8_8.x86_64 #1 SMP Tue May 30 14:53:41 EDT 2023 x86_64 User : viralblo ( 1001) PHP Version : 8.1.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /usr/local/cwpsrv/var/services/twig/test/Twig/Tests/ |
Upload File : |
<?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 * @expectedExceptionMessage Unknown "foo" tag. Did you mean "for" at line 1? */ public function testUnknownTag() { $stream = new Twig_TokenStream(array( new Twig_Token(Twig_Token::BLOCK_START_TYPE, '', 1), new Twig_Token(Twig_Token::NAME_TYPE, 'foo', 1), new Twig_Token(Twig_Token::BLOCK_END_TYPE, '', 1), new Twig_Token(Twig_Token::EOF_TYPE, '', 1), )); $parser = new Twig_Parser(new Twig_Environment($this->getMockBuilder('Twig_LoaderInterface')->getMock())); $parser->parse($stream); } /** * @expectedException Twig_Error_Syntax * @expectedExceptionMessage Unknown "foobar" tag at line 1. */ public function testUnknownTagWithoutSuggestions() { $stream = new Twig_TokenStream(array( new Twig_Token(Twig_Token::BLOCK_START_TYPE, '', 1), new Twig_Token(Twig_Token::NAME_TYPE, 'foobar', 1), new Twig_Token(Twig_Token::BLOCK_END_TYPE, '', 1), new Twig_Token(Twig_Token::EOF_TYPE, '', 1), )); $parser = new Twig_Parser(new Twig_Environment($this->getMockBuilder('Twig_LoaderInterface')->getMock())); $parser->parse($stream); } /** * @dataProvider getFilterBodyNodesData */ public function testFilterBodyNodes($input, $expected) { $parser = $this->getParser(); $m = new ReflectionMethod($parser, 'filterBodyNodes'); $m->setAccessible(true); $this->assertEquals($expected, $m->invoke($parser, $input)); } public function getFilterBodyNodesData() { return array( array( new Twig_Node(array(new Twig_Node_Text(' ', 1))), new Twig_Node(array()), ), array( $input = new Twig_Node(array(new Twig_Node_Set(false, new Twig_Node(), new Twig_Node(), 1))), $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', 1))))), 1))), $input, ), ); } /** * @dataProvider getFilterBodyNodesDataThrowsException * @expectedException Twig_Error_Syntax */ public function testFilterBodyNodesThrowsException($input) { $parser = $this->getParser(); $m = new ReflectionMethod($parser, 'filterBodyNodes'); $m->setAccessible(true); $m->invoke($parser, $input); } public function getFilterBodyNodesDataThrowsException() { return array( array(new Twig_Node_Text('foo', 1)), array(new Twig_Node(array(new Twig_Node(array(new Twig_Node_Text('foo', 1)))))), ); } /** * @expectedException Twig_Error_Syntax * @expectedExceptionMessage A template that extends another one cannot start with a byte order mark (BOM); it must be removed at line 1 */ public function testFilterBodyNodesWithBOM() { $parser = $this->getParser(); $m = new ReflectionMethod($parser, 'filterBodyNodes'); $m->setAccessible(true); $m->invoke($parser, new Twig_Node_Text(chr(0xEF).chr(0xBB).chr(0xBF), 1)); } public function testParseIsReentrant() { $twig = new Twig_Environment($this->getMockBuilder('Twig_LoaderInterface')->getMock(), 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, '', 1), new Twig_Token(Twig_Token::NAME_TYPE, 'test', 1), new Twig_Token(Twig_Token::BLOCK_END_TYPE, '', 1), new Twig_Token(Twig_Token::VAR_START_TYPE, '', 1), new Twig_Token(Twig_Token::NAME_TYPE, 'foo', 1), new Twig_Token(Twig_Token::VAR_END_TYPE, '', 1), new Twig_Token(Twig_Token::EOF_TYPE, '', 1), ))); $this->assertNull($parser->getParent()); } public function testGetVarName() { $twig = new Twig_Environment($this->getMockBuilder('Twig_LoaderInterface')->getMock(), array( 'autoescape' => false, 'optimizations' => 0, )); $twig->parse($twig->tokenize(new Twig_Source(<<<EOF {% from _self import foo %} {% macro foo() %} {{ foo }} {% endmacro %} EOF , 'index'))); // The getVarName() must not depend on the template loaders, // If this test does not throw any exception, that's good. // see https://github.com/symfony/symfony/issues/4218 $this->addToAssertionCount(1); } protected function getParser() { $parser = new Twig_Parser(new Twig_Environment($this->getMockBuilder('Twig_LoaderInterface')->getMock())); $parser->setParent(new Twig_Node()); $p = new ReflectionProperty($parser, 'stream'); $p->setAccessible(true); $p->setValue($parser, new Twig_TokenStream(array())); return $parser; } } 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, '', 1), new Twig_Token(Twig_Token::NAME_TYPE, 'extends', 1), new Twig_Token(Twig_Token::STRING_TYPE, 'base', 1), new Twig_Token(Twig_Token::BLOCK_END_TYPE, '', 1), new Twig_Token(Twig_Token::EOF_TYPE, '', 1), ))); $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE); return new Twig_Node(array()); } public function getTag() { return 'test'; } }