6d4e57e9845041deb998ea1a144290f9d810134f
[yaffs-website] / vendor / symfony / class-loader / Tests / LegacyApcUniversalClassLoaderTest.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\ApcUniversalClassLoader;
16
17 /**
18  * @group legacy
19  */
20 class LegacyApcUniversalClassLoaderTest extends TestCase
21 {
22     protected function setUp()
23     {
24         if (ini_get('apc.enabled') && ini_get('apc.enable_cli')) {
25             apcu_clear_cache();
26         } else {
27             $this->markTestSkipped('APC is not enabled.');
28         }
29     }
30
31     protected function tearDown()
32     {
33         if (ini_get('apc.enabled') && ini_get('apc.enable_cli')) {
34             apcu_clear_cache();
35         }
36     }
37
38     public function testConstructor()
39     {
40         $loader = new ApcUniversalClassLoader('test.prefix.');
41         $loader->registerNamespace('LegacyApc\Namespaced', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
42
43         $this->assertEquals($loader->findFile('\LegacyApc\Namespaced\FooBar'), apcu_fetch('test.prefix.\LegacyApc\Namespaced\FooBar'), '__construct() takes a prefix as its first argument');
44     }
45
46    /**
47     * @dataProvider getLoadClassTests
48     */
49    public function testLoadClass($className, $testClassName, $message)
50    {
51        $loader = new ApcUniversalClassLoader('test.prefix.');
52        $loader->registerNamespace('LegacyApc\Namespaced', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
53        $loader->registerPrefix('LegacyApc_Pearlike_', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
54        $loader->loadClass($testClassName);
55        $this->assertTrue(class_exists($className), $message);
56    }
57
58     public function getLoadClassTests()
59     {
60         return array(
61            array('\\LegacyApc\\Namespaced\\Foo', 'LegacyApc\\Namespaced\\Foo',   '->loadClass() loads LegacyApc\Namespaced\Foo class'),
62            array('LegacyApc_Pearlike_Foo',    'LegacyApc_Pearlike_Foo',      '->loadClass() loads LegacyApc_Pearlike_Foo class'),
63        );
64     }
65
66    /**
67     * @dataProvider getLoadClassFromFallbackTests
68     */
69    public function testLoadClassFromFallback($className, $testClassName, $message)
70    {
71        $loader = new ApcUniversalClassLoader('test.prefix.fallback');
72        $loader->registerNamespace('LegacyApc\Namespaced', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
73        $loader->registerPrefix('LegacyApc_Pearlike_', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
74        $loader->registerNamespaceFallbacks(array(__DIR__.DIRECTORY_SEPARATOR.'Fixtures/LegacyApc/fallback'));
75        $loader->registerPrefixFallbacks(array(__DIR__.DIRECTORY_SEPARATOR.'Fixtures/LegacyApc/fallback'));
76        $loader->loadClass($testClassName);
77        $this->assertTrue(class_exists($className), $message);
78    }
79
80     public function getLoadClassFromFallbackTests()
81     {
82         return array(
83            array('\\LegacyApc\\Namespaced\\Baz',    'LegacyApc\\Namespaced\\Baz',    '->loadClass() loads LegacyApc\Namespaced\Baz class'),
84            array('LegacyApc_Pearlike_Baz',       'LegacyApc_Pearlike_Baz',       '->loadClass() loads LegacyApc_Pearlike_Baz class'),
85            array('\\LegacyApc\\Namespaced\\FooBar', 'LegacyApc\\Namespaced\\FooBar', '->loadClass() loads LegacyApc\Namespaced\Baz class from fallback dir'),
86            array('LegacyApc_Pearlike_FooBar',    'LegacyApc_Pearlike_FooBar',    '->loadClass() loads LegacyApc_Pearlike_Baz class from fallback dir'),
87        );
88     }
89
90    /**
91     * @dataProvider getLoadClassNamespaceCollisionTests
92     */
93    public function testLoadClassNamespaceCollision($namespaces, $className, $message)
94    {
95        $loader = new ApcUniversalClassLoader('test.prefix.collision.');
96        $loader->registerNamespaces($namespaces);
97
98        $loader->loadClass($className);
99
100        $this->assertTrue(class_exists($className), $message);
101    }
102
103     public function getLoadClassNamespaceCollisionTests()
104     {
105         return array(
106            array(
107                array(
108                    'LegacyApc\\NamespaceCollision\\A' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/LegacyApc/alpha',
109                    'LegacyApc\\NamespaceCollision\\A\\B' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/LegacyApc/beta',
110                ),
111                'LegacyApc\NamespaceCollision\A\Foo',
112                '->loadClass() loads NamespaceCollision\A\Foo from alpha.',
113            ),
114            array(
115                array(
116                    'LegacyApc\\NamespaceCollision\\A\\B' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/LegacyApc/beta',
117                    'LegacyApc\\NamespaceCollision\\A' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/LegacyApc/alpha',
118                ),
119                'LegacyApc\NamespaceCollision\A\Bar',
120                '->loadClass() loads NamespaceCollision\A\Bar from alpha.',
121            ),
122            array(
123                array(
124                    'LegacyApc\\NamespaceCollision\\A' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/LegacyApc/alpha',
125                    'LegacyApc\\NamespaceCollision\\A\\B' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/LegacyApc/beta',
126                ),
127                'LegacyApc\NamespaceCollision\A\B\Foo',
128                '->loadClass() loads NamespaceCollision\A\B\Foo from beta.',
129            ),
130            array(
131                array(
132                    'LegacyApc\\NamespaceCollision\\A\\B' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/LegacyApc/beta',
133                    'LegacyApc\\NamespaceCollision\\A' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/LegacyApc/alpha',
134                ),
135                'LegacyApc\NamespaceCollision\A\B\Bar',
136                '->loadClass() loads NamespaceCollision\A\B\Bar from beta.',
137            ),
138        );
139     }
140
141    /**
142     * @dataProvider getLoadClassPrefixCollisionTests
143     */
144    public function testLoadClassPrefixCollision($prefixes, $className, $message)
145    {
146        $loader = new ApcUniversalClassLoader('test.prefix.collision.');
147        $loader->registerPrefixes($prefixes);
148
149        $loader->loadClass($className);
150        $this->assertTrue(class_exists($className), $message);
151    }
152
153     public function getLoadClassPrefixCollisionTests()
154     {
155         return array(
156            array(
157                array(
158                    'LegacyApcPrefixCollision_A_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/LegacyApc/alpha/LegacyApc',
159                    'LegacyApcPrefixCollision_A_B_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/LegacyApc/beta/LegacyApc',
160                ),
161                'LegacyApcPrefixCollision_A_Foo',
162                '->loadClass() loads LegacyApcPrefixCollision_A_Foo from alpha.',
163            ),
164            array(
165                array(
166                    'LegacyApcPrefixCollision_A_B_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/LegacyApc/beta/LegacyApc',
167                    'LegacyApcPrefixCollision_A_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/LegacyApc/alpha/LegacyApc',
168                ),
169                'LegacyApcPrefixCollision_A_Bar',
170                '->loadClass() loads LegacyApcPrefixCollision_A_Bar from alpha.',
171            ),
172            array(
173                array(
174                    'LegacyApcPrefixCollision_A_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/LegacyApc/alpha/LegacyApc',
175                    'LegacyApcPrefixCollision_A_B_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/LegacyApc/beta/LegacyApc',
176                ),
177                'LegacyApcPrefixCollision_A_B_Foo',
178                '->loadClass() loads LegacyApcPrefixCollision_A_B_Foo from beta.',
179            ),
180            array(
181                array(
182                    'LegacyApcPrefixCollision_A_B_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/LegacyApc/beta/LegacyApc',
183                    'LegacyApcPrefixCollision_A_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/LegacyApc/alpha/LegacyApc',
184                ),
185                'LegacyApcPrefixCollision_A_B_Bar',
186                '->loadClass() loads LegacyApcPrefixCollision_A_B_Bar from beta.',
187            ),
188        );
189     }
190 }