8ad7132ee9ea6f212a80f2bc768e61b639686056
[yaffs-website] / vendor / symfony / class-loader / Tests / ApcClassLoaderTest.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\ApcClassLoader;
16 use Symfony\Component\ClassLoader\ClassLoader;
17
18 class ApcClassLoaderTest extends TestCase
19 {
20     protected function setUp()
21     {
22         if (!(ini_get('apc.enabled') && ini_get('apc.enable_cli'))) {
23             $this->markTestSkipped('The apc extension is not enabled.');
24         } else {
25             apcu_clear_cache();
26         }
27     }
28
29     protected function tearDown()
30     {
31         if (ini_get('apc.enabled') && ini_get('apc.enable_cli')) {
32             apcu_clear_cache();
33         }
34     }
35
36     public function testConstructor()
37     {
38         $loader = new ClassLoader();
39         $loader->addPrefix('Apc\Namespaced', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
40
41         $loader = new ApcClassLoader('test.prefix.', $loader);
42
43         $this->assertEquals($loader->findFile('\Apc\Namespaced\FooBar'), apcu_fetch('test.prefix.\Apc\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 ClassLoader();
52         $loader->addPrefix('Apc\Namespaced', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
53         $loader->addPrefix('Apc_Pearlike_', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
54
55         $loader = new ApcClassLoader('test.prefix.', $loader);
56         $loader->loadClass($testClassName);
57         $this->assertTrue(class_exists($className), $message);
58     }
59
60     public function getLoadClassTests()
61     {
62         return array(
63            array('\\Apc\\Namespaced\\Foo', 'Apc\\Namespaced\\Foo',   '->loadClass() loads Apc\Namespaced\Foo class'),
64            array('Apc_Pearlike_Foo',    'Apc_Pearlike_Foo',      '->loadClass() loads Apc_Pearlike_Foo class'),
65         );
66     }
67
68     /**
69      * @dataProvider getLoadClassFromFallbackTests
70      */
71     public function testLoadClassFromFallback($className, $testClassName, $message)
72     {
73         $loader = new ClassLoader();
74         $loader->addPrefix('Apc\Namespaced', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
75         $loader->addPrefix('Apc_Pearlike_', __DIR__.DIRECTORY_SEPARATOR.'Fixtures');
76         $loader->addPrefix('', array(__DIR__.DIRECTORY_SEPARATOR.'Fixtures/Apc/fallback'));
77
78         $loader = new ApcClassLoader('test.prefix.fallback', $loader);
79         $loader->loadClass($testClassName);
80
81         $this->assertTrue(class_exists($className), $message);
82     }
83
84     public function getLoadClassFromFallbackTests()
85     {
86         return array(
87            array('\\Apc\\Namespaced\\Baz',    'Apc\\Namespaced\\Baz',    '->loadClass() loads Apc\Namespaced\Baz class'),
88            array('Apc_Pearlike_Baz',       'Apc_Pearlike_Baz',       '->loadClass() loads Apc_Pearlike_Baz class'),
89            array('\\Apc\\Namespaced\\FooBar', 'Apc\\Namespaced\\FooBar', '->loadClass() loads Apc\Namespaced\Baz class from fallback dir'),
90            array('Apc_Pearlike_FooBar',    'Apc_Pearlike_FooBar',    '->loadClass() loads Apc_Pearlike_Baz class from fallback dir'),
91        );
92     }
93
94     /**
95      * @dataProvider getLoadClassNamespaceCollisionTests
96      */
97     public function testLoadClassNamespaceCollision($namespaces, $className, $message)
98     {
99         $loader = new ClassLoader();
100         $loader->addPrefixes($namespaces);
101
102         $loader = new ApcClassLoader('test.prefix.collision.', $loader);
103         $loader->loadClass($className);
104
105         $this->assertTrue(class_exists($className), $message);
106     }
107
108     public function getLoadClassNamespaceCollisionTests()
109     {
110         return array(
111            array(
112                array(
113                    'Apc\\NamespaceCollision\\A' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/Apc/alpha',
114                    'Apc\\NamespaceCollision\\A\\B' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/Apc/beta',
115                ),
116                'Apc\NamespaceCollision\A\Foo',
117                '->loadClass() loads NamespaceCollision\A\Foo from alpha.',
118            ),
119            array(
120                array(
121                    'Apc\\NamespaceCollision\\A\\B' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/Apc/beta',
122                    'Apc\\NamespaceCollision\\A' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/Apc/alpha',
123                ),
124                'Apc\NamespaceCollision\A\Bar',
125                '->loadClass() loads NamespaceCollision\A\Bar from alpha.',
126            ),
127            array(
128                array(
129                    'Apc\\NamespaceCollision\\A' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/Apc/alpha',
130                    'Apc\\NamespaceCollision\\A\\B' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/Apc/beta',
131                ),
132                'Apc\NamespaceCollision\A\B\Foo',
133                '->loadClass() loads NamespaceCollision\A\B\Foo from beta.',
134            ),
135            array(
136                array(
137                    'Apc\\NamespaceCollision\\A\\B' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/Apc/beta',
138                    'Apc\\NamespaceCollision\\A' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/Apc/alpha',
139                ),
140                'Apc\NamespaceCollision\A\B\Bar',
141                '->loadClass() loads NamespaceCollision\A\B\Bar from beta.',
142            ),
143         );
144     }
145
146     /**
147      * @dataProvider getLoadClassPrefixCollisionTests
148      */
149     public function testLoadClassPrefixCollision($prefixes, $className, $message)
150     {
151         $loader = new ClassLoader();
152         $loader->addPrefixes($prefixes);
153
154         $loader = new ApcClassLoader('test.prefix.collision.', $loader);
155         $loader->loadClass($className);
156
157         $this->assertTrue(class_exists($className), $message);
158     }
159
160     public function getLoadClassPrefixCollisionTests()
161     {
162         return array(
163            array(
164                array(
165                    'ApcPrefixCollision_A_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/Apc/alpha/Apc',
166                    'ApcPrefixCollision_A_B_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/Apc/beta/Apc',
167                ),
168                'ApcPrefixCollision_A_Foo',
169                '->loadClass() loads ApcPrefixCollision_A_Foo from alpha.',
170            ),
171            array(
172                array(
173                    'ApcPrefixCollision_A_B_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/Apc/beta/Apc',
174                    'ApcPrefixCollision_A_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/Apc/alpha/Apc',
175                ),
176                'ApcPrefixCollision_A_Bar',
177                '->loadClass() loads ApcPrefixCollision_A_Bar from alpha.',
178            ),
179            array(
180                array(
181                    'ApcPrefixCollision_A_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/Apc/alpha/Apc',
182                    'ApcPrefixCollision_A_B_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/Apc/beta/Apc',
183                ),
184                'ApcPrefixCollision_A_B_Foo',
185                '->loadClass() loads ApcPrefixCollision_A_B_Foo from beta.',
186            ),
187            array(
188                array(
189                    'ApcPrefixCollision_A_B_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/Apc/beta/Apc',
190                    'ApcPrefixCollision_A_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/Apc/alpha/Apc',
191                ),
192                'ApcPrefixCollision_A_B_Bar',
193                '->loadClass() loads ApcPrefixCollision_A_B_Bar from beta.',
194            ),
195         );
196     }
197 }