From e4c94dd41573f734b2dcdff9aed4e305b7c749d1 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Fri, 21 Oct 2011 14:44:24 +0200 Subject: [PATCH] Adding tests for the default policy specifying its desired behaviour --- .../DependencyResolver/DefaultPolicy.php | 3 +- .../DependencyResolver/PolicyInterface.php | 2 +- src/Composer/DependencyResolver/Solver.php | 2 +- .../DependencyResolver/DefaultPolicyTest.php | 101 ++++++++++++++++++ 4 files changed, 104 insertions(+), 4 deletions(-) create mode 100644 tests/Composer/Test/DependencyResolver/DefaultPolicyTest.php diff --git a/src/Composer/DependencyResolver/DefaultPolicy.php b/src/Composer/DependencyResolver/DefaultPolicy.php index 921c30f70..fb90dd4f0 100644 --- a/src/Composer/DependencyResolver/DefaultPolicy.php +++ b/src/Composer/DependencyResolver/DefaultPolicy.php @@ -63,9 +63,8 @@ class DefaultPolicy implements PolicyInterface return true; } - public function selectPreferedPackages(Solver $solver, Pool $pool, RepositoryInterface $installed, array $literals) + public function selectPreferedPackages(Pool $pool, RepositoryInterface $installed, array $literals) { - // prefer installed, newest version, recommended, highest priority repository, ... $newest = $this->selectNewestPackages($installed, $literals); $selected = array(); diff --git a/src/Composer/DependencyResolver/PolicyInterface.php b/src/Composer/DependencyResolver/PolicyInterface.php index 1a7184204..41929c2ce 100644 --- a/src/Composer/DependencyResolver/PolicyInterface.php +++ b/src/Composer/DependencyResolver/PolicyInterface.php @@ -25,5 +25,5 @@ interface PolicyInterface function versionCompare(PackageInterface $a, PackageInterface $b, $operator); function findUpdatePackages(Solver $solver, Pool $pool, RepositoryInterface $repo, PackageInterface $package, $allowAll); function installable(Solver $solver, Pool $pool, RepositoryInterface $repo, PackageInterface $package); - function selectPreferedPackages(Solver $solver, Pool $pool, RepositoryInterface $installed, array $literals); + function selectPreferedPackages(Pool $pool, RepositoryInterface $installed, array $literals); } diff --git a/src/Composer/DependencyResolver/Solver.php b/src/Composer/DependencyResolver/Solver.php index c21918262..baf7f5d30 100644 --- a/src/Composer/DependencyResolver/Solver.php +++ b/src/Composer/DependencyResolver/Solver.php @@ -1411,7 +1411,7 @@ class Solver private function selectAndInstall($level, array $decisionQueue, $disableRules, Rule $rule) { // choose best package to install from decisionQueue - $literals = $this->policy->selectPreferedPackages($this, $this->pool, $this->installed, $decisionQueue); + $literals = $this->policy->selectPreferedPackages($this->pool, $this->installed, $decisionQueue); $selectedLiteral = array_shift($literals); diff --git a/tests/Composer/Test/DependencyResolver/DefaultPolicyTest.php b/tests/Composer/Test/DependencyResolver/DefaultPolicyTest.php new file mode 100644 index 000000000..1558f14e4 --- /dev/null +++ b/tests/Composer/Test/DependencyResolver/DefaultPolicyTest.php @@ -0,0 +1,101 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Test\DependencyResolver; + +use Composer\Repository\ArrayRepository; +use Composer\DependencyResolver\DefaultPolicy; +use Composer\DependencyResolver\Pool; +use Composer\DependencyResolver\Literal; +use Composer\Package\MemoryPackage; +use Composer\Package\Link; +use Composer\Package\LinkConstraint\VersionConstraint; + +class DefaultPolicyTest extends \PHPUnit_Framework_TestCase +{ + protected $pool; + protected $repo; + protected $repoInstalled; + protected $request; + protected $policy; + + public function setUp() + { + $this->pool = new Pool; + $this->repo = new ArrayRepository; + $this->repoInstalled = new ArrayRepository; + + $this->policy = new DefaultPolicy; + } + + public function testSelectSingle() + { + $this->repo->addPackage($packageA = new MemoryPackage('A', '1.0')); + $this->pool->addRepository($this->repo); + + $literals = array(new Literal($packageA, true)); + $expected = array(new Literal($packageA, true)); + + $selected = $this->policy->selectPreferedPackages($this->pool, $this->repoInstalled, $literals); + + $this->assertEquals($expected, $selected); + } + + public function testSelectNewest() + { + $this->repo->addPackage($packageA1 = new MemoryPackage('A', '1.0')); + $this->repo->addPackage($packageA2 = new MemoryPackage('A', '2.0')); + $this->pool->addRepository($this->repo); + + $literals = array(new Literal($packageA1, true), new Literal($packageA2, true)); + $expected = array(new Literal($packageA2, true)); + + $selected = $this->policy->selectPreferedPackages($this->pool, $this->repoInstalled, $literals); + + $this->assertEquals($expected, $selected); + } + + public function testSelectInstalled() + { + $this->repo->addPackage($packageA = new MemoryPackage('A', '1.0')); + $this->repoInstalled->addPackage($packageAInstalled = new MemoryPackage('A', '1.0')); + $this->pool->addRepository($this->repo); + $this->pool->addRepository($this->repoInstalled); + + $literals = array(new Literal($packageA, true), new Literal($packageAInstalled, true)); + $expected = array(new Literal($packageAInstalled, true)); + + $selected = $this->policy->selectPreferedPackages($this->pool, $this->repoInstalled, $literals); + + $this->assertEquals($expected, $selected); + } + + public function testSelectLastRepo() + { + $this->markTestIncomplete(); + + $this->repoImportant = new ArrayRepository; + + $this->repo->addPackage($packageA = new MemoryPackage('A', '1.0')); + $this->repoImportant->addPackage($packageAImportant = new MemoryPackage('A', '1.0')); + + $this->pool->addRepository($this->repo); + $this->pool->addRepository($this->repoImportant); + + $literals = array(new Literal($packageA, true), new Literal($packageAImportant, true)); + $expected = array(new Literal($packageAImportant, true)); + + $selected = $this->policy->selectPreferedPackages($this->pool, $this->repoInstalled, $literals); + + $this->assertEquals($expected, $selected); + } +}