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