diff options
Diffstat (limited to 'tests/Lexer/TokensListTest.php')
-rw-r--r-- | tests/Lexer/TokensListTest.php | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/tests/Lexer/TokensListTest.php b/tests/Lexer/TokensListTest.php new file mode 100644 index 0000000..55bf1b9 --- /dev/null +++ b/tests/Lexer/TokensListTest.php @@ -0,0 +1,102 @@ +<?php + +namespace SqlParser\Tests\Lexer; + +use SqlParser\Token; +use SqlParser\TokensList; + +use SqlParser\Tests\TestCase; + +class TokensListTest extends TestCase +{ + + /** + * Array of tokens that are used for testing. + * + * @var Token[] + */ + public $tokens; + + /** + * Constructor. + */ + public function __construct() + { + $this->tokens = array( + new Token('SELECT', Token::TYPE_KEYWORD), + new Token(' ', Token::TYPE_WHITESPACE), + new Token('*', Token::TYPE_OPERATOR), + new Token(' ', Token::TYPE_WHITESPACE), + new Token('FROM', Token::TYPE_KEYWORD), + new Token(' ', Token::TYPE_WHITESPACE), + new Token('`test`', Token::TYPE_SYMBOL), + new Token(' ', Token::TYPE_WHITESPACE), + ); + } + + public function testBuild() + { + $list = new TokensList($this->tokens); + $this->assertEquals('SELECT * FROM `test` ', TokensList::build($list)); + } + + public function testAdd() + { + $list = new TokensList(); + foreach ($this->tokens as $token) { + $list->add($token); + } + $this->assertEquals(new TokensList($this->tokens), $list); + } + + public function testGetNext() + { + $list = new TokensList($this->tokens); + $this->assertEquals($this->tokens[0], $list->getNext()); + $this->assertEquals($this->tokens[2], $list->getNext()); + $this->assertEquals($this->tokens[4], $list->getNext()); + $this->assertEquals($this->tokens[6], $list->getNext()); + $this->assertEquals(null, $list->getNext()); + } + + public function testGetNextOfType() + { + $list = new TokensList($this->tokens); + $this->assertEquals($this->tokens[0], $list->getNextOfType(Token::TYPE_KEYWORD)); + $this->assertEquals($this->tokens[4], $list->getNextOfType(Token::TYPE_KEYWORD)); + $this->assertEquals(null, $list->getNextOfType(Token::TYPE_KEYWORD)); + } + + public function testGetNextOfTypeAndValue() + { + $list = new TokensList($this->tokens); + $this->assertEquals($this->tokens[0], $list->getNextOfTypeAndValue(Token::TYPE_KEYWORD, 'SELECT')); + $this->assertEquals(null, $list->getNextOfTypeAndValue(Token::TYPE_KEYWORD, 'SELECT')); + } + + public function testArrayAccess() + { + $list = new TokensList(); + + // offsetSet(NULL, $value) + foreach ($this->tokens as $token) { + $list[] = $token; + } + + // offsetSet($offset, $value) + $list[2] = $this->tokens[2]; + + // offsetGet($offset) + for ($i = 0, $count = count($this->tokens); $i < $count; ++$i) { + $this->assertEquals($this->tokens[$i], $list[$i]); + } + + // offsetExists($offset) + $this->assertTrue(isset($list[2])); + $this->assertFalse(isset($list[8])); + + // offsetUnset($offset) + unset($list[2]); + $this->assertEquals($this->tokens[3], $list[2]); + } +} |