/** * @param string $type * @param string $targetDir * @param array $autoload * @return \Composer\Package\Package */ protected function createPackage($name, $type, array $autoload) { $package = new Package($name, 'dev-master', '9999999-dev'); $package->setType($type); $package->setAutoload($autoload); return $package; }
/** * testGetPackageBasePath * * @dataProvider dataForTestInstallPath */ public function testGetPackageBasePath($type, $path, $name, $version = '1.0.0') { $installer = new ThemeInstaller($this->io, $this->composer, $type); $package = new Package($name, $version, $version); $package->setType($type); $result = $installer->getPackageBasePath($package); $this->assertEquals($path, $result); }
/** * testInstallPath * * @dataProvider dataForTestInstallPath */ public function testInstallPath($type, $path, $name) { $installer = new CodeigniterInstaller($this->io, $this->composer); $package = new Package($name, '1.0.0', '1.0.0'); $package->setType($type); $result = $installer->getInstallPath($package); $this->assertEquals($path, $result); }
public function getInstalledPackages() { $fooPackage = new Package('acme/foo-bundle', 'dev-master', '9999999-dev'); $fooPackage->setAutoload(array('psr-0' => array('Acme\\FooBundle' => ''))); $fooPackage->setType('symfony-bundle'); $barPackage = new Package('acme/bar-bundle', 'dev-master', '9999999-dev'); $barPackage->setAutoload(array('psr-0' => array('Acme\\BarBundle' => 'src/'))); $barPackage->setType('symfony-bundle'); $fooBarPackage = new Package('acme/foobar-bundle', 'dev-master', '9999999-dev'); $fooBarPackage->setAutoload(array('psr-4' => array('Acme\\FooBarBundle\\' => ''))); $fooBarPackage->setType('symfony-bundle'); return array($fooPackage, $barPackage, $fooBarPackage); }
/** * testInstallPath * * @dataProvider dataForInstallPath */ public function testInstallPath($name, $type, $path, $expected) { $composer = new Composer(); $config = new Config(); $composer->setConfig($config); $repository = $this->getMock('Composer\\Repository\\InstalledRepositoryInterface'); $io = $this->getMock('Composer\\IO\\IOInterface'); $installer = new CustomInstaller($io, $composer); $package = new Package($name, '1.0.0', '1.0.0'); $package->setType($type); $consumerPackage = new RootPackage('foo/bar', '1.0.0', '1.0.0'); $composer->setPackage($consumerPackage); $consumerPackage->setExtra(array('custom-installer' => array($type => $path))); $result = $installer->getInstallPath($package); $this->assertEquals($expected, $result); }
public function dataPackages() { $metapackage = new Package('vendor/name', '1.0.0.0', '1.0'); $metapackage->setType('metapackage'); $package1 = new Package('vendor/name', '1.0.0.0', '1.0'); $package2 = new Package('vendor/name', 'dev-master', 'dev-master'); $package3 = new Package('othervendor/othername', '1.0.0.0', '1.0'); $package3->setProvides([new Link('', 'vendor/name')]); $data = []; $data['metapackage'] = [true, $metapackage, []]; $data['skipDev is true, but package is not'] = [false, $package1, ['skip-dev' => 1]]; $data['skipDev is true, package isDev'] = [true, $package2, ['skip-dev' => 1]]; $data['package in whitelist'] = [false, $package1, ['whitelist' => ['vendor/name']]]; $data['package not in whitelist'] = [true, $package1, ['whitelist' => ['othervendor/othername']]]; $data['package in blacklist'] = [true, $package1, ['blacklist' => ['vendor/name']]]; $data['package not in blacklist'] = [false, $package1, ['blacklist' => ['othervendor/othername']]]; $data['package provides a virtual package in blacklist'] = [true, $package3, ['blacklist' => ['vendor/name']]]; return $data; }
public function dataPackages() { $metapackage = new Package('vendor/name', '1.0.0.0', '1.0'); $metapackage->setType('metapackage'); $package1 = new Package('vendor/name', '1.0.0.0', '1.0'); $package2 = new Package('vendor/name', 'dev-master', 'dev-master'); $package3 = new Package('othervendor/othername', '1.0.0.0', '1.0'); $package3->setProvides(array(new Link('', 'vendor/name'))); $data = array(); $data['metapackage'] = array(true, $metapackage, array()); $data['skipDev is true, but package is not'] = array(false, $package1, array('skip-dev' => 1)); $data['skipDev is true, package isDev'] = array(true, $package2, array('skip-dev' => 1)); $data['package in whitelist'] = array(false, $package1, array('whitelist' => array('vendor/name'))); $data['package not in whitelist'] = array(true, $package1, array('whitelist' => array('othervendor/othername'))); $data['package in blacklist'] = array(true, $package1, array('blacklist' => array('vendor/name'))); $data['package not in blacklist'] = array(false, $package1, array('blacklist' => array('othervendor/othername'))); $data['package provides a virtual package in blacklist'] = array(true, $package3, array('blacklist' => array('vendor/name'))); return $data; }
private function resolvePackageDependencies($repository, $packages, $packageName) { $config = $packages[$packageName]; foreach ($config['deps'] as $dependencyName) { if ($dependencyName === 'vendor/php' || strpos($dependencyName, 'vendor/ext-') === 0 || strpos($dependencyName, 'vendor/lib-') === 0) { continue; } if (!isset($packages[$dependencyName])) { throw new \RuntimeException("Requiring non existant package '" . $dependencyName . "' in '" . $packageName . "'."); } $dependency = $packages[$dependencyName]; $package = new Package($dependency['path'], "@stable", "@stable"); $package->setType('fiddler'); if (isset($dependency['autoload']) && is_array($dependency['autoload'])) { $package->setAutoload($dependency['autoload']); } if (!$repository->hasPackage($package)) { $repository->addPackage($package); $this->resolvePackageDependencies($repository, $packages, $dependencyName); } } }
/** * testGetCakePHPInstallPathException * * @return void * * @expectedException \InvalidArgumentException */ public function testGetCakePHPInstallPathException() { $installer = new Installer($this->io, $this->composer); $package = new Package('shama/ftp', '1.0.0', '1.0.0'); $package->setType('cakephp-whoops'); $result = $installer->getInstallPath($package); }
/** * @param array $releases * @param string $connectPackage * @return RepositoryInterface */ private function addPackages(array $releases, $connectPackage) { return new ArrayRepository(array_map(function ($release) use($connectPackage) { $distUrl = sprintf($this->distUrlFormat, $connectPackage, $release, $connectPackage, $release); $package = new Package(strtolower($connectPackage), $release, $release); $package->setDistUrl($distUrl); $package->setDistType('tar'); $package->setType('magento-module'); $package->setExtra(['package-xml' => "package.xml"]); return $package; }, $releases)); }
public function createPackage($name, $ns, $type = 'symfony-bundle') { $package = new Package($name, '1.0.0', '1.0.0'); $package->setType($type); $package->setAutoload(['psr-4' => [$ns => '']]); return $package; }
/** * @param array $releases * @param string $connectPackage * @param VersionParser $versionParser * @return RepositoryInterface */ private function addPackages(array $releases, $connectPackage, VersionParser $versionParser) { $releases = array_filter($releases, function ($release) use($versionParser) { try { $versionParser->normalize($release); } catch (UnexpectedValueException $e) { $this->writeVerbose(sprintf('Version "%s" is not valid. Skipping this version.', $release)); return false; } return true; }); return new ArrayRepository(array_map(function ($release) use($connectPackage, $versionParser) { $distUrl = sprintf($this->distUrlFormat, $connectPackage, $release, $connectPackage, $release); $release = $versionParser->normalize($release); $package = new Package(strtolower($connectPackage), $release, $release); $package->setDistUrl($distUrl); $package->setDistType('tar'); $package->setType('magento-module'); $package->setExtra(['package-xml' => "package.xml"]); return $package; }, $releases)); }
/** * @param string $newName * @param array $package * @return Package */ protected static function bindPackageValues($newName, array $package) { $new = new Package($newName, $package['version'], $package['version']); $new->setType('dist'); if (isset($package['bin'])) { $new->setBinaries($package['bin']); } if (isset($package['dist']['type'])) { $new->setDistType($package['dist']['type']); } if (isset($package['dist']['url'])) { $new->setDistUrl($package['dist']['url']); } if (isset($package['excludes'])) { $new->setArchiveExcludes($package['excludes']); } return $new; }
/** * testGetMultipleWebrootPackagesException * * @return void * * @expectedException \InvalidArgumentException */ public function testGetMultipleWebrootPackagesException() { $installer = new WebrootInstaller($this->io, $this->composer); $package1 = new Package('fancyguy/webroot-package', '1.0.0', '1.0.0'); $package1->setType('webroot'); $package2 = new Package('fancyguy/another-webroot-package', '1.0.0', '1.0.0'); $package2->setType('webroot'); $consumerPackage = new RootPackage('foo/bar', '1.0.0', '1.0.0'); $this->composer->setPackage($consumerPackage); $consumerPackage->setExtra(array('webroot-dir' => 'content', 'webroot-package' => 'fancyguy/webroot-package')); $consumerPackage->setRequires(array($package1, $package2)); $result1 = $installer->getInstallPath($package1); $result2 = $installer->getInstallPath($package2); }
public function createCorePackage($name = 'magento/core-package') { $package = new Package($name, "1.0.0", $name); $package->setType('magento-core'); return $package; }
public function testUninstall() { $this->fs->ensureDirectoryExists($this->pluginDir); $installer = new GingerInstaller($this->io, $this->composer); $repository = new ComposerRepositoryMock(); $package = new Package('gingerwfms/wf-configurator-backend', '1.0.0', '1.0.0'); $package->setType('ginger-backend-plugin'); $package->setExtra(array('plugin-namespace' => 'WfConfiguratorBackend')); $repository->addPackage($package); $gate = new Gate(); $mockBus = new CqrsBusMock(); $pluginNamespace = ''; $pluginName = ''; $pluginType = ''; $pluginVersion = ''; $mockBus->mapCommand('GingerPluginInstaller\\Cqrs\\UninstallPluginCommand', function (UninstallPluginCommand $command) use(&$pluginNamespace, &$pluginName, &$pluginType, &$pluginVersion) { $pluginNamespace = $command->getPluginNamespace(); $pluginName = $command->getPluginName(); $pluginType = $command->getPluginType(); $pluginVersion = $command->getPluginVersion(); }); $gate->attach($mockBus); $gate->setDefaultBusName($mockBus->getName()); Bootstrap::getServiceManager()->setAllowOverride(true); Bootstrap::getServiceManager()->setService('malocher.cqrs.gate', $gate); $installer->uninstall($repository, $package); $this->assertSame('WfConfiguratorBackend', $pluginNamespace); $this->assertSame('gingerwfms/wf-configurator-backend', $pluginName); $this->assertSame('ginger-backend-plugin', $pluginType); $this->assertSame('1.0.0', $pluginVersion); }
/** * @param string $name * @param string $theme * @param array $extra * @param bool $createAssets * @param bool $addGlob * @param bool $addFiles * @return Package */ public function createStaticPackage($name = 'some/static', $theme = 'package/theme', $extra = array(), $createAssets = true, $addGlob = false, $addFiles = false) { $package = new Package($name, "1.0.0", $name); $package->setExtra($extra); $package->setType('static'); $rootPackageExtra = array_merge_recursive($this->composer->getPackage()->getExtra(), array('static-map' => array($name => array($theme => array(array('src' => 'assets', 'dest' => 'assets')))))); $this->composer->getPackage()->setExtra($rootPackageExtra); if ($createAssets) { $this->createStaticPackageAssets($package); } if ($addGlob) { $this->addGlobFiles($package); } if ($addFiles) { $this->addStandardFiles($package); } return $package; }
/** * Get a simple copy of the package. * * @return Package */ public function getPackageCopy() { $copy = new Package($this->package->getName(), $this->package->getVersion(), $this->package->getPrettyVersion()); $copy->setType($this->package->getType()); $copy->setExtra($this->package->getExtra()); return $copy; }
/** * @dataProvider packageBasePathFormatProvider */ public function testPackageBasePathFormat($type, $package, $basePath) { $package = new Package($package, '1.0.0', '1.0.0'); $package->setType($type); $this->assertEquals(getcwd() . '/' . $basePath, $this->installer->getInstallPath($package)); }
public function testDeterminePlugins() { $plugin1 = new Package('cakephp/the-thing', '1.0', '1.0'); $plugin1->setType('cakephp-plugin'); $plugin1->setAutoload(['psr-4' => ['TheThing' => 'src/']]); $plugin2 = new Package('cakephp/princess', '1.0', '1.0'); $plugin2->setType('cakephp-plugin'); $plugin2->setAutoload(['psr-4' => ['Princess' => 'src/']]); $packages = [$plugin1, new Package('SomethingElse', '1.0', '1.0'), $plugin2]; $return = PluginInstaller::determinePlugins($packages, $this->path . '/doesnt-exist', $this->path . '/vendor'); $expected = ['Princess' => $this->path . '/vendor/cakephp/princess', 'TheThing' => $this->path . '/vendor/cakephp/the-thing']; $this->assertSame($expected, $return, 'Only composer-loaded plugins should be listed'); $return = PluginInstaller::determinePlugins($packages, $this->path . '/plugins', $this->path . '/vendor'); $expected = ['Fee' => $this->path . '/plugins/Fee', 'Foe' => $this->path . '/plugins/Foe', 'Foo' => $this->path . '/plugins/Foo', 'Fum' => $this->path . '/plugins/Fum', 'Princess' => $this->path . '/vendor/cakephp/princess', 'TheThing' => $this->path . '/vendor/cakephp/the-thing']; $this->assertSame($expected, $return, 'Composer and application plugins should be listed'); }
private function resolvePackageDependencies($repository, $packages, $packageName) { $config = $packages[$packageName]; $dependencies = $config['deps']; if (isset($config['deps-dev'])) { $dependencies = array_merge($dependencies, $config['deps-dev']); } foreach ($dependencies as $dependencyName) { $isVendor = strpos($dependencyName, 'vendor/') === 0; if ($dependencyName === 'vendor/php' || strpos($dependencyName, 'vendor/ext-') === 0 || strpos($dependencyName, 'vendor/lib-') === 0) { continue; // Meta-dependencies that composer checks } if (!isset($packages[$dependencyName])) { if ($dependencyName == 'vendor/composer-plugin-api') { continue; } if ($isVendor) { throw new \RuntimeException("Requiring non-existent composer-package '" . $dependencyName . "' in '" . $packageName . "'. Please ensure it is present in composer.json."); } else { throw new \RuntimeException("Requiring non-existent repo-module '" . $dependencyName . "' in '" . $packageName . "'. Please check that the subdirectory exists, or append \"vendor/\" to reference a composer-package."); } } $dependency = $packages[$dependencyName]; $package = new Package($dependency['path'], "@stable", "@stable"); $package->setType('monorepo'); if (isset($dependency['autoload']) && is_array($dependency['autoload'])) { $package->setAutoload($dependency['autoload']); } if (isset($dependency['bin']) && is_array($dependency['bin'])) { $package->setBinaries($dependency['bin']); } if (!$repository->hasPackage($package)) { $repository->addPackage($package); $this->resolvePackageDependencies($repository, $packages, $dependencyName); } } }
private function package($name, $version, $type) { $package = new Package($name, $version, 'not-important'); $package->setType($type); return $package; }
/** * testTypo3Inflection */ public function testTypo3Inflection() { $installer = new Installer($this->io, $this->composer); $package = new Package('typo3/fluid', '1.0.0', '1.0.0'); $package->setAutoload(array('psr-0' => array('TYPO3\\Fluid' => 'Classes'))); $package->setType('typo3-flow-package'); $result = $installer->getInstallPath($package); $this->assertEquals('Packages/Application/TYPO3.Fluid/', $result); }
public function testWordPressThemeCustom() { $themeName = 'theme-name'; $packageName = "wpackagist/{$themeName}"; $installer = new Installer($this->io, $this->composer); $package = new Package($packageName, '1.0.0', '1.0.0'); $package->setType('wordpress-theme'); $base = 'base'; $package->setExtra(['wordpress-base' => $base]); $path = $installer->getInstallPath($package); $expected = "{$base}/wp-content/themes/{$themeName}"; $this->assertEquals($expected, $path); }
/** * testNoVendorName */ public function testNoVendorName() { $installer = new Installer($this->io, $this->composer); $package = new Package('sfPhpunitPlugin', '1.0.0', '1.0.0'); $package->setType('symfony1-plugin'); $result = $installer->getInstallPath($package); $this->assertEquals('plugins/sfPhpunitPlugin/', $result); }
/** * testPackageExtraOptions * * @dataProvider dataForTestPackageExtraOptions */ public function testPackageExtraOptions($type, $path, $name, array $extra) { $installer = new BundleInstaller($this->io, $this->composer); $package = new Package($name, '1.0.0', '1.0.0'); $package->setType($type); $package->setExtra($extra); $result = $installer->getInstallPath($package); $this->assertEquals($path, $result); }