2013-07-08 13:11:07 +04:00
< ? php
/*
* This file is part of the Symfony package .
*
* ( c ) Fabien Potencier < fabien @ symfony . com >
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
namespace Symfony\Component\ClassLoader\Tests ;
use Symfony\Component\ClassLoader\ApcUniversalClassLoader ;
class ApcUniversalClassLoaderTest extends \PHPUnit_Framework_TestCase
{
protected function setUp ()
{
if ( ! extension_loaded ( 'apc' )) {
$this -> markTestSkipped ( 'The apc extension is not available.' );
}
if ( ! ( ini_get ( 'apc.enabled' ) && ini_get ( 'apc.enable_cli' ))) {
$this -> markTestSkipped ( 'The apc extension is available, but not enabled.' );
} else {
apc_clear_cache ( 'user' );
}
}
protected function tearDown ()
{
if ( ini_get ( 'apc.enabled' ) && ini_get ( 'apc.enable_cli' )) {
apc_clear_cache ( 'user' );
}
}
public function testConstructor ()
{
$loader = new ApcUniversalClassLoader ( 'test.prefix.' );
$loader -> registerNamespace ( 'Apc\Namespaced' , __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures' );
$this -> assertEquals ( $loader -> findFile ( '\Apc\Namespaced\FooBar' ), apc_fetch ( 'test.prefix.\Apc\Namespaced\FooBar' ), '__construct() takes a prefix as its first argument' );
}
/**
* @ dataProvider getLoadClassTests
*/
public function testLoadClass ( $className , $testClassName , $message )
{
$loader = new ApcUniversalClassLoader ( 'test.prefix.' );
$loader -> registerNamespace ( 'Apc\Namespaced' , __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures' );
$loader -> registerPrefix ( 'Apc_Pearlike_' , __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures' );
$loader -> loadClass ( $testClassName );
$this -> assertTrue ( class_exists ( $className ), $message );
}
2014-11-14 01:37:34 +03:00
public function getLoadClassTests ()
{
return array (
2014-08-28 02:10:31 +04:00
array ( '\\Apc\\Namespaced\\Foo' , 'Apc\\Namespaced\\Foo' , '->loadClass() loads Apc\Namespaced\Foo class' ),
2013-07-08 13:11:07 +04:00
array ( 'Apc_Pearlike_Foo' , 'Apc_Pearlike_Foo' , '->loadClass() loads Apc_Pearlike_Foo class' ),
);
2014-11-14 01:37:34 +03:00
}
2013-07-08 13:11:07 +04:00
/**
* @ dataProvider getLoadClassFromFallbackTests
*/
public function testLoadClassFromFallback ( $className , $testClassName , $message )
{
$loader = new ApcUniversalClassLoader ( 'test.prefix.fallback' );
$loader -> registerNamespace ( 'Apc\Namespaced' , __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures' );
$loader -> registerPrefix ( 'Apc_Pearlike_' , __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures' );
$loader -> registerNamespaceFallbacks ( array ( __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/Apc/fallback' ));
$loader -> registerPrefixFallbacks ( array ( __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/Apc/fallback' ));
$loader -> loadClass ( $testClassName );
$this -> assertTrue ( class_exists ( $className ), $message );
}
2014-11-14 01:37:34 +03:00
public function getLoadClassFromFallbackTests ()
{
return array (
2014-08-28 02:10:31 +04:00
array ( '\\Apc\\Namespaced\\Baz' , 'Apc\\Namespaced\\Baz' , '->loadClass() loads Apc\Namespaced\Baz class' ),
2013-07-08 13:11:07 +04:00
array ( 'Apc_Pearlike_Baz' , 'Apc_Pearlike_Baz' , '->loadClass() loads Apc_Pearlike_Baz class' ),
2014-08-28 02:10:31 +04:00
array ( '\\Apc\\Namespaced\\FooBar' , 'Apc\\Namespaced\\FooBar' , '->loadClass() loads Apc\Namespaced\Baz class from fallback dir' ),
2013-07-08 13:11:07 +04:00
array ( 'Apc_Pearlike_FooBar' , 'Apc_Pearlike_FooBar' , '->loadClass() loads Apc_Pearlike_Baz class from fallback dir' ),
);
2014-11-14 01:37:34 +03:00
}
2013-07-08 13:11:07 +04:00
/**
* @ dataProvider getLoadClassNamespaceCollisionTests
*/
public function testLoadClassNamespaceCollision ( $namespaces , $className , $message )
{
$loader = new ApcUniversalClassLoader ( 'test.prefix.collision.' );
$loader -> registerNamespaces ( $namespaces );
$loader -> loadClass ( $className );
$this -> assertTrue ( class_exists ( $className ), $message );
}
2014-11-14 01:37:34 +03:00
public function getLoadClassNamespaceCollisionTests ()
{
return array (
2013-07-08 13:11:07 +04:00
array (
array (
'Apc\\NamespaceCollision\\A' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/Apc/alpha' ,
'Apc\\NamespaceCollision\\A\\B' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/Apc/beta' ,
),
2014-08-28 02:10:31 +04:00
'Apc\NamespaceCollision\A\Foo' ,
2013-07-08 13:11:07 +04:00
'->loadClass() loads NamespaceCollision\A\Foo from alpha.' ,
),
array (
array (
'Apc\\NamespaceCollision\\A\\B' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/Apc/beta' ,
'Apc\\NamespaceCollision\\A' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/Apc/alpha' ,
),
2014-08-28 02:10:31 +04:00
'Apc\NamespaceCollision\A\Bar' ,
2013-07-08 13:11:07 +04:00
'->loadClass() loads NamespaceCollision\A\Bar from alpha.' ,
),
array (
array (
'Apc\\NamespaceCollision\\A' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/Apc/alpha' ,
'Apc\\NamespaceCollision\\A\\B' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/Apc/beta' ,
),
2014-08-28 02:10:31 +04:00
'Apc\NamespaceCollision\A\B\Foo' ,
2013-07-08 13:11:07 +04:00
'->loadClass() loads NamespaceCollision\A\B\Foo from beta.' ,
),
array (
array (
'Apc\\NamespaceCollision\\A\\B' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/Apc/beta' ,
'Apc\\NamespaceCollision\\A' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/Apc/alpha' ,
),
2014-08-28 02:10:31 +04:00
'Apc\NamespaceCollision\A\B\Bar' ,
2013-07-08 13:11:07 +04:00
'->loadClass() loads NamespaceCollision\A\B\Bar from beta.' ,
),
);
2014-11-14 01:37:34 +03:00
}
2013-07-08 13:11:07 +04:00
/**
* @ dataProvider getLoadClassPrefixCollisionTests
*/
public function testLoadClassPrefixCollision ( $prefixes , $className , $message )
{
$loader = new ApcUniversalClassLoader ( 'test.prefix.collision.' );
$loader -> registerPrefixes ( $prefixes );
$loader -> loadClass ( $className );
$this -> assertTrue ( class_exists ( $className ), $message );
}
2014-11-14 01:37:34 +03:00
public function getLoadClassPrefixCollisionTests ()
{
return array (
2013-07-08 13:11:07 +04:00
array (
array (
'ApcPrefixCollision_A_' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/Apc/alpha/Apc' ,
'ApcPrefixCollision_A_B_' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/Apc/beta/Apc' ,
),
'ApcPrefixCollision_A_Foo' ,
'->loadClass() loads ApcPrefixCollision_A_Foo from alpha.' ,
),
array (
array (
'ApcPrefixCollision_A_B_' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/Apc/beta/Apc' ,
'ApcPrefixCollision_A_' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/Apc/alpha/Apc' ,
),
'ApcPrefixCollision_A_Bar' ,
'->loadClass() loads ApcPrefixCollision_A_Bar from alpha.' ,
),
array (
array (
'ApcPrefixCollision_A_' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/Apc/alpha/Apc' ,
'ApcPrefixCollision_A_B_' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/Apc/beta/Apc' ,
),
'ApcPrefixCollision_A_B_Foo' ,
'->loadClass() loads ApcPrefixCollision_A_B_Foo from beta.' ,
),
array (
array (
'ApcPrefixCollision_A_B_' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/Apc/beta/Apc' ,
'ApcPrefixCollision_A_' => __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures/Apc/alpha/Apc' ,
),
'ApcPrefixCollision_A_B_Bar' ,
'->loadClass() loads ApcPrefixCollision_A_B_Bar from beta.' ,
),
);
2014-11-14 01:37:34 +03:00
}
2013-07-08 13:11:07 +04:00
}