summaryrefslogtreecommitdiffstats
path: root/tests/Lexer/TokensListTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/Lexer/TokensListTest.php')
-rw-r--r--tests/Lexer/TokensListTest.php102
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]);
+ }
+}