public function testPackageNotExists() { $io = new NullIO(); $pkg = new Package('test/test', 1, 1); $pkg->setRequires([]); $pkg->setDevRequires([]); $this->assertFalse(Setup::checkDependencies($io, $pkg)); }
public function testGetRequires() { $package = new Package('hostnet/foo', 1.0, 1.0); $content = self::createMock('Hostnet\\Component\\EntityPlugin\\PackageContentInterface'); $entity_package = new EntityPackage($package, $content, $content); $this->assertEquals([], $entity_package->getRequires()); $link = new Link('hostnet/a', 'hostnet/foo'); $package->setRequires([$link]); $this->assertSame([$link], $entity_package->getRequires()); }
public function addsDependenciesProvider() { $requires_external = new Package('hostnet/requires-external', 1, 1); $requires_external->setRequires([new Link('hostnet/requires-external', 'hostnet/not-linked')]); $foo = new Package('hostnet/foo', 1, 1); $bar = new Package('hostnet/bar', 1, 1); $foobar = new Package('hostnet/foobar', 1, 1); $bar->setRequires([new Link('hostnet/bar', 'hostnet/foo')]); $foo->setSuggests(['hostnet/foobar' => 'Very useless text...']); return [[[]], [[$requires_external]], [[$foo], ['hostnet/foo' => []], ['hostnet/foo' => []]], [[$foo, $bar, $foobar], ['hostnet/foo' => [$foobar], 'hostnet/bar' => [$foo]], ['hostnet/foo' => [$bar], 'hostnet/bar' => []]]]; }
/** * @return array */ public function dataGetRequired() { $package = new Package('vendor/name', '1.0.0.0', '1.0'); $link = new Link('test', 'name'); $devLink = new Link('devTest', 'name'); $package->setRequires([$link]); $package->setDevRequires([$devLink]); $data = []; $data['both require false'] = [[], $package, false, false]; $data['require true'] = [[$link], $package, true, false]; $data['requireDev true'] = [[$devLink], $package, false, true]; $data['both require true'] = [[$link, $devLink], $package, true, true]; return $data; }
public function dataGetRequired() { $package = new Package('vendor/name', '1.0.0.0', '1.0'); $link = new Link('test', 'name'); $devLink = new Link('devTest', 'name'); $package->setRequires(array($link)); $package->setDevRequires(array($devLink)); $data = array(); $data['both require false'] = array(array(), $package, false, false); $data['require true'] = array(array($link), $package, true, false); $data['requireDev true'] = array(array($devLink), $package, false, true); $data['both require true'] = array(array($link, $devLink), $package, true, true); return $data; }
/** * Test that PSR-0 and PSR-4 mappings are processed in the correct order for * autoloading and for classmap generation: * - The main package has priority over other packages. * - Longer namespaces have priority over shorter namespaces. */ public function testOverrideVendorsAutoloading() { $mainPackage = new Package('z', '1.0', '1.0'); $mainPackage->setAutoload(array('psr-0' => array('A\\B' => $this->workingDir . '/lib'), 'classmap' => array($this->workingDir . '/src'))); $mainPackage->setRequires(array(new Link('z', 'a/a'))); $packages = array(); $packages[] = $a = new Package('a/a', '1.0', '1.0'); $packages[] = $b = new Package('b/b', '1.0', '1.0'); $a->setAutoload(array('psr-0' => array('A' => 'src/', 'A\\B' => 'lib/'), 'classmap' => array('classmap'))); $b->setAutoload(array('psr-0' => array('B\\Sub\\Name' => 'src/'))); $this->repository->expects($this->once())->method('getCanonicalPackages')->will($this->returnValue($packages)); $this->fs->ensureDirectoryExists($this->workingDir . '/lib/A/B'); $this->fs->ensureDirectoryExists($this->workingDir . '/src/'); $this->fs->ensureDirectoryExists($this->vendorDir . '/composer'); $this->fs->ensureDirectoryExists($this->vendorDir . '/a/a/classmap'); $this->fs->ensureDirectoryExists($this->vendorDir . '/a/a/src'); $this->fs->ensureDirectoryExists($this->vendorDir . '/a/a/lib/A/B'); $this->fs->ensureDirectoryExists($this->vendorDir . '/b/b/src'); // Define the classes A\B\C and Foo\Bar in the main package. file_put_contents($this->workingDir . '/lib/A/B/C.php', '<?php namespace A\\B; class C {}'); file_put_contents($this->workingDir . '/src/classes.php', '<?php namespace Foo; class Bar {}'); // Define the same two classes in the package a/a. file_put_contents($this->vendorDir . '/a/a/lib/A/B/C.php', '<?php namespace A\\B; class C {}'); file_put_contents($this->vendorDir . '/a/a/classmap/classes.php', '<?php namespace Foo; class Bar {}'); $expectedNamespace = <<<EOF <?php // autoload_namespaces.php @generated by Composer \$vendorDir = dirname(dirname(__FILE__)); \$baseDir = dirname(\$vendorDir); return array( 'B\\\\Sub\\\\Name' => array(\$vendorDir . '/b/b/src'), 'A\\\\B' => array(\$baseDir . '/lib', \$vendorDir . '/a/a/lib'), 'A' => array(\$vendorDir . '/a/a/src'), ); EOF; // autoload_psr4.php is expected to be empty in this example. $expectedPsr4 = <<<EOF <?php // autoload_psr4.php @generated by Composer \$vendorDir = dirname(dirname(__FILE__)); \$baseDir = dirname(\$vendorDir); return array( ); EOF; $expectedClassmap = <<<EOF <?php // autoload_classmap.php @generated by Composer \$vendorDir = dirname(dirname(__FILE__)); \$baseDir = dirname(\$vendorDir); return array( 'A\\\\B\\\\C' => \$baseDir . '/lib/A/B/C.php', 'Foo\\\\Bar' => \$baseDir . '/src/classes.php', ); EOF; $this->generator->dump($this->config, $this->repository, $mainPackage, $this->im, 'composer', true, '_9'); $this->assertEquals($expectedNamespace, file_get_contents($this->vendorDir . '/composer/autoload_namespaces.php')); $this->assertEquals($expectedPsr4, file_get_contents($this->vendorDir . '/composer/autoload_psr4.php')); $this->assertEquals($expectedClassmap, file_get_contents($this->vendorDir . '/composer/autoload_classmap.php')); }
public function testFilesAutoloadOrderByDependencies() { $package = new Package('a', '1.0', '1.0'); $package->setAutoload(array('files' => array('root.php'))); $package->setRequires(array(new Link('a', 'a/foo'))); $packages = array(); $packages[] = $a = new Package('a/foo', '1.0', '1.0'); $packages[] = $b = new Package('b/bar', '1.0', '1.0'); $packages[] = $c = new Package('c/lorem', '1.0', '1.0'); $a->setAutoload(array('files' => array('testA.php'))); $a->setRequires(array(new Link('a/foo', 'c/lorem'))); $b->setAutoload(array('files' => array('testB.php'))); $b->setRequires(array(new Link('b/bar', 'c/lorem'))); $c->setAutoload(array('files' => array('testC.php'))); $this->repository->expects($this->once())->method('getPackages')->will($this->returnValue($packages)); $this->fs->ensureDirectoryExists($this->vendorDir . '/a/foo'); $this->fs->ensureDirectoryExists($this->vendorDir . '/b/bar'); $this->fs->ensureDirectoryExists($this->vendorDir . '/c/lorem'); file_put_contents($this->vendorDir . '/a/foo/testA.php', '<?php function testFilesAutoloadOrderByDependency1() {}'); file_put_contents($this->vendorDir . '/b/bar/testB.php', '<?php function testFilesAutoloadOrderByDependency2() {}'); file_put_contents($this->vendorDir . '/c/lorem/testC.php', '<?php function testFilesAutoloadOrderByDependency3() {}'); file_put_contents($this->workingDir . '/root.php', '<?php function testFilesAutoloadOrderByDependencyRoot() {}'); $this->generator->dump($this->config, $this->repository, $package, $this->im, 'composer', false, 'FilesAutoloadOrder'); $this->assertFileEquals(__DIR__ . '/Fixtures/autoload_functions_by_dependency.php', $this->vendorDir . '/autoload.php'); $this->assertFileEquals(__DIR__ . '/Fixtures/autoload_real_files_by_dependency.php', $this->vendorDir . '/composer/autoload_realFilesAutoloadOrder.php'); // suppress the class loader to avoid fatals if the class is redefined file_put_contents($this->vendorDir . '/composer/ClassLoader.php', ''); include $this->vendorDir . '/autoload.php'; $this->assertTrue(function_exists('testFilesAutoloadOrderByDependency1')); $this->assertTrue(function_exists('testFilesAutoloadOrderByDependency2')); $this->assertTrue(function_exists('testFilesAutoloadOrderByDependency3')); $this->assertTrue(function_exists('testFilesAutoloadOrderByDependencyRoot')); }
public function testInstallNewPuliPackagesInDifferentEnvironments() { $event = new CommandEvent(ScriptEvents::POST_INSTALL_CMD, $this->composer, $this->io); $this->localRepository->setPackages(array($package1 = new Package('vendor/package1', '1.0', '1.0'), $package2 = new Package('vendor/package2', '1.0', '1.0'), $package3 = new Package('vendor/package3', '1.0', '1.0'), $package4 = new Package('vendor/package4', '1.0', '1.0'))); // Check whether package is in "require" $this->rootPackage->setRequires(array('vendor/package1' => new Link('vendor/root', 'vendor/package1'))); // Recursively resolve all "require" packages $package1->setRequires(array('vendor/package2' => new Link('vendor/package1', 'vendor/package2'))); // Ignore "require" blocks of "require-dev" dependencies $package3->setRequires(array('vendor/package4' => new Link('vendor/package3', 'vendor/package4'))); $this->io->expects($this->at(0))->method('write')->with('<info>Looking for updated Puli packages</info>'); $this->io->expects($this->at(1))->method('write')->with('Installing <info>vendor/package1</info> (<comment>package1</comment>) in <comment>prod</comment>'); $this->io->expects($this->at(2))->method('write')->with('Installing <info>vendor/package2</info> (<comment>package2</comment>) in <comment>prod</comment>'); $this->io->expects($this->never())->method('writeError'); $this->puliRunner->expects($this->at(0))->method('run')->with('package --list --format "%name%;%installer%;%install_path%;%state%;%env%"')->willReturn("vendor/root;;{$this->tempDir};enabled;prod\n"); $this->puliRunner->expects($this->at(1))->method('run')->with("package --install '{$this->tempDir}/package1' 'vendor/package1' --installer 'composer'"); $this->puliRunner->expects($this->at(2))->method('run')->with("package --install '{$this->tempDir}/package2' 'vendor/package2' --installer 'composer'"); $this->puliRunner->expects($this->at(3))->method('run')->with("package --install --dev '{$this->tempDir}/package3' 'vendor/package3' --installer 'composer'"); $this->puliRunner->expects($this->at(4))->method('run')->with("package --install --dev '{$this->tempDir}/package4' 'vendor/package4' --installer 'composer'"); $this->puliRunner->expects($this->at(5))->method('run')->with('build'); $this->plugin->postInstall($event); }
public function testOverrideVendorsAutoloading() { $package = new Package('z', '1.0', '1.0'); $package->setAutoload(array('psr-0' => array('A\\B' => $this->workingDir . '/lib'), 'classmap' => array($this->workingDir . '/src'))); $package->setRequires(array(new Link('z', 'a/a'))); $packages = array(); $packages[] = $a = new Package('a/a', '1.0', '1.0'); $packages[] = $b = new Package('b/b', '1.0', '1.0'); $a->setAutoload(array('psr-0' => array('A' => 'src/', 'A\\B' => 'lib/'), 'classmap' => array('classmap'))); $b->setAutoload(array('psr-0' => array('B\\Sub\\Name' => 'src/'))); $this->repository->expects($this->once())->method('getPackages')->will($this->returnValue($packages)); $this->fs->ensureDirectoryExists($this->workingDir . '/lib/A/B'); $this->fs->ensureDirectoryExists($this->workingDir . '/src/'); $this->fs->ensureDirectoryExists($this->vendorDir . '/composer'); $this->fs->ensureDirectoryExists($this->vendorDir . '/a/a/classmap'); $this->fs->ensureDirectoryExists($this->vendorDir . '/a/a/src'); $this->fs->ensureDirectoryExists($this->vendorDir . '/a/a/lib/A/B'); $this->fs->ensureDirectoryExists($this->vendorDir . '/b/b/src'); file_put_contents($this->workingDir . '/lib/A/B/C.php', '<?php namespace A\\B; class C {}'); file_put_contents($this->workingDir . '/src/classes.php', '<?php namespace Foo; class Bar {}'); file_put_contents($this->vendorDir . '/a/a/lib/A/B/C.php', '<?php namespace A\\B; class C {}'); file_put_contents($this->vendorDir . '/a/a/classmap/classes.php', '<?php namespace Foo; class Bar {}'); $workDir = strtr($this->workingDir, '\\', '/'); $expectedNamespace = <<<EOF <?php // autoload_namespaces.php generated by Composer \$vendorDir = dirname(__DIR__); \$baseDir = dirname(\$vendorDir); return array( 'B\\\\Sub\\\\Name' => \$vendorDir . '/b/b/src/', 'A\\\\B' => array('{$workDir}/lib', \$vendorDir . '/a/a/lib/'), 'A' => \$vendorDir . '/a/a/src/', ); EOF; $expectedClassmap = <<<EOF <?php // autoload_classmap.php generated by Composer \$vendorDir = dirname(__DIR__); \$baseDir = dirname(\$vendorDir); return array( 'A\\\\B\\\\C' => \$baseDir . '/lib/A/B/C.php', 'Foo\\\\Bar' => \$baseDir . '/src/classes.php', ); EOF; $this->generator->dump($this->config, $this->repository, $package, $this->im, 'composer', true, '_9'); $this->assertEquals($expectedNamespace, file_get_contents($this->vendorDir . '/composer/autoload_namespaces.php')); $this->assertEquals($expectedClassmap, file_get_contents($this->vendorDir . '/composer/autoload_classmap.php')); }