Passed
Push — master ( e9fa3d...22a26f )
by William
03:07
created

TokensListTest::testGetPrevious()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 6
nc 1
nop 0
dl 0
loc 8
rs 10
c 1
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace PhpMyAdmin\SqlParser\Tests\Lexer;
6
7
use PhpMyAdmin\SqlParser\Tests\TestCase;
8
use PhpMyAdmin\SqlParser\Token;
9
use PhpMyAdmin\SqlParser\TokensList;
10
11
use function count;
12
13
class TokensListTest extends TestCase
14
{
15
    /**
16
     * ArrayObj of tokens that are used for testing.
17
     *
18
     * @var Token[]
19
     */
20
    public $tokens;
21
22
    /**
23
     * Test setup.
24
     */
25
    public function setUp(): void
26
    {
27
        parent::setUp();
28
        $this->tokens = [
29
            new Token('SELECT', Token::TYPE_KEYWORD),
30
            new Token(' ', Token::TYPE_WHITESPACE),
31
            new Token('*', Token::TYPE_OPERATOR),
32
            new Token(' ', Token::TYPE_WHITESPACE),
33
            new Token('FROM', Token::TYPE_KEYWORD),
34
            new Token(' ', Token::TYPE_WHITESPACE),
35
            new Token('`test`', Token::TYPE_SYMBOL),
36
            new Token(' ', Token::TYPE_WHITESPACE),
37
        ];
38
    }
39
40
    public function testBuild(): void
41
    {
42
        $list = new TokensList($this->tokens);
43
        $this->assertEquals('SELECT * FROM `test` ', TokensList::build($list));
44
    }
45
46
    public function testAdd(): void
47
    {
48
        $list = new TokensList();
49
        foreach ($this->tokens as $token) {
50
            $list->add($token);
51
        }
52
53
        $this->assertEquals(new TokensList($this->tokens), $list);
54
    }
55
56
    public function testGetNext(): void
57
    {
58
        $list = new TokensList($this->tokens);
59
        $this->assertEquals($this->tokens[0], $list->getNext());
60
        $this->assertEquals($this->tokens[2], $list->getNext());
61
        $this->assertEquals($this->tokens[4], $list->getNext());
62
        $this->assertEquals($this->tokens[6], $list->getNext());
63
        $this->assertNull($list->getNext());
64
    }
65
66
    public function testGetPrevious(): void
67
    {
68
        $list = new TokensList($this->tokens);
69
        $list->idx = 7;
70
        $this->assertEquals($this->tokens[6], $list->getPrevious());
71
        $this->assertEquals($this->tokens[4], $list->getPrevious());
72
        $this->assertEquals($this->tokens[2], $list->getPrevious());
73
        $this->assertNull($list->getPrevious());
74
    }
75
76
    public function testGetNextOfType(): void
77
    {
78
        $list = new TokensList($this->tokens);
79
        $this->assertEquals($this->tokens[0], $list->getNextOfType(Token::TYPE_KEYWORD));
80
        $this->assertEquals($this->tokens[4], $list->getNextOfType(Token::TYPE_KEYWORD));
81
        $this->assertNull($list->getNextOfType(Token::TYPE_KEYWORD));
82
    }
83
84
    public function testGetNextOfTypeAndValue(): void
85
    {
86
        $list = new TokensList($this->tokens);
87
        $this->assertEquals($this->tokens[0], $list->getNextOfTypeAndValue(Token::TYPE_KEYWORD, 'SELECT'));
88
        $this->assertNull($list->getNextOfTypeAndValue(Token::TYPE_KEYWORD, 'SELECT'));
89
    }
90
91
    public function testArrayAccess(): void
92
    {
93
        $list = new TokensList();
94
95
        // offsetSet(NULL, $value)
96
        foreach ($this->tokens as $token) {
97
            $list[] = $token;
98
        }
99
100
        // offsetSet($offset, $value)
101
        $list[2] = $this->tokens[2];
102
103
        // offsetGet($offset)
104
        for ($i = 0, $count = count($this->tokens); $i < $count; ++$i) {
105
            $this->assertEquals($this->tokens[$i], $list[$i]);
106
        }
107
108
        // offsetExists($offset)
109
        $this->assertArrayHasKey(2, $list);
110
        $this->assertArrayNotHasKey(8, $list);
111
112
        // offsetUnset($offset)
113
        unset($list[2]);
114
        $this->assertEquals($this->tokens[3], $list[2]);
115
    }
116
}
117