Вход Регистрация
Файл: src/vendor/nikic/php-parser/test/PhpParser/ParserTest.php
Строк: 128
<?php

namespace PhpParser;

use 
PhpParserComment;

abstract class 
ParserTest extends PHPUnit_Framework_TestCase
{
    
/** @returns Parser */
    
abstract protected function getParser(Lexer $lexer);

    
/**
     * @expectedException PhpParserError
     * @expectedExceptionMessage Syntax error, unexpected EOF on line 1
     */
    
public function testParserThrowsSyntaxError() {
        
$parser $this->getParser(new Lexer());
        
$parser->parse('<?php foo');
    }

    
/**
     * @expectedException PhpParserError
     * @expectedExceptionMessage Cannot use foo as self because 'self' is a special class name on line 1
     */
    
public function testParserThrowsSpecialError() {
        
$parser $this->getParser(new Lexer());
        
$parser->parse('<?php use foo as self;');
    }

    public function 
testAttributeAssignment() {
        
$lexer = new Lexer(array(
            
'usedAttributes' => array(
                
'comments''startLine''endLine',
                
'startTokenPos''endTokenPos',
            )
        ));

        
$code = <<<'EOC'
<?php
/** Doc comment */
function test($a) {
    // Line
    // Comments
    echo $a;
}
EOC;
        
$code canonicalize($code);

        
$parser $this->getParser($lexer);
        
$stmts $parser->parse($code);

        
/** @var PhpParserNodeStmtFunction_ $fn */
        
$fn $stmts[0];
        
$this->assertInstanceOf('PhpParserNodeStmtFunction_'$fn);
        
$this->assertEquals(array(
            
'comments' => array(
                new 
CommentDoc('/** Doc comment */'2),
            ),
            
'startLine' => 3,
            
'endLine' => 7,
            
'startTokenPos' => 3,
            
'endTokenPos' => 21,
        ), 
$fn->getAttributes());

        
$param $fn->params[0];
        
$this->assertInstanceOf('PhpParserNodeParam'$param);
        
$this->assertEquals(array(
            
'startLine' => 3,
            
'endLine' => 3,
            
'startTokenPos' => 7,
            
'endTokenPos' => 7,
        ), 
$param->getAttributes());

        
/** @var PhpParserNodeStmtEcho_ $echo */
        
$echo $fn->stmts[0];
        
$this->assertInstanceOf('PhpParserNodeStmtEcho_'$echo);
        
$this->assertEquals(array(
            
'comments' => array(
                new 
Comment("// Linen"4),
                new 
Comment("// Commentsn"5),
            ),
            
'startLine' => 6,
            
'endLine' => 6,
            
'startTokenPos' => 16,
            
'endTokenPos' => 19,
        ), 
$echo->getAttributes());

        
/** @var PhpParserNodeExprVariable $var */
        
$var $echo->exprs[0];
        
$this->assertInstanceOf('PhpParserNodeExprVariable'$var);
        
$this->assertEquals(array(
            
'startLine' => 6,
            
'endLine' => 6,
            
'startTokenPos' => 18,
            
'endTokenPos' => 18,
        ), 
$var->getAttributes());
    }

    
/**
     * @expectedException RangeException
     * @expectedExceptionMessage The lexer returned an invalid token (id=999, value=foobar)
     */
    
public function testInvalidToken() {
        
$lexer = new InvalidTokenLexer;
        
$parser $this->getParser($lexer);
        
$parser->parse('dummy');
    }
}

class 
InvalidTokenLexer extends Lexer {
    public function 
getNextToken(&$value null, &$startAttributes null, &$endAttributes null) {
        
$value 'foobar';
        return 
999;
    }
}
Онлайн: 0
Реклама