sonarrradarrplexorganizrnginxdashboardmuximuxlandingpagestartpagelandinghtpcserverhomepagesabnzbdheimdallembycouchpotatonzbgetbookmarkapplication-dashboard
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							268 lines
						
					
					
						
							7.5 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							268 lines
						
					
					
						
							7.5 KiB
						
					
					
				
								<?php
							 | 
						|
								
							 | 
						|
								namespace Doctrine\Tests\Common\Lexer;
							 | 
						|
								
							 | 
						|
								class AbstractLexerTest extends \PHPUnit_Framework_TestCase
							 | 
						|
								{
							 | 
						|
								    /**
							 | 
						|
								     * @var ConcreteLexer
							 | 
						|
								     */
							 | 
						|
								    private $concreteLexer;
							 | 
						|
								
							 | 
						|
								    public function setUp()
							 | 
						|
								    {
							 | 
						|
								        $this->concreteLexer = new ConcreteLexer();
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function dataProvider()
							 | 
						|
								    {
							 | 
						|
								        return array(
							 | 
						|
								            array(
							 | 
						|
								                'price=10',
							 | 
						|
								                array(
							 | 
						|
								                    array(
							 | 
						|
								                        'value' => 'price',
							 | 
						|
								                        'type' => 'string',
							 | 
						|
								                        'position' => 0,
							 | 
						|
								                    ),
							 | 
						|
								                    array(
							 | 
						|
								                        'value' => '=',
							 | 
						|
								                        'type' => 'operator',
							 | 
						|
								                        'position' => 5,
							 | 
						|
								                    ),
							 | 
						|
								                    array(
							 | 
						|
								                        'value' => 10,
							 | 
						|
								                        'type' => 'int',
							 | 
						|
								                        'position' => 6,
							 | 
						|
								                    ),
							 | 
						|
								                ),
							 | 
						|
								            ),
							 | 
						|
								        );
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testResetPeek()
							 | 
						|
								    {
							 | 
						|
								        $expectedTokens = array(
							 | 
						|
								            array(
							 | 
						|
								                'value' => 'price',
							 | 
						|
								                'type' => 'string',
							 | 
						|
								                'position' => 0,
							 | 
						|
								            ),
							 | 
						|
								            array(
							 | 
						|
								                'value' => '=',
							 | 
						|
								                'type' => 'operator',
							 | 
						|
								                'position' => 5,
							 | 
						|
								            ),
							 | 
						|
								            array(
							 | 
						|
								                'value' => 10,
							 | 
						|
								                'type' => 'int',
							 | 
						|
								                'position' => 6,
							 | 
						|
								            ),
							 | 
						|
								        );
							 | 
						|
								
							 | 
						|
								        $this->concreteLexer->setInput('price=10');
							 | 
						|
								
							 | 
						|
								        $this->assertEquals($expectedTokens[0], $this->concreteLexer->peek());
							 | 
						|
								        $this->assertEquals($expectedTokens[1], $this->concreteLexer->peek());
							 | 
						|
								        $this->concreteLexer->resetPeek();
							 | 
						|
								        $this->assertEquals($expectedTokens[0], $this->concreteLexer->peek());
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testResetPosition()
							 | 
						|
								    {
							 | 
						|
								        $expectedTokens = array(
							 | 
						|
								            array(
							 | 
						|
								                'value' => 'price',
							 | 
						|
								                'type' => 'string',
							 | 
						|
								                'position' => 0,
							 | 
						|
								            ),
							 | 
						|
								            array(
							 | 
						|
								                'value' => '=',
							 | 
						|
								                'type' => 'operator',
							 | 
						|
								                'position' => 5,
							 | 
						|
								            ),
							 | 
						|
								            array(
							 | 
						|
								                'value' => 10,
							 | 
						|
								                'type' => 'int',
							 | 
						|
								                'position' => 6,
							 | 
						|
								            ),
							 | 
						|
								        );
							 | 
						|
								
							 | 
						|
								        $this->concreteLexer->setInput('price=10');
							 | 
						|
								        $this->assertNull($this->concreteLexer->lookahead);
							 | 
						|
								
							 | 
						|
								        $this->assertTrue($this->concreteLexer->moveNext());
							 | 
						|
								        $this->assertEquals($expectedTokens[0], $this->concreteLexer->lookahead);
							 | 
						|
								
							 | 
						|
								        $this->assertTrue($this->concreteLexer->moveNext());
							 | 
						|
								        $this->assertEquals($expectedTokens[1], $this->concreteLexer->lookahead);
							 | 
						|
								
							 | 
						|
								        $this->concreteLexer->resetPosition(0);
							 | 
						|
								
							 | 
						|
								        $this->assertTrue($this->concreteLexer->moveNext());
							 | 
						|
								        $this->assertEquals($expectedTokens[0], $this->concreteLexer->lookahead);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @dataProvider dataProvider
							 | 
						|
								     *
							 | 
						|
								     * @param $input
							 | 
						|
								     * @param $expectedTokens
							 | 
						|
								     */
							 | 
						|
								    public function testMoveNext($input, $expectedTokens)
							 | 
						|
								    {
							 | 
						|
								        $this->concreteLexer->setInput($input);
							 | 
						|
								        $this->assertNull($this->concreteLexer->lookahead);
							 | 
						|
								
							 | 
						|
								        for ($i = 0; $i < count($expectedTokens); $i++) {
							 | 
						|
								            $this->assertTrue($this->concreteLexer->moveNext());
							 | 
						|
								            $this->assertEquals($expectedTokens[$i], $this->concreteLexer->lookahead);
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        $this->assertFalse($this->concreteLexer->moveNext());
							 | 
						|
								        $this->assertNull($this->concreteLexer->lookahead);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testSkipUntil()
							 | 
						|
								    {
							 | 
						|
								        $this->concreteLexer->setInput('price=10');
							 | 
						|
								
							 | 
						|
								        $this->assertTrue($this->concreteLexer->moveNext());
							 | 
						|
								        $this->concreteLexer->skipUntil('operator');
							 | 
						|
								
							 | 
						|
								        $this->assertEquals(
							 | 
						|
								            array(
							 | 
						|
								                'value' => '=',
							 | 
						|
								                'type' => 'operator',
							 | 
						|
								                'position' => 5,
							 | 
						|
								            ),
							 | 
						|
								            $this->concreteLexer->lookahead
							 | 
						|
								        );
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testUtf8Mismatch()
							 | 
						|
								    {
							 | 
						|
								        $this->concreteLexer->setInput("\xE9=10");
							 | 
						|
								
							 | 
						|
								        $this->assertTrue($this->concreteLexer->moveNext());
							 | 
						|
								
							 | 
						|
								        $this->assertEquals(
							 | 
						|
								            array(
							 | 
						|
								                'value' => "\xE9=10",
							 | 
						|
								                'type' => 'string',
							 | 
						|
								                'position' => 0,
							 | 
						|
								            ),
							 | 
						|
								            $this->concreteLexer->lookahead
							 | 
						|
								        );
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @dataProvider dataProvider
							 | 
						|
								     *
							 | 
						|
								     * @param $input
							 | 
						|
								     * @param $expectedTokens
							 | 
						|
								     */
							 | 
						|
								    public function testPeek($input, $expectedTokens)
							 | 
						|
								    {
							 | 
						|
								        $this->concreteLexer->setInput($input);
							 | 
						|
								        foreach ($expectedTokens as $expectedToken) {
							 | 
						|
								            $this->assertEquals($expectedToken, $this->concreteLexer->peek());
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        $this->assertNull($this->concreteLexer->peek());
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @dataProvider dataProvider
							 | 
						|
								     *
							 | 
						|
								     * @param $input
							 | 
						|
								     * @param $expectedTokens
							 | 
						|
								     */
							 | 
						|
								    public function testGlimpse($input, $expectedTokens)
							 | 
						|
								    {
							 | 
						|
								        $this->concreteLexer->setInput($input);
							 | 
						|
								
							 | 
						|
								        foreach ($expectedTokens as $expectedToken) {
							 | 
						|
								            $this->assertEquals($expectedToken, $this->concreteLexer->glimpse());
							 | 
						|
								            $this->concreteLexer->moveNext();
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        $this->assertNull($this->concreteLexer->peek());
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function inputUntilPositionDataProvider()
							 | 
						|
								    {
							 | 
						|
								        return array(
							 | 
						|
								            array('price=10', 5, 'price'),
							 | 
						|
								        );
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @dataProvider inputUntilPositionDataProvider
							 | 
						|
								     *
							 | 
						|
								     * @param $input
							 | 
						|
								     * @param $position
							 | 
						|
								     * @param $expectedInput
							 | 
						|
								     */
							 | 
						|
								    public function testGetInputUntilPosition($input, $position, $expectedInput)
							 | 
						|
								    {
							 | 
						|
								        $this->concreteLexer->setInput($input);
							 | 
						|
								
							 | 
						|
								        $this->assertSame($expectedInput, $this->concreteLexer->getInputUntilPosition($position));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @dataProvider dataProvider
							 | 
						|
								     *
							 | 
						|
								     * @param $input
							 | 
						|
								     * @param $expectedTokens
							 | 
						|
								     */
							 | 
						|
								    public function testIsNextToken($input, $expectedTokens)
							 | 
						|
								    {
							 | 
						|
								        $this->concreteLexer->setInput($input);
							 | 
						|
								
							 | 
						|
								        $this->concreteLexer->moveNext();
							 | 
						|
								        for ($i = 0; $i < count($expectedTokens); $i++) {
							 | 
						|
								            $this->assertTrue($this->concreteLexer->isNextToken($expectedTokens[$i]['type']));
							 | 
						|
								            $this->concreteLexer->moveNext();
							 | 
						|
								        }
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @dataProvider dataProvider
							 | 
						|
								     *
							 | 
						|
								     * @param $input
							 | 
						|
								     * @param $expectedTokens
							 | 
						|
								     */
							 | 
						|
								    public function testIsNextTokenAny($input, $expectedTokens)
							 | 
						|
								    {
							 | 
						|
								        $allTokenTypes = array_map(function ($token) {
							 | 
						|
								            return $token['type'];
							 | 
						|
								        }, $expectedTokens);
							 | 
						|
								
							 | 
						|
								        $this->concreteLexer->setInput($input);
							 | 
						|
								
							 | 
						|
								        $this->concreteLexer->moveNext();
							 | 
						|
								        for ($i = 0; $i < count($expectedTokens); $i++) {
							 | 
						|
								            $this->assertTrue($this->concreteLexer->isNextTokenAny(array($expectedTokens[$i]['type'])));
							 | 
						|
								            $this->assertTrue($this->concreteLexer->isNextTokenAny($allTokenTypes));
							 | 
						|
								            $this->concreteLexer->moveNext();
							 | 
						|
								        }
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testGetLiteral()
							 | 
						|
								    {
							 | 
						|
								        $this->assertSame('Doctrine\Tests\Common\Lexer\ConcreteLexer::INT', $this->concreteLexer->getLiteral('int'));
							 | 
						|
								        $this->assertSame('fake_token', $this->concreteLexer->getLiteral('fake_token'));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testIsA()
							 | 
						|
								    {
							 | 
						|
								        $this->assertTrue($this->concreteLexer->isA(11, 'int'));
							 | 
						|
								        $this->assertTrue($this->concreteLexer->isA(1.1, 'int'));
							 | 
						|
								        $this->assertTrue($this->concreteLexer->isA('=', 'operator'));
							 | 
						|
								        $this->assertTrue($this->concreteLexer->isA('>', 'operator'));
							 | 
						|
								        $this->assertTrue($this->concreteLexer->isA('<', 'operator'));
							 | 
						|
								        $this->assertTrue($this->concreteLexer->isA('fake_text', 'string'));
							 | 
						|
								    }
							 | 
						|
								}
							 | 
						|
								
							 |