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

PhpParserTest   A

Complexity

Total Complexity 18

Size/Duplication

Total Lines 210
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 18
eloc 113
dl 0
loc 210
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Doctrine\Tests\Annotations;
4
5
use PHPUnit\Framework\TestCase;
6
use ReflectionClass;
7
use Doctrine\Annotations\PhpParser;
8
9
require_once __DIR__.'/Fixtures/NonNamespacedClass.php';
10
require_once __DIR__.'/Fixtures/GlobalNamespacesPerFileWithClassAsFirst.php';
11
require_once __DIR__.'/Fixtures/GlobalNamespacesPerFileWithClassAsLast.php';
12
13
class PhpParserTest extends TestCase
14
{
15
    public function testParseClassWithMultipleClassesInFile()
16
    {
17
        $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\MultipleClassesInFile');
18
        $parser = new PhpParser();
19
20
        self::assertEquals([
21
            'route'  => __NAMESPACE__ . '\Fixtures\Annotation\Route',
22
            'secure' => __NAMESPACE__ . '\Fixtures\Annotation\Secure',
23
        ], $parser->parseClass($class));
24
    }
25
26
    public function testParseClassWithMultipleImportsInUseStatement()
27
    {
28
        $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\MultipleImportsInUseStatement');
29
        $parser = new PhpParser();
30
31
        self::assertEquals([
32
            'route'  => __NAMESPACE__ . '\Fixtures\Annotation\Route',
33
            'secure' => __NAMESPACE__ . '\Fixtures\Annotation\Secure',
34
        ], $parser->parseClass($class));
35
    }
36
37
    /**
38
     * @requires PHP 7.0
39
     */
40
    public function testParseClassWithGroupUseStatement()
41
    {
42
        $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\GroupUseStatement');
43
        $parser = new PhpParser();
44
45
        self::assertEquals([
46
            'route'  => __NAMESPACE__ . '\Fixtures\Annotation\Route',
47
            'supersecure' => __NAMESPACE__ . '\Fixtures\Annotation\Secure',
48
            'template' => __NAMESPACE__ . '\Fixtures\Annotation\Template',
49
        ], $parser->parseClass($class));
50
    }
51
52
    public function testParseClassWhenNotUserDefined()
53
    {
54
        $parser = new PhpParser();
55
        self::assertEquals([], $parser->parseClass(new \ReflectionClass(\stdClass::class)));
56
    }
57
58
    public function testClassFileDoesNotExist()
59
    {
60
        /* @var $class ReflectionClass|\PHPUnit_Framework_MockObject_MockObject */
61
        $class = $this->getMockBuilder(ReflectionClass::class)
62
                ->disableOriginalConstructor()
63
                          ->getMock();
64
        $class->expects($this->once())
65
             ->method('getFilename')
66
             ->will($this->returnValue('/valid/class/Fake.php(35) : eval()d code'));
67
68
        $parser = new PhpParser();
69
        self::assertEquals([], $parser->parseClass($class));
70
    }
71
72
    public function testParseClassWhenClassIsNotNamespaced()
73
    {
74
        $parser = new PhpParser();
75
        $class = new ReflectionClass(\AnnotationsTestsFixturesNonNamespacedClass::class);
76
77
        self::assertEquals([
78
            'route'    => __NAMESPACE__ . '\Fixtures\Annotation\Route',
79
            'template' => __NAMESPACE__ . '\Fixtures\Annotation\Template',
80
        ], $parser->parseClass($class));
81
    }
82
83
    public function testParseClassWhenClassIsInterface()
84
    {
85
        $parser = new PhpParser();
86
        $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\TestInterface');
87
88
        self::assertEquals([
89
            'secure' => __NAMESPACE__ . '\Fixtures\Annotation\Secure',
90
        ], $parser->parseClass($class));
91
    }
92
93
    public function testClassWithFullyQualifiedUseStatements()
94
    {
95
        $parser = new PhpParser();
96
        $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\ClassWithFullyQualifiedUseStatements');
97
98
        self::assertEquals([
99
            'secure'   => '\\' . __NAMESPACE__ . '\Fixtures\Annotation\Secure',
100
            'route'    => '\\' . __NAMESPACE__ . '\Fixtures\Annotation\Route',
101
            'template' => '\\' . __NAMESPACE__ . '\Fixtures\Annotation\Template',
102
        ], $parser->parseClass($class));
103
    }
104
105
    public function testNamespaceAndClassCommentedOut()
106
    {
107
        $parser = new PhpParser();
108
        $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\NamespaceAndClassCommentedOut');
109
110
        self::assertEquals([
111
            'route'    => __NAMESPACE__ . '\Fixtures\Annotation\Route',
112
            'template' => __NAMESPACE__ . '\Fixtures\Annotation\Template',
113
        ], $parser->parseClass($class));
114
	}
115
116
    public function testEqualNamespacesPerFileWithClassAsFirst()
117
    {
118
        $parser = new PhpParser();
119
        $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\EqualNamespacesPerFileWithClassAsFirst');
120
121
        self::assertEquals([
122
            'secure'   => __NAMESPACE__ . '\Fixtures\Annotation\Secure',
123
            'route'    => __NAMESPACE__ . '\Fixtures\Annotation\Route',
124
        ], $parser->parseClass($class));
125
    }
126
127
    public function testEqualNamespacesPerFileWithClassAsLast()
128
    {
129
        $parser = new PhpParser();
130
        $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\EqualNamespacesPerFileWithClassAsLast');
131
132
        self::assertEquals([
133
            'route'    => __NAMESPACE__ . '\Fixtures\Annotation\Route',
134
            'template' => __NAMESPACE__ . '\Fixtures\Annotation\Template',
135
        ], $parser->parseClass($class));
136
    }
137
138
    public function testDifferentNamespacesPerFileWithClassAsFirst()
139
    {
140
        $parser = new PhpParser();
141
        $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\DifferentNamespacesPerFileWithClassAsFirst');
142
143
        self::assertEquals([
144
            'secure'   => __NAMESPACE__ . '\Fixtures\Annotation\Secure',
145
        ], $parser->parseClass($class));
146
    }
147
148
    public function testDifferentNamespacesPerFileWithClassAsLast()
149
    {
150
        $parser = new PhpParser();
151
        $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\DifferentNamespacesPerFileWithClassAsLast');
152
153
        self::assertEquals([
154
            'template' => __NAMESPACE__ . '\Fixtures\Annotation\Template',
155
        ], $parser->parseClass($class));
156
    }
157
158
    public function testGlobalNamespacesPerFileWithClassAsFirst()
159
    {
160
        $parser = new PhpParser();
161
        $class = new \ReflectionClass(\GlobalNamespacesPerFileWithClassAsFirst::class);
162
163
        self::assertEquals([
164
            'secure'   => __NAMESPACE__ . '\Fixtures\Annotation\Secure',
165
            'route'    => __NAMESPACE__ . '\Fixtures\Annotation\Route',
166
        ], $parser->parseClass($class));
167
    }
168
169
    public function testGlobalNamespacesPerFileWithClassAsLast()
170
    {
171
        $parser = new PhpParser();
172
        $class = new ReflectionClass(\GlobalNamespacesPerFileWithClassAsLast::class);
173
174
        self::assertEquals([
175
            'route'    => __NAMESPACE__ . '\Fixtures\Annotation\Route',
176
            'template' => __NAMESPACE__ . '\Fixtures\Annotation\Template',
177
        ], $parser->parseClass($class));
178
    }
179
180
    public function testNamespaceWithClosureDeclaration()
181
    {
182
        $parser = new PhpParser();
183
        $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\NamespaceWithClosureDeclaration');
184
185
        self::assertEquals([
186
            'secure'   => __NAMESPACE__ . '\Fixtures\Annotation\Secure',
187
            'route'    => __NAMESPACE__ . '\Fixtures\Annotation\Route',
188
            'template' => __NAMESPACE__ . '\Fixtures\Annotation\Template',
189
        ], $parser->parseClass($class));
190
    }
191
192
    public function testIfPointerResetsOnMultipleParsingTries()
193
    {
194
        $parser = new PhpParser();
195
        $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\NamespaceWithClosureDeclaration');
196
197
        self::assertEquals([
198
            'secure'   => __NAMESPACE__ . '\Fixtures\Annotation\Secure',
199
            'route'    => __NAMESPACE__ . '\Fixtures\Annotation\Route',
200
            'template' => __NAMESPACE__ . '\Fixtures\Annotation\Template',
201
        ], $parser->parseClass($class));
202
203
        self::assertEquals([
204
            'secure'   => __NAMESPACE__ . '\Fixtures\Annotation\Secure',
205
            'route'    => __NAMESPACE__ . '\Fixtures\Annotation\Route',
206
            'template' => __NAMESPACE__ . '\Fixtures\Annotation\Template',
207
        ], $parser->parseClass($class));
208
    }
209
210
    /**
211
     * @group DCOM-97
212
     * @group regression
213
     */
214
    public function testClassWithClosure()
215
    {
216
        $parser = new PhpParser();
217
        $class  = new ReflectionClass(__NAMESPACE__ . '\Fixtures\ClassWithClosure');
218
219
        self::assertEquals([
220
          'annotationtargetall'         => __NAMESPACE__ . '\Fixtures\AnnotationTargetAll',
221
          'annotationtargetannotation'  => __NAMESPACE__ . '\Fixtures\AnnotationTargetAnnotation',
222
        ], $parser->parseClass($class));
223
    }
224
}
225