3 namespace Doctrine\Tests\Common\Annotations;
6 use Doctrine\Common\Annotations\PhpParser;
8 require_once __DIR__.'/Fixtures/NonNamespacedClass.php';
9 require_once __DIR__.'/Fixtures/GlobalNamespacesPerFileWithClassAsFirst.php';
10 require_once __DIR__.'/Fixtures/GlobalNamespacesPerFileWithClassAsLast.php';
12 class PhpParserTest extends \PHPUnit_Framework_TestCase
14 public function testParseClassWithMultipleClassesInFile()
16 $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\MultipleClassesInFile');
17 $parser = new PhpParser();
19 $this->assertEquals(array(
20 'route' => __NAMESPACE__ . '\Fixtures\Annotation\Route',
21 'secure' => __NAMESPACE__ . '\Fixtures\Annotation\Secure',
22 ), $parser->parseClass($class));
25 public function testParseClassWithMultipleImportsInUseStatement()
27 $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\MultipleImportsInUseStatement');
28 $parser = new PhpParser();
30 $this->assertEquals(array(
31 'route' => __NAMESPACE__ . '\Fixtures\Annotation\Route',
32 'secure' => __NAMESPACE__ . '\Fixtures\Annotation\Secure',
33 ), $parser->parseClass($class));
36 public function testParseClassWhenNotUserDefined()
38 $parser = new PhpParser();
39 $this->assertEquals(array(), $parser->parseClass(new \ReflectionClass('\stdClass')));
42 public function testParseClassWhenClassIsNotNamespaced()
44 $parser = new PhpParser();
45 $class = new ReflectionClass('\AnnotationsTestsFixturesNonNamespacedClass');
47 $this->assertEquals(array(
48 'route' => __NAMESPACE__ . '\Fixtures\Annotation\Route',
49 'template' => __NAMESPACE__ . '\Fixtures\Annotation\Template',
50 ), $parser->parseClass($class));
53 public function testParseClassWhenClassIsInterface()
55 $parser = new PhpParser();
56 $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\TestInterface');
58 $this->assertEquals(array(
59 'secure' => __NAMESPACE__ . '\Fixtures\Annotation\Secure',
60 ), $parser->parseClass($class));
63 public function testClassWithFullyQualifiedUseStatements()
65 $parser = new PhpParser();
66 $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\ClassWithFullyQualifiedUseStatements');
68 $this->assertEquals(array(
69 'secure' => '\\' . __NAMESPACE__ . '\Fixtures\Annotation\Secure',
70 'route' => '\\' . __NAMESPACE__ . '\Fixtures\Annotation\Route',
71 'template' => '\\' . __NAMESPACE__ . '\Fixtures\Annotation\Template',
72 ), $parser->parseClass($class));
75 public function testNamespaceAndClassCommentedOut()
77 $parser = new PhpParser();
78 $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\NamespaceAndClassCommentedOut');
80 $this->assertEquals(array(
81 'route' => __NAMESPACE__ . '\Fixtures\Annotation\Route',
82 'template' => __NAMESPACE__ . '\Fixtures\Annotation\Template',
83 ), $parser->parseClass($class));
86 public function testEqualNamespacesPerFileWithClassAsFirst()
88 $parser = new PhpParser();
89 $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\EqualNamespacesPerFileWithClassAsFirst');
91 $this->assertEquals(array(
92 'secure' => __NAMESPACE__ . '\Fixtures\Annotation\Secure',
93 'route' => __NAMESPACE__ . '\Fixtures\Annotation\Route',
94 ), $parser->parseClass($class));
97 public function testEqualNamespacesPerFileWithClassAsLast()
99 $parser = new PhpParser();
100 $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\EqualNamespacesPerFileWithClassAsLast');
102 $this->assertEquals(array(
103 'route' => __NAMESPACE__ . '\Fixtures\Annotation\Route',
104 'template' => __NAMESPACE__ . '\Fixtures\Annotation\Template',
105 ), $parser->parseClass($class));
108 public function testDifferentNamespacesPerFileWithClassAsFirst()
110 $parser = new PhpParser();
111 $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\DifferentNamespacesPerFileWithClassAsFirst');
113 $this->assertEquals(array(
114 'secure' => __NAMESPACE__ . '\Fixtures\Annotation\Secure',
115 ), $parser->parseClass($class));
118 public function testDifferentNamespacesPerFileWithClassAsLast()
120 $parser = new PhpParser();
121 $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\DifferentNamespacesPerFileWithClassAsLast');
123 $this->assertEquals(array(
124 'template' => __NAMESPACE__ . '\Fixtures\Annotation\Template',
125 ), $parser->parseClass($class));
128 public function testGlobalNamespacesPerFileWithClassAsFirst()
130 $parser = new PhpParser();
131 $class = new \ReflectionClass('\GlobalNamespacesPerFileWithClassAsFirst');
133 $this->assertEquals(array(
134 'secure' => __NAMESPACE__ . '\Fixtures\Annotation\Secure',
135 'route' => __NAMESPACE__ . '\Fixtures\Annotation\Route',
136 ), $parser->parseClass($class));
139 public function testGlobalNamespacesPerFileWithClassAsLast()
141 $parser = new PhpParser();
142 $class = new ReflectionClass('\GlobalNamespacesPerFileWithClassAsLast');
144 $this->assertEquals(array(
145 'route' => __NAMESPACE__ . '\Fixtures\Annotation\Route',
146 'template' => __NAMESPACE__ . '\Fixtures\Annotation\Template',
147 ), $parser->parseClass($class));
150 public function testNamespaceWithClosureDeclaration()
152 $parser = new PhpParser();
153 $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\NamespaceWithClosureDeclaration');
155 $this->assertEquals(array(
156 'secure' => __NAMESPACE__ . '\Fixtures\Annotation\Secure',
157 'route' => __NAMESPACE__ . '\Fixtures\Annotation\Route',
158 'template' => __NAMESPACE__ . '\Fixtures\Annotation\Template',
159 ), $parser->parseClass($class));
162 public function testIfPointerResetsOnMultipleParsingTries()
164 $parser = new PhpParser();
165 $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\NamespaceWithClosureDeclaration');
167 $this->assertEquals(array(
168 'secure' => __NAMESPACE__ . '\Fixtures\Annotation\Secure',
169 'route' => __NAMESPACE__ . '\Fixtures\Annotation\Route',
170 'template' => __NAMESPACE__ . '\Fixtures\Annotation\Template',
171 ), $parser->parseClass($class));
173 $this->assertEquals(array(
174 'secure' => __NAMESPACE__ . '\Fixtures\Annotation\Secure',
175 'route' => __NAMESPACE__ . '\Fixtures\Annotation\Route',
176 'template' => __NAMESPACE__ . '\Fixtures\Annotation\Template',
177 ), $parser->parseClass($class));
184 public function testClassWithClosure()
186 $parser = new PhpParser();
187 $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\ClassWithClosure');
189 $this->assertEquals(array(
190 'annotationtargetall' => __NAMESPACE__ . '\Fixtures\AnnotationTargetAll',
191 'annotationtargetannotation' => __NAMESPACE__ . '\Fixtures\AnnotationTargetAnnotation',
192 ), $parser->parseClass($class));