Вход Регистрация
Файл: 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;
    }
}
Онлайн: 2
Реклама