Passed
Branch master (366c16)
by William
03:30
created

OptionsArrayTest   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 121
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 64
c 1
b 0
f 0
dl 0
loc 121
rs 10
wmc 6

6 Methods

Rating   Name   Duplication   Size   Complexity  
A testBuild() 0 16 1
A testParse() 0 26 1
A testRemove() 0 24 1
A testHas() 0 18 1
A testMerge() 0 5 1
A testParseExpr() 0 19 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace PhpMyAdmin\SqlParser\Tests\Components;
6
7
use PhpMyAdmin\SqlParser\Components\OptionsArray;
8
use PhpMyAdmin\SqlParser\Parser;
9
use PhpMyAdmin\SqlParser\Tests\TestCase;
10
11
class OptionsArrayTest extends TestCase
12
{
13
    public function testParse()
14
    {
15
        $component = OptionsArray::parse(
16
            new Parser(),
17
            $this->getTokensList('A B = /*comment*/ (test) C'),
18
            [
19
                'A' => 1,
20
                'B' => [
21
                    2,
22
                    'var',
23
                ],
24
                'C' => 3,
25
            ]
26
        );
27
        $this->assertEquals(
28
            [
29
                1 => 'A',
30
                2 => [
31
                    'name' => 'B',
32
                    'expr' => '(test)',
33
                    'value' => 'test',
34
                    'equals' => true,
35
                ],
36
                3 => 'C',
37
            ],
38
            $component->options
39
        );
40
    }
41
42
    public function testParseExpr()
43
    {
44
        $component = OptionsArray::parse(
45
            new Parser(),
46
            $this->getTokensList('SUM = (3 + 5) RESULT = 8'),
47
            [
48
                'SUM' => [
49
                    1,
50
                    'expr',
51
                    ['parenthesesDelimited' => true],
52
                ],
53
                'RESULT' => [
54
                    2,
55
                    'var',
56
                ],
57
            ]
58
        );
59
        $this->assertEquals('(3 + 5)', (string) $component->has('SUM', true));
60
        $this->assertEquals('8', $component->has('RESULT'));
61
    }
62
63
    public function testHas()
64
    {
65
        $component = OptionsArray::parse(
66
            new Parser(),
67
            $this->getTokensList('A B = /*comment*/ (test) C'),
68
            [
69
                'A' => 1,
70
                'B' => [
71
                    2,
72
                    'var',
73
                ],
74
                'C' => 3,
75
            ]
76
        );
77
        $this->assertTrue($component->has('A'));
78
        $this->assertEquals('test', $component->has('B'));
79
        $this->assertTrue($component->has('C'));
80
        $this->assertFalse($component->has('D'));
81
    }
82
83
    public function testRemove()
84
    {
85
        /* Assertion 1 */
86
        $component = new OptionsArray(['a', 'b', 'c']);
87
        $this->assertTrue($component->remove('b'));
88
        $this->assertFalse($component->remove('d'));
89
        $this->assertEquals($component->options, [0 => 'a', 2 => 'c']);
90
91
        /* Assertion 2 */
92
        $component = OptionsArray::parse(
93
            new Parser(),
94
            $this->getTokensList('A B = /*comment*/ (test) C'),
95
            [
96
                'A' => 1,
97
                'B' => [
98
                    2,
99
                    'var',
100
                ],
101
                'C' => 3,
102
            ]
103
        );
104
        $this->assertEquals('test', $component->has('B'));
105
        $component->remove('B');
106
        $this->assertFalse($component->has('B'));
107
    }
108
109
    public function testMerge()
110
    {
111
        $component = new OptionsArray(['a']);
112
        $component->merge(['b', 'c']);
113
        $this->assertEquals($component->options, ['a', 'b', 'c']);
114
    }
115
116
    public function testBuild()
117
    {
118
        $component = new OptionsArray(
119
            [
120
                'ALL',
121
                'SQL_CALC_FOUND_ROWS',
122
                [
123
                    'name' => 'MAX_STATEMENT_TIME',
124
                    'value' => '42',
125
                    'equals' => true,
126
                ],
127
            ]
128
        );
129
        $this->assertEquals(
130
            OptionsArray::build($component),
131
            'ALL SQL_CALC_FOUND_ROWS MAX_STATEMENT_TIME=42'
132
        );
133
    }
134
}
135