Rajout de doctrine/orm
[zf2.biz/galerie.git] / vendor / doctrine / common / tests / Doctrine / Tests / Common / Annotations / PhpParserTest.php
1 <?php
2
3 namespace Doctrine\Tests\Common\Annotations;
4
5 use ReflectionClass;
6 use Doctrine\Common\Annotations\PhpParser;
7
8 require_once __DIR__.'/Fixtures/NonNamespacedClass.php';
9 require_once __DIR__.'/Fixtures/GlobalNamespacesPerFileWithClassAsFirst.php';
10 require_once __DIR__.'/Fixtures/GlobalNamespacesPerFileWithClassAsLast.php';
11
12 class PhpParserTest extends \PHPUnit_Framework_TestCase
13 {
14     public function testParseClassWithMultipleClassesInFile()
15     {
16         $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\MultipleClassesInFile');
17         $parser = new PhpParser();
18
19         $this->assertEquals(array(
20             'route'  => __NAMESPACE__ . '\Fixtures\Annotation\Route',
21             'secure' => __NAMESPACE__ . '\Fixtures\Annotation\Secure',
22         ), $parser->parseClass($class));
23     }
24
25     public function testParseClassWithMultipleImportsInUseStatement()
26     {
27         $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\MultipleImportsInUseStatement');
28         $parser = new PhpParser();
29
30         $this->assertEquals(array(
31             'route'  => __NAMESPACE__ . '\Fixtures\Annotation\Route',
32             'secure' => __NAMESPACE__ . '\Fixtures\Annotation\Secure',
33         ), $parser->parseClass($class));
34     }
35
36     public function testParseClassWhenNotUserDefined()
37     {
38         $parser = new PhpParser();
39         $this->assertEquals(array(), $parser->parseClass(new \ReflectionClass('\stdClass')));
40     }
41
42     public function testParseClassWhenClassIsNotNamespaced()
43     {
44         $parser = new PhpParser();
45         $class = new ReflectionClass('\AnnotationsTestsFixturesNonNamespacedClass');
46
47         $this->assertEquals(array(
48             'route'    => __NAMESPACE__ . '\Fixtures\Annotation\Route',
49             'template' => __NAMESPACE__ . '\Fixtures\Annotation\Template',
50         ), $parser->parseClass($class));
51     }
52
53     public function testParseClassWhenClassIsInterface()
54     {
55         $parser = new PhpParser();
56         $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\TestInterface');
57
58         $this->assertEquals(array(
59             'secure' => __NAMESPACE__ . '\Fixtures\Annotation\Secure',
60         ), $parser->parseClass($class));
61     }
62
63     public function testClassWithFullyQualifiedUseStatements()
64     {
65         $parser = new PhpParser();
66         $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\ClassWithFullyQualifiedUseStatements');
67
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));
73     }
74
75     public function testNamespaceAndClassCommentedOut()
76     {
77         $parser = new PhpParser();
78         $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\NamespaceAndClassCommentedOut');
79
80         $this->assertEquals(array(
81             'route'    => __NAMESPACE__ . '\Fixtures\Annotation\Route',
82             'template' => __NAMESPACE__ . '\Fixtures\Annotation\Template',
83         ), $parser->parseClass($class));
84         }
85
86     public function testEqualNamespacesPerFileWithClassAsFirst()
87     {
88         $parser = new PhpParser();
89         $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\EqualNamespacesPerFileWithClassAsFirst');
90
91         $this->assertEquals(array(
92             'secure'   => __NAMESPACE__ . '\Fixtures\Annotation\Secure',
93             'route'    => __NAMESPACE__ . '\Fixtures\Annotation\Route',
94         ), $parser->parseClass($class));
95     }
96
97     public function testEqualNamespacesPerFileWithClassAsLast()
98     {
99         $parser = new PhpParser();
100         $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\EqualNamespacesPerFileWithClassAsLast');
101
102         $this->assertEquals(array(
103             'route'    => __NAMESPACE__ . '\Fixtures\Annotation\Route',
104             'template' => __NAMESPACE__ . '\Fixtures\Annotation\Template',
105         ), $parser->parseClass($class));
106     }
107
108     public function testDifferentNamespacesPerFileWithClassAsFirst()
109     {
110         $parser = new PhpParser();
111         $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\DifferentNamespacesPerFileWithClassAsFirst');
112
113         $this->assertEquals(array(
114             'secure'   => __NAMESPACE__ . '\Fixtures\Annotation\Secure',
115         ), $parser->parseClass($class));
116     }
117
118     public function testDifferentNamespacesPerFileWithClassAsLast()
119     {
120         $parser = new PhpParser();
121         $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\DifferentNamespacesPerFileWithClassAsLast');
122
123         $this->assertEquals(array(
124             'template' => __NAMESPACE__ . '\Fixtures\Annotation\Template',
125         ), $parser->parseClass($class));
126     }
127
128     public function testGlobalNamespacesPerFileWithClassAsFirst()
129     {
130         $parser = new PhpParser();
131         $class = new \ReflectionClass('\GlobalNamespacesPerFileWithClassAsFirst');
132
133         $this->assertEquals(array(
134             'secure'   => __NAMESPACE__ . '\Fixtures\Annotation\Secure',
135             'route'    => __NAMESPACE__ . '\Fixtures\Annotation\Route',
136         ), $parser->parseClass($class));
137     }
138
139     public function testGlobalNamespacesPerFileWithClassAsLast()
140     {
141         $parser = new PhpParser();
142         $class = new ReflectionClass('\GlobalNamespacesPerFileWithClassAsLast');
143
144         $this->assertEquals(array(
145             'route'    => __NAMESPACE__ . '\Fixtures\Annotation\Route',
146             'template' => __NAMESPACE__ . '\Fixtures\Annotation\Template',
147         ), $parser->parseClass($class));
148     }
149
150     public function testNamespaceWithClosureDeclaration()
151     {
152         $parser = new PhpParser();
153         $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\NamespaceWithClosureDeclaration');
154
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));
160     }
161
162     public function testIfPointerResetsOnMultipleParsingTries()
163     {
164         $parser = new PhpParser();
165         $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\NamespaceWithClosureDeclaration');
166
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));
172
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));
178     }
179
180     /**
181      * @group DCOM-97
182      * @group regression
183      */
184     public function testClassWithClosure()
185     {
186         $parser = new PhpParser();
187         $class  = new ReflectionClass(__NAMESPACE__ . '\Fixtures\ClassWithClosure');
188
189         $this->assertEquals(array(
190           'annotationtargetall'         => __NAMESPACE__ . '\Fixtures\AnnotationTargetAll',
191           'annotationtargetannotation'  => __NAMESPACE__ . '\Fixtures\AnnotationTargetAnnotation',
192         ), $parser->parseClass($class));
193     }
194 }