Passed
Pull Request — master (#376)
by
unknown
08:22
created

TokensListTest   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 92
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 40
c 1
b 0
f 0
dl 0
loc 92
rs 10
wmc 10
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()
77
78
    public function testGetNextOfType(): void
0 ignored issues
show
Bug introduced by
A parse error occurred: Syntax error, unexpected T_PUBLIC, expecting '{' or ';' on line 78 at column 4
Loading history...
79
    {
80
        $list = new TokensList($this->tokens);
0 ignored issues
show
Coding Style introduced by
Expected 1 blank line after function; 0 found
Loading history...
81
        $this->assertEquals($this->tokens[0], $list->getNextOfType(Token::TYPE_KEYWORD));
82
        $this->assertEquals($this->tokens[4], $list->getNextOfType(Token::TYPE_KEYWORD));
83
        $this->assertNull($list->getNextOfType(Token::TYPE_KEYWORD));
84
    }
85
86
    public function testGetNextOfTypeAndValue(): void
87
    {
88
        $list = new TokensList($this->tokens);
89
        $this->assertEquals($this->tokens[0], $list->getNextOfTypeAndValue(Token::TYPE_KEYWORD, 'SELECT'));
90
        $this->assertNull($list->getNextOfTypeAndValue(Token::TYPE_KEYWORD, 'SELECT'));
91
    }
92
93
    public function testArrayAccess(): void
94
    {
95
        $list = new TokensList();
96
97
        // offsetSet(NULL, $value)
98
        foreach ($this->tokens as $token) {
99
            $list[] = $token;
100
        }
101
102
        // offsetSet($offset, $value)
103
        $list[2] = $this->tokens[2];
104
105
        // offsetGet($offset)
106
        for ($i = 0, $count = count($this->tokens); $i < $count; ++$i) {
107
            $this->assertEquals($this->tokens[$i], $list[$i]);
108
        }
109
110
        // offsetExists($offset)
111
        $this->assertArrayHasKey(2, $list);
112
        $this->assertArrayNotHasKey(8, $list);
113
114
        // offsetUnset($offset)
115
        unset($list[2]);
116
        $this->assertEquals($this->tokens[3], $list[2]);
117
    }
118
}
119