From 894c3f787daf5154a34cc234cb07da301b2c8a4c Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 19 Dec 2014 00:36:44 +0100 Subject: [PATCH] Add test for attribute assignment by parser Weird that this wasn't tested yet... --- test/PhpParser/ParserTest.php | 70 +++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/test/PhpParser/ParserTest.php b/test/PhpParser/ParserTest.php index e818975..70f8873 100644 --- a/test/PhpParser/ParserTest.php +++ b/test/PhpParser/ParserTest.php @@ -2,6 +2,8 @@ namespace PhpParser; +use PhpParser\Comment; + require_once __DIR__ . '/CodeTestAbstract.php'; class ParserTest extends CodeTestAbstract @@ -43,4 +45,72 @@ class ParserTest extends CodeTestAbstract public function provideTestParseFail() { return $this->getTests(__DIR__ . '/../code/parser', 'test-fail'); } + + public function testAttributeAssignment() { + $lexer = new Lexer(array( + 'usedAttributes' => array( + 'comments', 'startLine', 'endLine', + 'startTokenPos', 'endTokenPos', + ) + )); + + $code = <<<'EOC' +parse($code); + + /** @var \PhpParser\Node\Stmt\Function_ $fn */ + $fn = $stmts[0]; + $this->assertInstanceOf('PhpParser\Node\Stmt\Function_', $fn); + $this->assertEquals(array( + 'comments' => array( + new Comment\Doc('/** Doc comment */', 2), + ), + 'startLine' => 3, + 'endLine' => 7, + 'startTokenPos' => 3, + 'endTokenPos' => 21, + ), $fn->getAttributes()); + + $param = $fn->params[0]; + $this->assertInstanceOf('PhpParser\Node\Param', $param); + $this->assertEquals(array( + 'startLine' => 3, + 'endLine' => 3, + 'startTokenPos' => 7, + 'endTokenPos' => 7, + ), $param->getAttributes()); + + /** @var \PhpParser\Node\Stmt\Echo_ $echo */ + $echo = $fn->stmts[0]; + $this->assertInstanceOf('PhpParser\Node\Stmt\Echo_', $echo); + $this->assertEquals(array( + 'comments' => array( + new Comment("// Line\n", 4), + new Comment("// Comments\n", 5), + ), + 'startLine' => 6, + 'endLine' => 6, + 'startTokenPos' => 16, + 'endTokenPos' => 19, + ), $echo->getAttributes()); + + /** @var \PhpParser\Node\Expr\Variable $var */ + $var = $echo->exprs[0]; + $this->assertInstanceOf('PhpParser\Node\Expr\Variable', $var); + $this->assertEquals(array( + 'startLine' => 6, + 'endLine' => 6, + 'startTokenPos' => 18, + 'endTokenPos' => 18, + ), $var->getAttributes()); + } } \ No newline at end of file