public function testGetTargetDir() { $package = new Package('a', '1.0.0.0', '1.0'); $this->assertNull($package->getTargetDir()); $package->setTargetDir('./../foo/'); $this->assertEquals('foo/', $package->getTargetDir()); $package->setTargetDir('foo/../../../bar/'); $this->assertEquals('foo/bar/', $package->getTargetDir()); $package->setTargetDir('../..'); $this->assertEquals('', $package->getTargetDir()); $package->setTargetDir('..'); $this->assertEquals('', $package->getTargetDir()); $package->setTargetDir('/..'); $this->assertEquals('', $package->getTargetDir()); $package->setTargetDir('/foo/..'); $this->assertEquals('foo/', $package->getTargetDir()); $package->setTargetDir('/foo/..//bar'); $this->assertEquals('foo/bar', $package->getTargetDir()); }
public function testVendorDirExcludedFromWorkingDir() { $workingDir = $this->vendorDir . '/working-dir'; $vendorDir = $workingDir . '/../vendor'; $this->fs->ensureDirectoryExists($workingDir); chdir($workingDir); $package = new Package('a', '1.0', '1.0'); $package->setAutoload(array('psr-0' => array('Foo' => 'src'), 'psr-4' => array('Acme\\Foo\\' => 'src-psr4'), 'classmap' => array('classmap'), 'files' => array('test.php'))); $vendorPackage = new Package('b/b', '1.0', '1.0'); $vendorPackage->setAutoload(array('psr-0' => array('Bar' => 'lib'), 'psr-4' => array('Acme\\Bar\\' => 'lib-psr4'), 'classmap' => array('classmaps'), 'files' => array('bootstrap.php'))); $this->repository->expects($this->once())->method('getCanonicalPackages')->will($this->returnValue(array($vendorPackage))); $im = $this->getMockBuilder('Composer\\Installer\\InstallationManager')->disableOriginalConstructor()->getMock(); $im->expects($this->any())->method('getInstallPath')->will($this->returnCallback(function ($package) use($vendorDir) { $targetDir = $package->getTargetDir(); return $vendorDir . '/' . $package->getName() . ($targetDir ? '/' . $targetDir : ''); })); $this->fs->ensureDirectoryExists($workingDir . '/src/Foo'); $this->fs->ensureDirectoryExists($workingDir . '/classmap'); $this->fs->ensureDirectoryExists($vendorDir . '/composer'); $this->fs->ensureDirectoryExists($vendorDir . '/b/b/lib/Bar'); $this->fs->ensureDirectoryExists($vendorDir . '/b/b/classmaps'); file_put_contents($workingDir . '/src/Foo/Bar.php', '<?php namespace Foo; class Bar {}'); file_put_contents($workingDir . '/classmap/classes.php', '<?php namespace Foo; class Foo {}'); file_put_contents($workingDir . '/test.php', '<?php class Foo {}'); file_put_contents($vendorDir . '/b/b/lib/Bar/Foo.php', '<?php namespace Bar; class Foo {}'); file_put_contents($vendorDir . '/b/b/classmaps/classes.php', '<?php namespace Bar; class Bar {}'); file_put_contents($vendorDir . '/b/b/bootstrap.php', '<?php class Bar {}'); $oldVendorDir = $this->vendorDir; $this->vendorDir = $vendorDir; $this->generator->dump($this->config, $this->repository, $package, $im, 'composer', true, '_13'); $this->vendorDir = $oldVendorDir; $expectedNamespace = <<<'EOF' <?php // autoload_namespaces.php @generated by Composer $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir).'/working-dir'; return array( 'Foo' => array($baseDir . '/src'), 'Bar' => array($vendorDir . '/b/b/lib'), ); EOF; $expectedPsr4 = <<<'EOF' <?php // autoload_psr4.php @generated by Composer $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir).'/working-dir'; return array( 'Acme\\Foo\\' => array($baseDir . '/src-psr4'), 'Acme\\Bar\\' => array($vendorDir . '/b/b/lib-psr4'), ); EOF; $expectedClassmap = <<<'EOF' <?php // autoload_classmap.php @generated by Composer $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir).'/working-dir'; return array( 'Bar\\Bar' => $vendorDir . '/b/b/classmaps/classes.php', 'Bar\\Foo' => $vendorDir . '/b/b/lib/Bar/Foo.php', 'Foo\\Bar' => $baseDir . '/src/Foo/Bar.php', 'Foo\\Foo' => $baseDir . '/classmap/classes.php', ); EOF; $this->assertEquals($expectedNamespace, file_get_contents($vendorDir . '/composer/autoload_namespaces.php')); $this->assertEquals($expectedPsr4, file_get_contents($vendorDir . '/composer/autoload_psr4.php')); $this->assertEquals($expectedClassmap, file_get_contents($vendorDir . '/composer/autoload_classmap.php')); $this->assertContains("\n \$vendorDir . '/b/b/bootstrap.php',\n", file_get_contents($vendorDir . '/composer/autoload_files.php')); $this->assertContains("\n \$baseDir . '/test.php',\n", file_get_contents($vendorDir . '/composer/autoload_files.php')); }