/** * @dataProvider provideInstaller */ public function testInstaller(PackageInterface $rootPackage, $repositories, array $options) { $io = $this->getMock('Composer\\IO\\IOInterface'); $downloadManager = $this->getMock('Composer\\Downloader\\DownloadManager'); $config = $this->getMock('Composer\\Config'); $repositoryManager = new RepositoryManager($io, $config); $repositoryManager->setLocalRepository(new WritableRepositoryMock()); $repositoryManager->setLocalDevRepository(new WritableRepositoryMock()); if (!is_array($repositories)) { $repositories = array($repositories); } foreach ($repositories as $repository) { $repositoryManager->addRepository($repository); } $locker = $this->getMockBuilder('Composer\\Package\\Locker')->disableOriginalConstructor()->getMock(); $installationManager = new InstallationManagerMock(); $eventDispatcher = $this->getMockBuilder('Composer\\Script\\EventDispatcher')->disableOriginalConstructor()->getMock(); $autoloadGenerator = $this->getMock('Composer\\Autoload\\AutoloadGenerator'); $installer = new Installer($io, $config, clone $rootPackage, $downloadManager, $repositoryManager, $locker, $installationManager, $eventDispatcher, $autoloadGenerator); $result = $installer->run(); $this->assertTrue($result); $expectedInstalled = isset($options['install']) ? $options['install'] : array(); $expectedUpdated = isset($options['update']) ? $options['update'] : array(); $expectedUninstalled = isset($options['uninstall']) ? $options['uninstall'] : array(); $installed = $installationManager->getInstalledPackages(); $this->assertSame($expectedInstalled, $installed); $updated = $installationManager->getUpdatedPackages(); $this->assertSame($expectedUpdated, $updated); $uninstalled = $installationManager->getUninstalledPackages(); $this->assertSame($expectedUninstalled, $uninstalled); }
/** * Replace local repositories with InstalledArrayRepository instances * * This is to prevent any accidental modification of the existing repos on disk * * @param RepositoryManager $rm */ private function mockLocalRepositories(RepositoryManager $rm) { $packages = array_map(function ($p) { return clone $p; }, $rm->getLocalRepository()->getPackages()); foreach ($packages as $key => $package) { if ($package instanceof AliasPackage) { unset($packages[$key]); } } $rm->setLocalRepository(new InstalledArrayRepository($packages)); $packages = array_map(function ($p) { return clone $p; }, $rm->getLocalDevRepository()->getPackages()); foreach ($packages as $key => $package) { if ($package instanceof AliasPackage) { unset($packages[$key]); } } $rm->setLocalDevRepository(new InstalledArrayRepository($packages)); }
protected function addLocalRepository(RepositoryManager $rm, $vendorDir) { // TODO BC feature, remove after June 15th if (file_exists($vendorDir . '/.composer/installed.json')) { if (!is_dir($vendorDir . '/composer')) { mkdir($vendorDir . '/composer/', 0777, true); } rename($vendorDir . '/.composer/installed.json', $vendorDir . '/composer/installed.json'); } if (file_exists($vendorDir . '/.composer/installed_dev.json')) { if (!is_dir($vendorDir . '/composer')) { mkdir($vendorDir . '/composer/', 0777, true); } rename($vendorDir . '/.composer/installed_dev.json', $vendorDir . '/composer/installed_dev.json'); } if (file_exists($vendorDir . '/installed.json')) { if (!is_dir($vendorDir . '/composer')) { mkdir($vendorDir . '/composer/', 0777, true); } rename($vendorDir . '/installed.json', $vendorDir . '/composer/installed.json'); } if (file_exists($vendorDir . '/installed_dev.json')) { if (!is_dir($vendorDir . '/composer')) { mkdir($vendorDir . '/composer/', 0777, true); } rename($vendorDir . '/installed_dev.json', $vendorDir . '/composer/installed_dev.json'); } $rm->setLocalRepository(new Repository\InstalledFilesystemRepository(new JsonFile($vendorDir . '/composer/installed.json'))); $rm->setLocalDevRepository(new Repository\InstalledFilesystemRepository(new JsonFile($vendorDir . '/composer/installed_dev.json'))); }
/** * @param Repository\RepositoryManager $rm * @param string $vendorDir */ protected function addLocalRepository(RepositoryManager $rm, $vendorDir) { $rm->setLocalRepository(new Repository\InstalledFilesystemRepository(new JsonFile($vendorDir . '/composer/installed.json'))); $rm->setLocalDevRepository(new Repository\InstalledFilesystemRepository(new JsonFile($vendorDir . '/composer/installed_dev.json'))); }