/**
  * @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);
 }
예제 #4
0
 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);
 }
예제 #6
0
 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;
 }
예제 #7
0
 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;
 }
예제 #8
0
 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);
         }
     }
 }
예제 #9
0
 /**
  * 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));
 }
예제 #13
0
 /**
  * @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;
 }
예제 #18
0
파일: Job.php 프로젝트: anime-db/anime-db
 /**
  * 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));
 }
예제 #20
0
 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');
 }
예제 #21
0
 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);
         }
     }
 }
예제 #22
0
 private function package($name, $version, $type)
 {
     $package = new Package($name, $version, 'not-important');
     $package->setType($type);
     return $package;
 }
예제 #23
0
 /**
  * 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);
 }
예제 #25
0
 /**
  * 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);
 }