From 9455c490537b02120a53d58ea72d29bd4f07bff4 Mon Sep 17 00:00:00 2001 From: Marc Bennewitz Date: Thu, 30 Apr 2015 19:17:19 +0200 Subject: [PATCH] fixes #3974: Autoloader have to distinguish between files and directories --- src/Composer/Autoload/ClassLoader.php | 8 ++++---- tests/Composer/Test/Autoload/ClassLoaderTest.php | 11 +++++++++++ .../Composer/Test/Autoload/Fixtures/DirDotPhp/Dir.php | 6 ++++++ .../Autoload/Fixtures/DirDotPhp/psr4/Dir.php/File.php | 6 ++++++ 4 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 tests/Composer/Test/Autoload/Fixtures/DirDotPhp/Dir.php create mode 100644 tests/Composer/Test/Autoload/Fixtures/DirDotPhp/psr4/Dir.php/File.php diff --git a/src/Composer/Autoload/ClassLoader.php b/src/Composer/Autoload/ClassLoader.php index 5e1469e83..4e05d3b15 100644 --- a/src/Composer/Autoload/ClassLoader.php +++ b/src/Composer/Autoload/ClassLoader.php @@ -351,7 +351,7 @@ class ClassLoader foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) { if (0 === strpos($class, $prefix)) { foreach ($this->prefixDirsPsr4[$prefix] as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) { + if (is_file($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) { return $file; } } @@ -361,7 +361,7 @@ class ClassLoader // PSR-4 fallback dirs foreach ($this->fallbackDirsPsr4 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + if (is_file($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { return $file; } } @@ -380,7 +380,7 @@ class ClassLoader foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { if (0 === strpos($class, $prefix)) { foreach ($dirs as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + if (is_file($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { return $file; } } @@ -390,7 +390,7 @@ class ClassLoader // PSR-0 fallback dirs foreach ($this->fallbackDirsPsr0 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + if (is_file($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { return $file; } } diff --git a/tests/Composer/Test/Autoload/ClassLoaderTest.php b/tests/Composer/Test/Autoload/ClassLoaderTest.php index 50772101e..ec4156a15 100644 --- a/tests/Composer/Test/Autoload/ClassLoaderTest.php +++ b/tests/Composer/Test/Autoload/ClassLoaderTest.php @@ -9,6 +9,17 @@ use Composer\Autoload\ClassLoader; */ class ClassLoaderTest extends \PHPUnit_Framework_TestCase { + public function testLoadClassDotPhp() + { + $loader = new ClassLoader(); + $loader->add('DirDotPhp\\', __DIR__ . '/Fixtures'); + $loader->addPsr4('DirDotPhp\\', __DIR__ . '/Fixtures/DirDotPhp/psr4'); + + $class = 'DirDotPhp\\Dir'; + $loader->loadClass($class); + $this->assertTrue(class_exists($class, false), "->loadClass() loads '$class'."); + } + /** * Tests regular PSR-0 and PSR-4 class loading. * diff --git a/tests/Composer/Test/Autoload/Fixtures/DirDotPhp/Dir.php b/tests/Composer/Test/Autoload/Fixtures/DirDotPhp/Dir.php new file mode 100644 index 000000000..9d9d62d8c --- /dev/null +++ b/tests/Composer/Test/Autoload/Fixtures/DirDotPhp/Dir.php @@ -0,0 +1,6 @@ +