Kaynağa Gözat

Install every package in its own directory, fixes #73

Jordi Boggiano 13 yıl önce
ebeveyn
işleme
4904e76185

+ 2 - 5
src/Composer/Installer/LibraryInstaller.php

@@ -123,10 +123,7 @@ class LibraryInstaller implements InstallerInterface
      */
     public function getInstallPath(PackageInterface $package)
     {
-        if (null === $package->getTargetDir()) {
-            return ($this->directory ? $this->directory.'/' : '').$package->getName();
-        }
-
-        return ($this->directory ? $this->directory.'/' : '').$package->getTargetDir();
+        $targetDir = $package->getTargetDir();
+        return ($this->directory ? $this->directory.'/' : '') . $package->getName() . ($targetDir ? '/'.$targetDir : '');
     }
 }

+ 26 - 0
tests/Composer/Test/Installer/LibraryInstallerTest.php

@@ -160,6 +160,32 @@ class LibraryInstallerTest extends \PHPUnit_Framework_TestCase
         $library->uninstall($package);
     }
 
+    public function testGetInstallPath()
+    {
+        $library = new LibraryInstaller($this->dir, $this->dm, $this->repository);
+        $package = $this->createPackageMock();
+
+        $package
+            ->expects($this->once())
+            ->method('getTargetDir')
+            ->will($this->returnValue(null));
+
+        $this->assertEquals($this->dir.'/'.$package->getName(), $library->getInstallPath($package));
+    }
+
+    public function testGetInstallPathWithTargetDir()
+    {
+        $library = new LibraryInstaller($this->dir, $this->dm, $this->repository);
+        $package = $this->createPackageMock();
+
+        $package
+            ->expects($this->once())
+            ->method('getTargetDir')
+            ->will($this->returnValue('Some/Namespace'));
+
+        $this->assertEquals($this->dir.'/'.$package->getName().'/Some/Namespace', $library->getInstallPath($package));
+    }
+
     private function createPackageMock()
     {
         return $this->getMockBuilder('Composer\Package\MemoryPackage')