Failed Conditions
Push — metadata ( c6c11e...d7114b )
by Michael
02:19
created

DocLexerTest::testScannerTokenizesDocBlockWhitConstants()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 84
Code Lines 50

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 50
dl 0
loc 84
rs 9.0909
c 0
b 0
f 0
cc 2
nc 2
nop 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace Doctrine\Tests\Annotations;
4
5
use Doctrine\Annotations\DocLexer;
6
use PHPUnit\Framework\TestCase;
7
8
class DocLexerTest extends TestCase
9
{
10
    public function testMarkerAnnotation()
11
    {
12
        $lexer = new DocLexer;
13
14
        $lexer->setInput('@Name');
15
        self::assertNull($lexer->token);
16
        self::assertNull($lexer->lookahead);
17
18
        self::assertTrue($lexer->moveNext());
19
        self::assertNull($lexer->token);
20
        self::assertEquals('@', $lexer->lookahead['value']);
21
22
        self::assertTrue($lexer->moveNext());
23
        self::assertEquals('@', $lexer->token['value']);
24
        self::assertEquals('Name', $lexer->lookahead['value']);
25
26
        self::assertFalse($lexer->moveNext());
27
    }
28
29
    public function testScannerTokenizesDocBlockWhitConstants()
30
    {
31
        $lexer      = new DocLexer();
32
        $docblock   = '@AnnotationWithConstants(PHP_EOL, ClassWithConstants::SOME_VALUE, ClassWithConstants::CONSTANT_, ClassWithConstants::CONST_ANT3, \Doctrine\Tests\Annotations\Fixtures\InterfaceWithConstants::SOME_VALUE)';
33
34
        $tokens = [
35
            [
36
                'value'     => '@',
37
                'position'  => 0,
38
                'type'      => DocLexer::T_AT,
39
            ],
40
            [
41
                'value'     => 'AnnotationWithConstants',
42
                'position'  => 1,
43
                'type'      => DocLexer::T_IDENTIFIER,
44
            ],
45
            [
46
                'value'     => '(',
47
                'position'  => 24,
48
                'type'      => DocLexer::T_OPEN_PARENTHESIS,
49
            ],
50
            [
51
                'value'     => 'PHP_EOL',
52
                'position'  => 25,
53
                'type'      => DocLexer::T_IDENTIFIER,
54
            ],
55
            [
56
                'value'     => ',',
57
                'position'  => 32,
58
                'type'      => DocLexer::T_COMMA,
59
            ],
60
            [
61
                'value'     => 'ClassWithConstants::SOME_VALUE',
62
                'position'  => 34,
63
                'type'      => DocLexer::T_IDENTIFIER,
64
            ],
65
            [
66
                'value'     => ',',
67
                'position'  => 64,
68
                'type'      => DocLexer::T_COMMA,
69
            ],
70
            [
71
                'value'     => 'ClassWithConstants::CONSTANT_',
72
                'position'  => 66,
73
                'type'      => DocLexer::T_IDENTIFIER,
74
            ],
75
            [
76
                'value'     => ',',
77
                'position'  => 95,
78
                'type'      => DocLexer::T_COMMA,
79
            ],
80
            [
81
                'value'     => 'ClassWithConstants::CONST_ANT3',
82
                'position'  => 97,
83
                'type'      => DocLexer::T_IDENTIFIER,
84
            ],
85
            [
86
                'value'     => ',',
87
                'position'  => 127,
88
                'type'      => DocLexer::T_COMMA,
89
            ],
90
            [
91
                'value'     => '\\Doctrine\\Tests\\Annotations\\Fixtures\\InterfaceWithConstants::SOME_VALUE',
92
                'position'  => 129,
93
                'type'      => DocLexer::T_IDENTIFIER,
94
            ],
95
            [
96
                'value'     => ')',
97
                'position'  => 200,
98
                'type'      => DocLexer::T_CLOSE_PARENTHESIS,
99
            ]
100
        ];
101
102
        $lexer->setInput($docblock);
103
104
        foreach ($tokens as $expected) {
105
            $lexer->moveNext();
106
            $lookahead = $lexer->lookahead;
107
            self::assertEquals($expected['value'],     $lookahead['value']);
108
            self::assertEquals($expected['type'],      $lookahead['type']);
109
            self::assertEquals($expected['position'],  $lookahead['position']);
110
        }
111
112
        self::assertFalse($lexer->moveNext());
113
    }
114
115
116
    public function testScannerTokenizesDocBlockWhitInvalidIdentifier()
117
    {
118
        $lexer      = new DocLexer();
119
        $docblock   = '@Foo\3.42';
120
121
        $tokens = [
122
            [
123
                'value'     => '@',
124
                'position'  => 0,
125
                'type'      => DocLexer::T_AT,
126
            ],
127
            [
128
                'value'     => 'Foo',
129
                'position'  => 1,
130
                'type'      => DocLexer::T_IDENTIFIER,
131
            ],
132
            [
133
                'value'     => '\\',
134
                'position'  => 4,
135
                'type'      => DocLexer::T_NAMESPACE_SEPARATOR,
136
            ],
137
            [
138
                'value'     => 3.42,
139
                'position'  => 5,
140
                'type'      => DocLexer::T_FLOAT,
141
            ]
142
        ];
143
144
        $lexer->setInput($docblock);
145
146
        foreach ($tokens as $expected) {
147
            $lexer->moveNext();
148
            $lookahead = $lexer->lookahead;
149
            self::assertEquals($expected['value'],     $lookahead['value']);
150
            self::assertEquals($expected['type'],      $lookahead['type']);
151
            self::assertEquals($expected['position'],  $lookahead['position']);
152
        }
153
154
        self::assertFalse($lexer->moveNext());
155
    }
156
157
    /**
158
     * @group 44
159
     */
160
    public function testWithinDoubleQuotesVeryVeryLongStringWillNotOverflowPregSplitStackLimit()
161
    {
162
        $lexer = new DocLexer();
163
164
        $lexer->setInput('"' . str_repeat('.', 20240) . '"');
165
166
        self::assertInternalType('array', $lexer->glimpse());
167
    }
168
169
    /**
170
     * @group 44
171
     */
172
    public function testRecognizesDoubleQuotesEscapeSequence()
173
    {
174
        $lexer    = new DocLexer();
175
        $docblock = '@Foo("""' . "\n" . '""")';
176
177
        $tokens = [
178
            [
179
                'value'     => '@',
180
                'position'  => 0,
181
                'type'      => DocLexer::T_AT,
182
            ],
183
            [
184
                'value'     => 'Foo',
185
                'position'  => 1,
186
                'type'      => DocLexer::T_IDENTIFIER,
187
            ],
188
            [
189
                'value'     => '(',
190
                'position'  => 4,
191
                'type'      => DocLexer::T_OPEN_PARENTHESIS,
192
            ],
193
            [
194
                'value'     => "\"\n\"",
195
                'position'  => 5,
196
                'type'      => DocLexer::T_STRING,
197
            ],
198
            [
199
                'value'     => ')',
200
                'position'  => 12,
201
                'type'      => DocLexer::T_CLOSE_PARENTHESIS,
202
            ],
203
        ];
204
205
        $lexer->setInput($docblock);
206
207
        foreach ($tokens as $expected) {
208
            $lexer->moveNext();
209
            $lookahead = $lexer->lookahead;
210
            self::assertEquals($expected['value'],    $lookahead['value']);
211
            self::assertEquals($expected['type'],     $lookahead['type']);
212
            self::assertEquals($expected['position'], $lookahead['position']);
213
        }
214
215
        self::assertFalse($lexer->moveNext());
216
    }
217
}
218