0e3ec646a43089a0eace013dad9f50859a2519f5
[yaffs-website] / vendor / symfony / class-loader / Tests / ClassLoaderTest.php
1 <?php
2
3 /*
4  * This file is part of the Symfony package.
5  *
6  * (c) Fabien Potencier <fabien@symfony.com>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 namespace Symfony\Component\ClassLoader\Tests;
13
14 use PHPUnit\Framework\TestCase;
15 use Symfony\Component\ClassLoader\ClassLoader;
16
17 /**
18  * @group legacy
19  */
20 class ClassLoaderTest extends TestCase
21 {
22     public function testGetPrefixes()
23     {
24         $loader = new ClassLoader();
25         $loader->addPrefix('Foo', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
26         $loader->addPrefix('Bar', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
27         $loader->addPrefix('Bas', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
28         $prefixes = $loader->getPrefixes();
29         $this->assertArrayHasKey('Foo', $prefixes);
30         $this->assertArrayNotHasKey('Foo1', $prefixes);
31         $this->assertArrayHasKey('Bar', $prefixes);
32         $this->assertArrayHasKey('Bas', $prefixes);
33     }
34
35     public function testGetFallbackDirs()
36     {
37         $loader = new ClassLoader();
38         $loader->addPrefix(null, __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
39         $loader->addPrefix(null, __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
40         $fallback_dirs = $loader->getFallbackDirs();
41         $this->assertCount(2, $fallback_dirs);
42     }
43
44     /**
45      * @dataProvider getLoadClassTests
46      */
47     public function testLoadClass($className, $testClassName, $message)
48     {
49         $loader = new ClassLoader();
50         $loader->addPrefix('Namespaced2\\', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
51         $loader->addPrefix('Pearlike2_', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
52         $loader->loadClass($testClassName);
53         $this->assertTrue(class_exists($className), $message);
54     }
55
56     public function getLoadClassTests()
57     {
58         return array(
59             array('\\Namespaced2\\Foo', 'Namespaced2\\Foo',   '->loadClass() loads Namespaced2\Foo class'),
60             array('\\Pearlike2_Foo',    'Pearlike2_Foo',      '->loadClass() loads Pearlike2_Foo class'),
61         );
62     }
63
64     /**
65      * @dataProvider getLoadNonexistentClassTests
66      */
67     public function testLoadNonexistentClass($className, $testClassName, $message)
68     {
69         $loader = new ClassLoader();
70         $loader->addPrefix('Namespaced2\\', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
71         $loader->addPrefix('Pearlike2_', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
72         $loader->loadClass($testClassName);
73         $this->assertFalse(class_exists($className), $message);
74     }
75
76     public function getLoadNonexistentClassTests()
77     {
78         return array(
79             array('\\Pearlike3_Bar', '\\Pearlike3_Bar', '->loadClass() loads non existing Pearlike3_Bar class with a leading slash'),
80         );
81     }
82
83     public function testAddPrefixSingle()
84     {
85         $loader = new ClassLoader();
86         $loader->addPrefix('Foo', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
87         $loader->addPrefix('Foo', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
88         $prefixes = $loader->getPrefixes();
89         $this->assertArrayHasKey('Foo', $prefixes);
90         $this->assertCount(1, $prefixes['Foo']);
91     }
92
93     public function testAddPrefixesSingle()
94     {
95         $loader = new ClassLoader();
96         $loader->addPrefixes(array('Foo' => array('foo', 'foo')));
97         $loader->addPrefixes(array('Foo' => array('foo')));
98         $prefixes = $loader->getPrefixes();
99         $this->assertArrayHasKey('Foo', $prefixes);
100         $this->assertCount(1, $prefixes['Foo'], print_r($prefixes, true));
101     }
102
103     public function testAddPrefixMulti()
104     {
105         $loader = new ClassLoader();
106         $loader->addPrefix('Foo', 'foo');
107         $loader->addPrefix('Foo', 'bar');
108         $prefixes = $loader->getPrefixes();
109         $this->assertArrayHasKey('Foo', $prefixes);
110         $this->assertCount(2, $prefixes['Foo']);
111         $this->assertContains('foo', $prefixes['Foo']);
112         $this->assertContains('bar', $prefixes['Foo']);
113     }
114
115     public function testUseIncludePath()
116     {
117         $loader = new ClassLoader();
118         $this->assertFalse($loader->getUseIncludePath());
119
120         $this->assertNull($loader->findFile('Foo'));
121
122         $includePath = get_include_path();
123
124         $loader->setUseIncludePath(true);
125         $this->assertTrue($loader->getUseIncludePath());
126
127         set_include_path(__DIR__.'/Fixtures/includepath'.PATH_SEPARATOR.$includePath);
128
129         $this->assertEquals(__DIR__.DIRECTORY_SEPARATOR.'Fixtures'.DIRECTORY_SEPARATOR.'includepath'.DIRECTORY_SEPARATOR.'Foo.php', $loader->findFile('Foo'));
130
131         set_include_path($includePath);
132     }
133
134     /**
135      * @dataProvider getLoadClassFromFallbackTests
136      */
137     public function testLoadClassFromFallback($className, $testClassName, $message)
138     {
139         $loader = new ClassLoader();
140         $loader->addPrefix('Namespaced2\\', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
141         $loader->addPrefix('Pearlike2_', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
142         $loader->addPrefix('', array(__DIR__.DIRECTORY_SEPARATOR.'Fixtures/fallback'));
143         $loader->loadClass($testClassName);
144         $this->assertTrue(class_exists($className), $message);
145     }
146
147     public function getLoadClassFromFallbackTests()
148     {
149         return array(
150             array('\\Namespaced2\\Baz',    'Namespaced2\\Baz',    '->loadClass() loads Namespaced2\Baz class'),
151             array('\\Pearlike2_Baz',       'Pearlike2_Baz',       '->loadClass() loads Pearlike2_Baz class'),
152             array('\\Namespaced2\\FooBar', 'Namespaced2\\FooBar', '->loadClass() loads Namespaced2\Baz class from fallback dir'),
153             array('\\Pearlike2_FooBar',    'Pearlike2_FooBar',    '->loadClass() loads Pearlike2_Baz class from fallback dir'),
154         );
155     }
156
157     /**
158      * @dataProvider getLoadClassNamespaceCollisionTests
159      */
160     public function testLoadClassNamespaceCollision($namespaces, $className, $message)
161     {
162         $loader = new ClassLoader();
163         $loader->addPrefixes($namespaces);
164
165         $loader->loadClass($className);
166         $this->assertTrue(class_exists($className), $message);
167     }
168
169     public function getLoadClassNamespaceCollisionTests()
170     {
171         return array(
172             array(
173                 array(
174                     'NamespaceCollision\\C' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/alpha',
175                     'NamespaceCollision\\C\\B' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/beta',
176                 ),
177                 'NamespaceCollision\C\Foo',
178                 '->loadClass() loads NamespaceCollision\C\Foo from alpha.',
179             ),
180             array(
181                 array(
182                     'NamespaceCollision\\C\\B' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/beta',
183                     'NamespaceCollision\\C' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/alpha',
184                 ),
185                 'NamespaceCollision\C\Bar',
186                 '->loadClass() loads NamespaceCollision\C\Bar from alpha.',
187             ),
188             array(
189                 array(
190                     'NamespaceCollision\\C' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/alpha',
191                     'NamespaceCollision\\C\\B' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/beta',
192                 ),
193                 'NamespaceCollision\C\B\Foo',
194                 '->loadClass() loads NamespaceCollision\C\B\Foo from beta.',
195             ),
196             array(
197                 array(
198                     'NamespaceCollision\\C\\B' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/beta',
199                     'NamespaceCollision\\C' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/alpha',
200                 ),
201                 'NamespaceCollision\C\B\Bar',
202                 '->loadClass() loads NamespaceCollision\C\B\Bar from beta.',
203             ),
204             array(
205                 array(
206                     'PrefixCollision_C_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/alpha',
207                     'PrefixCollision_C_B_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/beta',
208                 ),
209                 'PrefixCollision_C_Foo',
210                 '->loadClass() loads PrefixCollision_C_Foo from alpha.',
211             ),
212             array(
213                 array(
214                     'PrefixCollision_C_B_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/beta',
215                     'PrefixCollision_C_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/alpha',
216                 ),
217                 'PrefixCollision_C_Bar',
218                 '->loadClass() loads PrefixCollision_C_Bar from alpha.',
219             ),
220             array(
221                 array(
222                     'PrefixCollision_C_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/alpha',
223                     'PrefixCollision_C_B_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/beta',
224                 ),
225                 'PrefixCollision_C_B_Foo',
226                 '->loadClass() loads PrefixCollision_C_B_Foo from beta.',
227             ),
228             array(
229                 array(
230                     'PrefixCollision_C_B_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/beta',
231                     'PrefixCollision_C_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/alpha',
232                 ),
233                 'PrefixCollision_C_B_Bar',
234                 '->loadClass() loads PrefixCollision_C_B_Bar from beta.',
235             ),
236         );
237     }
238 }