From eafe13d5a5eae6b9c18b4f5a8a893b4964be73ea Mon Sep 17 00:00:00 2001 From: Volker Dusch Date: Sun, 19 Feb 2012 14:55:14 +0100 Subject: [PATCH] Create an impossible rule when trying to install something that doesn't exist. The rule isn't acted upon yet (hence the incomplete test) but it is there as a reminder that this case needs to be handled. --- src/Composer/DependencyResolver/Solver.php | 6 ++++++ .../Test/DependencyResolver/SolverTest.php | 16 ++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/Composer/DependencyResolver/Solver.php b/src/Composer/DependencyResolver/Solver.php index 4359f3102..a395ad969 100644 --- a/src/Composer/DependencyResolver/Solver.php +++ b/src/Composer/DependencyResolver/Solver.php @@ -964,6 +964,12 @@ class Solver foreach ($this->jobs as $job) { + if (empty($job['packages']) && $job['cmd'] == 'install') { + $this->addRule( + RuleSet::TYPE_JOB, + $this->createImpossibleRule(static::RULE_JOB_INSTALL, $job) + ); + } foreach ($job['packages'] as $package) { switch ($job['cmd']) { case 'install': diff --git a/tests/Composer/Test/DependencyResolver/SolverTest.php b/tests/Composer/Test/DependencyResolver/SolverTest.php index 18cb9f4a1..5ad7e90c3 100644 --- a/tests/Composer/Test/DependencyResolver/SolverTest.php +++ b/tests/Composer/Test/DependencyResolver/SolverTest.php @@ -55,6 +55,22 @@ class SolverTest extends TestCase )); } + public function testInstallNonExistingPackageFails() + { + $this->repo->addPackage($this->getPackage('A', '1.0')); + $this->reposComplete(); + + $this->request->install('B'); + + try { + $transaction = $this->solver->solve($this->request); + $this->markTestIncomplete('Reporting this failure is not implemented/working yet'); + //$this->fail('Unsolvable conflict did not resolve in exception.'); + } catch (SolverProblemsException $e) { + // @todo: assert problem properties + } + } + public function testSolverInstallWithDeps() { $this->repo->addPackage($packageA = $this->getPackage('A', '1.0'));