4 * This file is part of the Symfony package.
6 * (c) Fabien Potencier <fabien@symfony.com>
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
12 namespace Symfony\Component\ClassLoader\Tests;
14 use PHPUnit\Framework\TestCase;
15 use Symfony\Component\ClassLoader\UniversalClassLoader;
20 class LegacyUniversalClassLoaderTest extends TestCase
23 * @dataProvider getLoadClassTests
25 public function testLoadClass($className, $testClassName, $message)
27 $loader = new UniversalClassLoader();
28 $loader->registerNamespace('Namespaced', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
29 $loader->registerPrefix('Pearlike_', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
30 $this->assertTrue($loader->loadClass($testClassName));
31 $this->assertTrue(class_exists($className), $message);
34 public function getLoadClassTests()
37 array('\\Namespaced\\Foo', 'Namespaced\\Foo', '->loadClass() loads Namespaced\Foo class'),
38 array('\\Pearlike_Foo', 'Pearlike_Foo', '->loadClass() loads Pearlike_Foo class'),
42 public function testUseIncludePath()
44 $loader = new UniversalClassLoader();
45 $this->assertFalse($loader->getUseIncludePath());
47 $this->assertNull($loader->findFile('Foo'));
49 $includePath = get_include_path();
51 $loader->useIncludePath(true);
52 $this->assertTrue($loader->getUseIncludePath());
54 set_include_path(__DIR__.'/Fixtures/includepath'.PATH_SEPARATOR.$includePath);
56 $this->assertEquals(__DIR__.DIRECTORY_SEPARATOR.'Fixtures'.DIRECTORY_SEPARATOR.'includepath'.DIRECTORY_SEPARATOR.'Foo.php', $loader->findFile('Foo'));
58 set_include_path($includePath);
61 public function testGetNamespaces()
63 $loader = new UniversalClassLoader();
64 $loader->registerNamespace('Foo', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
65 $loader->registerNamespace('Bar', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
66 $loader->registerNamespace('Bas', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
67 $namespaces = $loader->getNamespaces();
68 $this->assertArrayHasKey('Foo', $namespaces);
69 $this->assertArrayNotHasKey('Foo1', $namespaces);
70 $this->assertArrayHasKey('Bar', $namespaces);
71 $this->assertArrayHasKey('Bas', $namespaces);
74 public function testGetPrefixes()
76 $loader = new UniversalClassLoader();
77 $loader->registerPrefix('Foo', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
78 $loader->registerPrefix('Bar', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
79 $loader->registerPrefix('Bas', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
80 $prefixes = $loader->getPrefixes();
81 $this->assertArrayHasKey('Foo', $prefixes);
82 $this->assertArrayNotHasKey('Foo1', $prefixes);
83 $this->assertArrayHasKey('Bar', $prefixes);
84 $this->assertArrayHasKey('Bas', $prefixes);
88 * @dataProvider getLoadClassFromFallbackTests
90 public function testLoadClassFromFallback($className, $testClassName, $message)
92 $loader = new UniversalClassLoader();
93 $loader->registerNamespace('Namespaced', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
94 $loader->registerPrefix('Pearlike_', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
95 $loader->registerNamespaceFallbacks(array(__DIR__.DIRECTORY_SEPARATOR.'Fixtures/fallback'));
96 $loader->registerPrefixFallbacks(array(__DIR__.DIRECTORY_SEPARATOR.'Fixtures/fallback'));
97 $this->assertTrue($loader->loadClass($testClassName));
98 $this->assertTrue(class_exists($className), $message);
101 public function getLoadClassFromFallbackTests()
104 array('\\Namespaced\\Baz', 'Namespaced\\Baz', '->loadClass() loads Namespaced\Baz class'),
105 array('\\Pearlike_Baz', 'Pearlike_Baz', '->loadClass() loads Pearlike_Baz class'),
106 array('\\Namespaced\\FooBar', 'Namespaced\\FooBar', '->loadClass() loads Namespaced\Baz class from fallback dir'),
107 array('\\Pearlike_FooBar', 'Pearlike_FooBar', '->loadClass() loads Pearlike_Baz class from fallback dir'),
111 public function testRegisterPrefixFallback()
113 $loader = new UniversalClassLoader();
114 $loader->registerPrefixFallback(__DIR__.DIRECTORY_SEPARATOR.'Fixtures/fallback');
115 $this->assertEquals(array(__DIR__.DIRECTORY_SEPARATOR.'Fixtures/fallback'), $loader->getPrefixFallbacks());
118 public function testRegisterNamespaceFallback()
120 $loader = new UniversalClassLoader();
121 $loader->registerNamespaceFallback(__DIR__.DIRECTORY_SEPARATOR.'Fixtures/Namespaced/fallback');
122 $this->assertEquals(array(__DIR__.DIRECTORY_SEPARATOR.'Fixtures/Namespaced/fallback'), $loader->getNamespaceFallbacks());
126 * @dataProvider getLoadClassNamespaceCollisionTests
128 public function testLoadClassNamespaceCollision($namespaces, $className, $message)
130 $loader = new UniversalClassLoader();
131 $loader->registerNamespaces($namespaces);
133 $this->assertTrue($loader->loadClass($className));
134 $this->assertTrue(class_exists($className), $message);
137 public function getLoadClassNamespaceCollisionTests()
142 'NamespaceCollision\\A' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/alpha',
143 'NamespaceCollision\\A\\B' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/beta',
145 'NamespaceCollision\A\Foo',
146 '->loadClass() loads NamespaceCollision\A\Foo from alpha.',
150 'NamespaceCollision\\A\\B' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/beta',
151 'NamespaceCollision\\A' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/alpha',
153 'NamespaceCollision\A\Bar',
154 '->loadClass() loads NamespaceCollision\A\Bar from alpha.',
158 'NamespaceCollision\\A' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/alpha',
159 'NamespaceCollision\\A\\B' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/beta',
161 'NamespaceCollision\A\B\Foo',
162 '->loadClass() loads NamespaceCollision\A\B\Foo from beta.',
166 'NamespaceCollision\\A\\B' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/beta',
167 'NamespaceCollision\\A' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/alpha',
169 'NamespaceCollision\A\B\Bar',
170 '->loadClass() loads NamespaceCollision\A\B\Bar from beta.',
176 * @dataProvider getLoadClassPrefixCollisionTests
178 public function testLoadClassPrefixCollision($prefixes, $className, $message)
180 $loader = new UniversalClassLoader();
181 $loader->registerPrefixes($prefixes);
183 $this->assertTrue($loader->loadClass($className));
184 $this->assertTrue(class_exists($className), $message);
187 public function getLoadClassPrefixCollisionTests()
192 'PrefixCollision_A_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/alpha',
193 'PrefixCollision_A_B_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/beta',
195 'PrefixCollision_A_Foo',
196 '->loadClass() loads PrefixCollision_A_Foo from alpha.',
200 'PrefixCollision_A_B_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/beta',
201 'PrefixCollision_A_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/alpha',
203 'PrefixCollision_A_Bar',
204 '->loadClass() loads PrefixCollision_A_Bar from alpha.',
208 'PrefixCollision_A_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/alpha',
209 'PrefixCollision_A_B_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/beta',
211 'PrefixCollision_A_B_Foo',
212 '->loadClass() loads PrefixCollision_A_B_Foo from beta.',
216 'PrefixCollision_A_B_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/beta',
217 'PrefixCollision_A_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/alpha',
219 'PrefixCollision_A_B_Bar',
220 '->loadClass() loads PrefixCollision_A_B_Bar from beta.',