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

namespace PhpParserParser;

use 
PhpParserError;
use 
PhpParserLexer;
use 
PhpParserNodeScalarLNumber;
use 
PhpParserParserTest;
use 
PhpParserNodeExpr;
use 
PhpParserNodeStmt;

require_once 
__DIR__ '/../ParserTest.php';

class 
MultipleTest extends ParserTest {
    
// This provider is for the generic parser tests, just pick an arbitrary order here
    
protected function getParser(Lexer $lexer) {
        return new 
Multiple([new Php5($lexer), new Php7($lexer)]);
    }

    private function 
getPrefer7() {
        
$lexer = new Lexer(['usedAttributes' => []]);
        return new 
Multiple([new Php7($lexer), new Php5($lexer)]);
    }

    private function 
getPrefer5() {
        
$lexer = new Lexer(['usedAttributes' => []]);
        return new 
Multiple([new Php5($lexer), new Php7($lexer)]);
    }

    
/** @dataProvider provideTestParse */
    
public function testParse($codeMultiple $parser$expected) {
        
$this->assertEquals($expected$parser->parse($code));
        
$this->assertSame([], $parser->getErrors());
    }

    public function 
provideTestParse() {
        return [
            [
                
// PHP 7 only code
                
'<?php class Test { function function() {} }',
                
$this->getPrefer5(),
                [
                    new 
StmtClass_('Test', ['stmts' => [
                        new 
StmtClassMethod('function')
                    ]]),
                ]
            ],
            [
                
// PHP 5 only code
                
'<?php global $$a->b;',
                
$this->getPrefer7(),
                [
                    new 
StmtGlobal_([
                        new 
ExprVariable(new ExprPropertyFetch(new ExprVariable('a'), 'b'))
                    ])
                ]
            ],
            [
                
// Different meaning (PHP 5)
                
'<?php $$a[0];',
                
$this->getPrefer5(),
                [
                    new 
ExprVariable(
                        new 
ExprArrayDimFetch(new ExprVariable('a'), LNumber::fromString('0'))
                    )
                ]
            ],
            [
                
// Different meaning (PHP 7)
                
'<?php $$a[0];',
                
$this->getPrefer7(),
                [
                    new 
ExprArrayDimFetch(
                        new 
ExprVariable(new ExprVariable('a')), LNumber::fromString('0')
                    )
                ]
            ],
        ];
    }

    public function 
testThrownError() {
        
$this->setExpectedException('PhpParserError''FAIL A');

        
$parserA $this->getMockBuilder('PhpParserParser')->getMock();
        
$parserA->expects($this->at(0))
            ->
method('parse')->will($this->throwException(new Error('FAIL A')));

        
$parserB $this->getMockBuilder('PhpParserParser')->getMock();
        
$parserB->expects($this->at(0))
            ->
method('parse')->will($this->throwException(new Error('FAIL B')));

        
$parser = new Multiple([$parserA$parserB]);
        
$parser->parse('dummy');
    }

    public function 
testGetErrors() {
        
$errorsA = [new Error('A1'), new Error('A2')];
        
$parserA $this->getMockBuilder('PhpParserParser')->getMock();
        
$parserA->expects($this->at(0))->method('parse');
        
$parserA->expects($this->at(1))
            ->
method('getErrors')->will($this->returnValue($errorsA));

        
$errorsB = [new Error('B1'), new Error('B2')];
        
$parserB $this->getMockBuilder('PhpParserParser')->getMock();
        
$parserB->expects($this->at(0))->method('parse');
        
$parserB->expects($this->at(1))
            ->
method('getErrors')->will($this->returnValue($errorsB));

        
$parser = new Multiple([$parserA$parserB]);
        
$parser->parse('dummy');
        
$this->assertSame($errorsA$parser->getErrors());
    }
}
Онлайн: 1
Реклама