123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- <?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_LexerTest extends PHPUnit_Framework_TestCase
- {
- public function testNameLabelForTag()
- {
- $template = '{% ☃ %}';
-
- $lexer = new Twig_Lexer(new Twig_Environment());
- $stream = $lexer->tokenize($template);
-
- $stream->expect(Twig_Token::BLOCK_START_TYPE);
- $this->assertSame('☃', $stream->expect(Twig_Token::NAME_TYPE)->getValue());
- }
-
- public function testNameLabelForFunction()
- {
- $template = '{{ ☃() }}';
-
- $lexer = new Twig_Lexer(new Twig_Environment());
- $stream = $lexer->tokenize($template);
-
- $stream->expect(Twig_Token::VAR_START_TYPE);
- $this->assertSame('☃', $stream->expect(Twig_Token::NAME_TYPE)->getValue());
- }
-
- public function testBracketsNesting()
- {
- $template = '{{ {"a":{"b":"c"}} }}';
-
- $this->assertEquals(2, $this->countToken($template, Twig_Token::PUNCTUATION_TYPE, '{'));
- $this->assertEquals(2, $this->countToken($template, Twig_Token::PUNCTUATION_TYPE, '}'));
- }
-
- protected function countToken($template, $type, $value = null)
- {
- $lexer = new Twig_Lexer(new Twig_Environment());
- $stream = $lexer->tokenize($template);
-
- $count = 0;
- $tokens = array();
- while (!$stream->isEOF()) {
- $token = $stream->next();
- if ($type === $token->getType()) {
- if (null === $value || $value === $token->getValue()) {
- ++$count;
- }
- }
- }
-
- return $count;
- }
-
- public function testLineDirective()
- {
- $template = "foo\n"
- . "bar\n"
- . "{% line 10 %}\n"
- . "{{\n"
- . "baz\n"
- . "}}\n";
-
- $lexer = new Twig_Lexer(new Twig_Environment());
- $stream = $lexer->tokenize($template);
-
- // foo\nbar\n
- $this->assertSame(1, $stream->expect(Twig_Token::TEXT_TYPE)->getLine());
- // \n (after {% line %})
- $this->assertSame(10, $stream->expect(Twig_Token::TEXT_TYPE)->getLine());
- // {{
- $this->assertSame(11, $stream->expect(Twig_Token::VAR_START_TYPE)->getLine());
- // baz
- $this->assertSame(12, $stream->expect(Twig_Token::NAME_TYPE)->getLine());
- }
-
- public function testLineDirectiveInline()
- {
- $template = "foo\n"
- . "bar{% line 10 %}{{\n"
- . "baz\n"
- . "}}\n";
-
- $lexer = new Twig_Lexer(new Twig_Environment());
- $stream = $lexer->tokenize($template);
-
- // foo\nbar
- $this->assertSame(1, $stream->expect(Twig_Token::TEXT_TYPE)->getLine());
- // {{
- $this->assertSame(10, $stream->expect(Twig_Token::VAR_START_TYPE)->getLine());
- // baz
- $this->assertSame(11, $stream->expect(Twig_Token::NAME_TYPE)->getLine());
- }
-
- public function testLongComments()
- {
- $template = '{# '.str_repeat('*', 100000).' #}';
-
- $lexer = new Twig_Lexer(new Twig_Environment());
- $lexer->tokenize($template);
-
- // should not throw an exception
- }
-
- public function testLongRaw()
- {
- $template = '{% raw %}'.str_repeat('*', 100000).'{% endraw %}';
-
- $lexer = new Twig_Lexer(new Twig_Environment());
- $stream = $lexer->tokenize($template);
-
- // should not throw an exception
- }
-
- public function testLongVar()
- {
- $template = '{{ '.str_repeat('x', 100000).' }}';
-
- $lexer = new Twig_Lexer(new Twig_Environment());
- $stream = $lexer->tokenize($template);
-
- // should not throw an exception
- }
-
- public function testLongBlock()
- {
- $template = '{% '.str_repeat('x', 100000).' %}';
-
- $lexer = new Twig_Lexer(new Twig_Environment());
- $stream = $lexer->tokenize($template);
-
- // should not throw an exception
- }
-
- public function testBigNumbers()
- {
- $template = '{{ 922337203685477580700 }}';
-
- $lexer = new Twig_Lexer(new Twig_Environment());
- $stream = $lexer->tokenize($template);
- $node = $stream->next();
- $node = $stream->next();
- $this->assertEquals(922337203685477580700, $node->getValue());
- }
- }
|