* Jordi Boggiano * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Composer\Test\Command; use Composer\Test\TestCase; use Generator; class InstallCommandTest extends TestCase { /** * @dataProvider errorCaseProvider * @param array $composerJson * @param array $command */ public function testInstallCommandErrors( array $composerJson, array $command, string $expected ): void { $this->initTempComposer($composerJson); $packages = [ self::getPackage('vendor/package', '1.2.3'), ]; $devPackages = [ self::getPackage('vendor/devpackage', '2.3.4'), ]; $this->createComposerLock($packages, $devPackages); $this->createInstalledJson($packages, $devPackages); $appTester = $this->getApplicationTester(); $appTester->run(array_merge(['command' => 'install'], $command)); self::assertSame(trim($expected), trim($appTester->getDisplay(true))); } public function errorCaseProvider(): Generator { yield 'it writes an error when the dev flag is passed' => [ [ 'repositories' => [], ], ['--dev' => true], <<You are using the deprecated option "--dev". It has no effect and will break in Composer 3. Installing dependencies from lock file (including require-dev) Verifying lock file contents can be installed on current platform. Nothing to install, update or remove Generating autoload files OUTPUT ]; yield 'it writes an error when no-suggest flag passed' => [ [ 'repositories' => [], ], ['--no-suggest' => true], <<You are using the deprecated option "--no-suggest". It has no effect and will break in Composer 3. Installing dependencies from lock file (including require-dev) Verifying lock file contents can be installed on current platform. Nothing to install, update or remove Generating autoload files OUTPUT ]; yield 'it writes an error when packages passed' => [ [ 'repositories' => [], ], ['packages' => ['vendor/package']], << [ [ 'repositories' => [], ], ['--no-install' => true], <<initTempComposer([ 'require' => [ 'root/req' => '1.*', ], 'require-dev' => [ 'root/another' => '1.*', ], ]); $rootReqPackage = self::getPackage('root/req'); $anotherPackage = self::getPackage('root/another'); // Set as a metapackage so that we can do the whole post-remove update & install process without Composer trying to download them (DownloadManager::getDownloaderForPackage). $rootReqPackage->setType('metapackage'); $anotherPackage->setType('metapackage'); $this->createComposerLock([$rootReqPackage], [$anotherPackage]); $appTester = $this->getApplicationTester(); $appTester->run(['command' => 'install', '--no-progress' => true]); self::assertSame('Installing dependencies from lock file (including require-dev) Verifying lock file contents can be installed on current platform. Package operations: 2 installs, 0 updates, 0 removals - Installing root/another (1.0.0) - Installing root/req (1.0.0) Generating autoload files', trim($appTester->getDisplay(true))); } public function testInstallFromEmptyVendorNoDev(): void { $this->initTempComposer([ 'require' => [ 'root/req' => '1.*', ], 'require-dev' => [ 'root/another' => '1.*', ], ]); $rootReqPackage = self::getPackage('root/req'); $anotherPackage = self::getPackage('root/another'); // Set as a metapackage so that we can do the whole post-remove update & install process without Composer trying to download them (DownloadManager::getDownloaderForPackage). $rootReqPackage->setType('metapackage'); $anotherPackage->setType('metapackage'); $this->createComposerLock([$rootReqPackage], [$anotherPackage]); $appTester = $this->getApplicationTester(); $appTester->run(['command' => 'install', '--no-progress' => true, '--no-dev' => true]); self::assertSame('Installing dependencies from lock file Verifying lock file contents can be installed on current platform. Package operations: 1 install, 0 updates, 0 removals - Installing root/req (1.0.0) Generating autoload files', trim($appTester->getDisplay(true))); } public function testInstallNewPackagesWithExistingPartialVendor(): void { $this->initTempComposer([ 'require' => [ 'root/req' => '1.*', 'root/another' => '1.*', ], ]); $rootReqPackage = self::getPackage('root/req'); $anotherPackage = self::getPackage('root/another'); // Set as a metapackage so that we can do the whole post-remove update & install process without Composer trying to download them (DownloadManager::getDownloaderForPackage). $rootReqPackage->setType('metapackage'); $anotherPackage->setType('metapackage'); $this->createComposerLock([$rootReqPackage, $anotherPackage], []); $this->createInstalledJson([$rootReqPackage], []); $appTester = $this->getApplicationTester(); $appTester->run(['command' => 'install', '--no-progress' => true]); self::assertSame('Installing dependencies from lock file (including require-dev) Verifying lock file contents can be installed on current platform. Package operations: 1 install, 0 updates, 0 removals - Installing root/another (1.0.0) Generating autoload files', trim($appTester->getDisplay(true))); } }