From 2d9739bd05076656584b163c04abcb22cca81993 Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Sun, 1 Apr 2012 20:23:47 +0200 Subject: [PATCH] Add support for files in classmap autoload config, fixes #463 --- src/Composer/Autoload/ClassMapGenerator.php | 6 ++- .../Test/Autoload/AutoloadGeneratorTest.php | 37 +++++++++++++++++++ .../Autoload/Fixtures/autoload_classmap5.php | 12 ++++++ 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 tests/Composer/Test/Autoload/Fixtures/autoload_classmap5.php diff --git a/src/Composer/Autoload/ClassMapGenerator.php b/src/Composer/Autoload/ClassMapGenerator.php index 99b2a29ad..4d6b5ea4b 100644 --- a/src/Composer/Autoload/ClassMapGenerator.php +++ b/src/Composer/Autoload/ClassMapGenerator.php @@ -47,7 +47,11 @@ class ClassMapGenerator static public function createMap($dir) { if (is_string($dir)) { - $dir = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($dir)); + if (is_file($dir)) { + $dir = array(new \SplFileInfo($dir)); + } else { + $dir = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($dir)); + } } $map = array(); diff --git a/tests/Composer/Test/Autoload/AutoloadGeneratorTest.php b/tests/Composer/Test/Autoload/AutoloadGeneratorTest.php index 36135e3da..79435b7bd 100644 --- a/tests/Composer/Test/Autoload/AutoloadGeneratorTest.php +++ b/tests/Composer/Test/Autoload/AutoloadGeneratorTest.php @@ -196,6 +196,43 @@ class AutoloadGeneratorTest extends TestCase $this->assertAutoloadFiles('classmap4', $this->vendorDir.'/.composer', 'classmap'); } + public function testClassMapAutoloadingEmptyDirAndExactFile() + { + $package = new MemoryPackage('a', '1.0', '1.0'); + + $packages = array(); + $packages[] = $a = new MemoryPackage('a/a', '1.0', '1.0'); + $packages[] = $b = new MemoryPackage('b/b', '1.0', '1.0'); + $packages[] = $c = new MemoryPackage('c/c', '1.0', '1.0'); + $a->setAutoload(array('classmap' => array(''))); + $b->setAutoload(array('classmap' => array('test.php'))); + $c->setAutoload(array('classmap' => array('./'))); + + $this->repository->expects($this->once()) + ->method('getPackages') + ->will($this->returnValue($packages)); + + @mkdir($this->vendorDir.'/.composer', 0777, true); + mkdir($this->vendorDir.'/a/a/src', 0777, true); + mkdir($this->vendorDir.'/b/b', 0777, true); + mkdir($this->vendorDir.'/c/c/foo', 0777, true); + file_put_contents($this->vendorDir.'/a/a/src/a.php', 'vendorDir.'/b/b/test.php', 'vendorDir.'/c/c/foo/test.php', 'generator->dump($this->repository, $package, $this->im, $this->vendorDir.'/.composer'); + $this->assertTrue(file_exists($this->vendorDir.'/.composer/autoload_classmap.php'), "ClassMap file needs to be generated."); + $this->assertEquals( + array( + 'ClassMapFoo' => $this->workingDir.'/composer-test-autoload/a/a/src/a.php', + 'ClassMapBar' => $this->workingDir.'/composer-test-autoload/b/b/test.php', + 'ClassMapBaz' => $this->workingDir.'/composer-test-autoload/c/c/foo/test.php', + ), + include ($this->vendorDir.'/.composer/autoload_classmap.php') + ); + $this->assertAutoloadFiles('classmap5', $this->vendorDir.'/.composer', 'classmap'); + } + public function testOverrideVendorsAutoloading() { $package = new MemoryPackage('a', '1.0', '1.0'); diff --git a/tests/Composer/Test/Autoload/Fixtures/autoload_classmap5.php b/tests/Composer/Test/Autoload/Fixtures/autoload_classmap5.php new file mode 100644 index 000000000..e3230f953 --- /dev/null +++ b/tests/Composer/Test/Autoload/Fixtures/autoload_classmap5.php @@ -0,0 +1,12 @@ + $baseDir . '/composer-test-autoload/a/a/src/a.php', + 'ClassMapBar' => $baseDir . '/composer-test-autoload/b/b/test.php', + 'ClassMapBaz' => $baseDir . '/composer-test-autoload/c/c/foo/test.php', +);