1
0
Fork 0
mirror of https://github.com/composer/composer synced 2025-05-09 08:32:56 +00:00

Merge pull request #7625 from naderman/repository-set

Separate RepositorySet from Package Pool, load only metadata of packages directly required
This commit is contained in:
Nils Adermann 2018-09-12 14:22:01 +02:00 committed by GitHub
commit 5c491ecc9b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
43 changed files with 826 additions and 507 deletions

View file

@ -18,13 +18,15 @@ use Composer\DependencyResolver\DefaultPolicy;
use Composer\DependencyResolver\Pool;
use Composer\Package\Link;
use Composer\Package\AliasPackage;
use Composer\Repository\RepositorySet;
use Composer\Semver\Constraint\Constraint;
use Composer\TestCase;
use http\Env\Request;
class DefaultPolicyTest extends TestCase
{
/** @var Pool */
protected $pool;
/** @var RepositorySet */
protected $repositorySet;
/** @var ArrayRepository */
protected $repo;
/** @var ArrayRepository */
@ -34,7 +36,7 @@ class DefaultPolicyTest extends TestCase
public function setUp()
{
$this->pool = new Pool('dev');
$this->repositorySet = new RepositorySet(array(), 'dev');
$this->repo = new ArrayRepository;
$this->repoInstalled = new ArrayRepository;
@ -44,12 +46,14 @@ class DefaultPolicyTest extends TestCase
public function testSelectSingle()
{
$this->repo->addPackage($packageA = $this->getPackage('A', '1.0'));
$this->pool->addRepository($this->repo);
$this->repositorySet->addRepository($this->repo);
$pool = $this->repositorySet->createPoolForPackage('A');
$literals = array($packageA->getId());
$expected = array($packageA->getId());
$selected = $this->policy->selectPreferredPackages($this->pool, array(), $literals);
$selected = $this->policy->selectPreferredPackages($pool, array(), $literals);
$this->assertSame($expected, $selected);
}
@ -58,12 +62,14 @@ class DefaultPolicyTest extends TestCase
{
$this->repo->addPackage($packageA1 = $this->getPackage('A', '1.0'));
$this->repo->addPackage($packageA2 = $this->getPackage('A', '2.0'));
$this->pool->addRepository($this->repo);
$this->repositorySet->addRepository($this->repo);
$pool = $this->repositorySet->createPoolForPackage('A');
$literals = array($packageA1->getId(), $packageA2->getId());
$expected = array($packageA2->getId());
$selected = $this->policy->selectPreferredPackages($this->pool, array(), $literals);
$selected = $this->policy->selectPreferredPackages($pool, array(), $literals);
$this->assertSame($expected, $selected);
}
@ -72,12 +78,14 @@ class DefaultPolicyTest extends TestCase
{
$this->repo->addPackage($packageA1 = $this->getPackage('A', '1.0.0'));
$this->repo->addPackage($packageA2 = $this->getPackage('A', '1.0.1-alpha'));
$this->pool->addRepository($this->repo);
$this->repositorySet->addRepository($this->repo);
$pool = $this->repositorySet->createPoolForPackage('A');
$literals = array($packageA1->getId(), $packageA2->getId());
$expected = array($packageA2->getId());
$selected = $this->policy->selectPreferredPackages($this->pool, array(), $literals);
$selected = $this->policy->selectPreferredPackages($pool, array(), $literals);
$this->assertSame($expected, $selected);
}
@ -86,13 +94,15 @@ class DefaultPolicyTest extends TestCase
{
$this->repo->addPackage($packageA1 = $this->getPackage('A', '1.0.0'));
$this->repo->addPackage($packageA2 = $this->getPackage('A', '1.0.1-alpha'));
$this->pool->addRepository($this->repo);
$this->repositorySet->addRepository($this->repo);
$pool = $this->repositorySet->createPoolForPackage('A');
$literals = array($packageA1->getId(), $packageA2->getId());
$expected = array($packageA1->getId());
$policy = new DefaultPolicy(true);
$selected = $policy->selectPreferredPackages($this->pool, array(), $literals);
$selected = $policy->selectPreferredPackages($pool, array(), $literals);
$this->assertSame($expected, $selected);
}
@ -101,12 +111,14 @@ class DefaultPolicyTest extends TestCase
{
$this->repo->addPackage($packageA1 = $this->getPackage('A', 'dev-foo'));
$this->repo->addPackage($packageA2 = $this->getPackage('A', '1.0.0'));
$this->pool->addRepository($this->repo);
$this->repositorySet->addRepository($this->repo);
$pool = $this->repositorySet->createPoolForPackage('A');
$literals = array($packageA1->getId(), $packageA2->getId());
$expected = array($packageA2->getId());
$selected = $this->policy->selectPreferredPackages($this->pool, array(), $literals);
$selected = $this->policy->selectPreferredPackages($pool, array(), $literals);
$this->assertSame($expected, $selected);
}
@ -115,13 +127,15 @@ class DefaultPolicyTest extends TestCase
{
$this->repo->addPackage($packageA = $this->getPackage('A', '2.0'));
$this->repoInstalled->addPackage($packageAInstalled = $this->getPackage('A', '1.0'));
$this->pool->addRepository($this->repoInstalled);
$this->pool->addRepository($this->repo);
$this->repositorySet->addRepository($this->repoInstalled);
$this->repositorySet->addRepository($this->repo);
$pool = $this->repositorySet->createPoolForPackage('A');
$literals = array($packageA->getId(), $packageAInstalled->getId());
$expected = array($packageA->getId());
$selected = $this->policy->selectPreferredPackages($this->pool, $this->mapFromRepo($this->repoInstalled), $literals);
$selected = $this->policy->selectPreferredPackages($pool, $this->mapFromRepo($this->repoInstalled), $literals);
$this->assertSame($expected, $selected);
}
@ -133,14 +147,16 @@ class DefaultPolicyTest extends TestCase
$this->repo->addPackage($packageA = $this->getPackage('A', '1.0'));
$otherRepository->addPackage($packageAImportant = $this->getPackage('A', '1.0'));
$this->pool->addRepository($this->repoInstalled);
$this->pool->addRepository($otherRepository);
$this->pool->addRepository($this->repo);
$this->repositorySet->addRepository($this->repoInstalled);
$this->repositorySet->addRepository($otherRepository);
$this->repositorySet->addRepository($this->repo);
$pool = $this->repositorySet->createPoolForPackage('A');
$literals = array($packageA->getId(), $packageAImportant->getId());
$expected = array($packageAImportant->getId());
$selected = $this->policy->selectPreferredPackages($this->pool, array(), $literals);
$selected = $this->policy->selectPreferredPackages($pool, array(), $literals);
$this->assertSame($expected, $selected);
}
@ -155,21 +171,25 @@ class DefaultPolicyTest extends TestCase
$repo2->addPackage($package3 = $this->getPackage('A', '1.1'));
$repo2->addPackage($package4 = $this->getPackage('A', '1.2'));
$this->pool->addRepository($repo1);
$this->pool->addRepository($repo2);
$this->repositorySet->addRepository($repo1);
$this->repositorySet->addRepository($repo2);
$pool = $this->repositorySet->createPoolForPackage('A');
$literals = array($package1->getId(), $package2->getId(), $package3->getId(), $package4->getId());
$expected = array($package2->getId());
$selected = $this->policy->selectPreferredPackages($this->pool, array(), $literals);
$selected = $this->policy->selectPreferredPackages($pool, array(), $literals);
$this->assertSame($expected, $selected);
$this->pool = new Pool('dev');
$this->pool->addRepository($repo2);
$this->pool->addRepository($repo1);
$this->repositorySet = new RepositorySet(array(), 'dev');
$this->repositorySet->addRepository($repo2);
$this->repositorySet->addRepository($repo1);
$pool = $this->repositorySet->createPoolForPackage('A');
$expected = array($package4->getId());
$selected = $this->policy->selectPreferredPackages($this->pool, array(), $literals);
$selected = $this->policy->selectPreferredPackages($pool, array(), $literals);
$this->assertSame($expected, $selected);
}
@ -186,11 +206,13 @@ class DefaultPolicyTest extends TestCase
$repoImportant->addPackage($packageA2AliasImportant = new AliasPackage($packageA2Important, '2.1.9999999.9999999-dev', '2.1.x-dev'));
$packageAAliasImportant->setRootPackageAlias(true);
$this->pool->addRepository($this->repoInstalled);
$this->pool->addRepository($repoImportant);
$this->pool->addRepository($this->repo);
$this->repositorySet->addRepository($this->repoInstalled);
$this->repositorySet->addRepository($repoImportant);
$this->repositorySet->addRepository($this->repo);
$packages = $this->pool->whatProvides('a', new Constraint('=', '2.1.9999999.9999999-dev'));
$pool = $this->repositorySet->createPoolForPackage('A');
$packages = $pool->whatProvides('a', new Constraint('=', '2.1.9999999.9999999-dev'));
$literals = array();
foreach ($packages as $package) {
$literals[] = $package->getId();
@ -198,7 +220,7 @@ class DefaultPolicyTest extends TestCase
$expected = array($packageAAliasImportant->getId());
$selected = $this->policy->selectPreferredPackages($this->pool, array(), $literals);
$selected = $this->policy->selectPreferredPackages($pool, array(), $literals);
$this->assertSame($expected, $selected);
}
@ -211,12 +233,14 @@ class DefaultPolicyTest extends TestCase
$packageA->setProvides(array(new Link('A', 'X', new Constraint('==', '1.0'), 'provides')));
$packageB->setProvides(array(new Link('B', 'X', new Constraint('==', '1.0'), 'provides')));
$this->pool->addRepository($this->repo);
$this->repositorySet->addRepository($this->repo);
$pool = $this->repositorySet->createPoolForPackages(array('A', 'B'));
$literals = array($packageA->getId(), $packageB->getId());
$expected = $literals;
$selected = $this->policy->selectPreferredPackages($this->pool, array(), $literals);
$selected = $this->policy->selectPreferredPackages($pool, array(), $literals);
$this->assertSame($expected, $selected);
}
@ -228,12 +252,14 @@ class DefaultPolicyTest extends TestCase
$packageB->setReplaces(array(new Link('B', 'A', new Constraint('==', '1.0'), 'replaces')));
$this->pool->addRepository($this->repo);
$this->repositorySet->addRepository($this->repo);
$pool = $this->repositorySet->createPoolForPackages(array('A', 'B'));
$literals = array($packageA->getId(), $packageB->getId());
$expected = $literals;
$selected = $this->policy->selectPreferredPackages($this->pool, array(), $literals);
$selected = $this->policy->selectPreferredPackages($pool, array(), $literals);
$this->assertSame($expected, $selected);
}
@ -247,12 +273,14 @@ class DefaultPolicyTest extends TestCase
$packageA->setReplaces(array(new Link('vendor-a/replacer', 'vendor-a/package', new Constraint('==', '1.0'), 'replaces')));
$packageB->setReplaces(array(new Link('vendor-b/replacer', 'vendor-a/package', new Constraint('==', '1.0'), 'replaces')));
$this->pool->addRepository($this->repo);
$this->repositorySet->addRepository($this->repo);
$pool = $this->repositorySet->createPoolForPackages(array('vendor-a/replacer', 'vendor-b/replacer'));
$literals = array($packageA->getId(), $packageB->getId());
$expected = $literals;
$selected = $this->policy->selectPreferredPackages($this->pool, array(), $literals, 'vendor-a/package');
$selected = $this->policy->selectPreferredPackages($pool, array(), $literals, 'vendor-a/package');
$this->assertEquals($expected, $selected);
// test with reversed order in repo
@ -260,13 +288,15 @@ class DefaultPolicyTest extends TestCase
$repo->addPackage($packageA = clone $packageA);
$repo->addPackage($packageB = clone $packageB);
$pool = new Pool('dev');
$pool->addRepository($this->repo);
$repositorySet = new RepositorySet(array(), 'dev');
$repositorySet->addRepository($this->repo);
$pool = $this->repositorySet->createPoolForPackages(array('vendor-a/replacer', 'vendor-b/replacer'));
$literals = array($packageA->getId(), $packageB->getId());
$expected = $literals;
$selected = $this->policy->selectPreferredPackages($this->pool, array(), $literals, 'vendor-a/package');
$selected = $this->policy->selectPreferredPackages($pool, array(), $literals, 'vendor-a/package');
$this->assertSame($expected, $selected);
}
@ -286,12 +316,14 @@ class DefaultPolicyTest extends TestCase
$this->repo->addPackage($packageA1 = $this->getPackage('A', '1.0'));
$this->repo->addPackage($packageA2 = $this->getPackage('A', '2.0'));
$this->pool->addRepository($this->repo);
$this->repositorySet->addRepository($this->repo);
$pool = $this->repositorySet->createPoolForPackage('A');
$literals = array($packageA1->getId(), $packageA2->getId());
$expected = array($packageA1->getId());
$selected = $policy->selectPreferredPackages($this->pool, array(), $literals);
$selected = $policy->selectPreferredPackages($pool, array(), $literals);
$this->assertSame($expected, $selected);
}

View file

@ -21,91 +21,26 @@ class PoolTest extends TestCase
{
public function testPool()
{
$pool = new Pool;
$repo = new ArrayRepository;
$pool = $this->createPool();
$package = $this->getPackage('foo', '1');
$repo->addPackage($package);
$pool->addRepository($repo);
$pool->setPackages(array($package));
$this->assertEquals(array($package), $pool->whatProvides('foo'));
$this->assertEquals(array($package), $pool->whatProvides('foo'));
}
public function testPoolIgnoresIrrelevantPackages()
{
$pool = new Pool('stable', array('bar' => BasePackage::STABILITY_BETA));
$repo = new ArrayRepository;
$repo->addPackage($package = $this->getPackage('bar', '1'));
$repo->addPackage($betaPackage = $this->getPackage('bar', '1-beta'));
$repo->addPackage($alphaPackage = $this->getPackage('bar', '1-alpha'));
$repo->addPackage($package2 = $this->getPackage('foo', '1'));
$repo->addPackage($rcPackage2 = $this->getPackage('foo', '1rc'));
$pool->addRepository($repo);
$this->assertEquals(array($package, $betaPackage), $pool->whatProvides('bar'));
$this->assertEquals(array($package2), $pool->whatProvides('foo'));
}
/**
* @expectedException \RuntimeException
*/
public function testGetPriorityForNotRegisteredRepository()
{
$pool = new Pool;
$repository = new ArrayRepository;
$pool->getPriority($repository);
}
public function testGetPriorityWhenRepositoryIsRegistered()
{
$pool = new Pool;
$firstRepository = new ArrayRepository;
$pool->addRepository($firstRepository);
$secondRepository = new ArrayRepository;
$pool->addRepository($secondRepository);
$firstPriority = $pool->getPriority($firstRepository);
$secondPriority = $pool->getPriority($secondRepository);
$this->assertEquals(0, $firstPriority);
$this->assertEquals(-1, $secondPriority);
}
public function testWhatProvidesSamePackageForDifferentRepositories()
{
$pool = new Pool;
$firstRepository = new ArrayRepository;
$secondRepository = new ArrayRepository;
$firstPackage = $this->getPackage('foo', '1');
$secondPackage = $this->getPackage('foo', '1');
$thirdPackage = $this->getPackage('foo', '2');
$firstRepository->addPackage($firstPackage);
$secondRepository->addPackage($secondPackage);
$secondRepository->addPackage($thirdPackage);
$pool->addRepository($firstRepository);
$pool->addRepository($secondRepository);
$this->assertEquals(array($firstPackage, $secondPackage, $thirdPackage), $pool->whatProvides('foo'));
}
public function testWhatProvidesPackageWithConstraint()
{
$pool = new Pool;
$repository = new ArrayRepository;
$pool = $this->createPool();
$firstPackage = $this->getPackage('foo', '1');
$secondPackage = $this->getPackage('foo', '2');
$repository->addPackage($firstPackage);
$repository->addPackage($secondPackage);
$pool->addRepository($repository);
$pool->setPackages(array(
$firstPackage,
$secondPackage,
));
$this->assertEquals(array($firstPackage, $secondPackage), $pool->whatProvides('foo'));
$this->assertEquals(array($secondPackage), $pool->whatProvides('foo', $this->getVersionConstraint('==', '2')));
@ -113,20 +48,23 @@ class PoolTest extends TestCase
public function testPackageById()
{
$pool = new Pool;
$repository = new ArrayRepository;
$pool = $this->createPool();
$package = $this->getPackage('foo', '1');
$repository->addPackage($package);
$pool->addRepository($repository);
$pool->setPackages(array($package));
$this->assertSame($package, $pool->packageById(1));
}
public function testWhatProvidesWhenPackageCannotBeFound()
{
$pool = new Pool;
$pool = $this->createPool();
$this->assertEquals(array(), $pool->whatProvides('foo'));
}
protected function createPool()
{
return new Pool(array('stable' => BasePackage::STABILITY_STABLE));
}
}

View file

@ -17,6 +17,7 @@ use Composer\DependencyResolver\Rule;
use Composer\DependencyResolver\RuleSet;
use Composer\DependencyResolver\RuleSetIterator;
use Composer\DependencyResolver\Pool;
use Composer\Package\BasePackage;
use PHPUnit\Framework\TestCase;
class RuleSetIteratorTest extends TestCase
@ -26,7 +27,7 @@ class RuleSetIteratorTest extends TestCase
protected function setUp()
{
$this->pool = new Pool;
$this->pool = new Pool(array('stable' => BasePackage::STABILITY_STABLE));
$this->rules = array(
RuleSet::TYPE_JOB => array(

View file

@ -16,18 +16,12 @@ use Composer\DependencyResolver\GenericRule;
use Composer\DependencyResolver\Rule;
use Composer\DependencyResolver\RuleSet;
use Composer\DependencyResolver\Pool;
use Composer\Package\BasePackage;
use Composer\Repository\ArrayRepository;
use Composer\TestCase;
class RuleSetTest extends TestCase
{
protected $pool;
public function setUp()
{
$this->pool = new Pool;
}
public function testAdd()
{
$rules = array(
@ -145,9 +139,11 @@ class RuleSetTest extends TestCase
public function testPrettyString()
{
$repo = new ArrayRepository;
$repo->addPackage($p = $this->getPackage('foo', '2.1'));
$this->pool->addRepository($repo);
$pool = new Pool(array('stable' => BasePackage::STABILITY_STABLE));
$pool->setPackages(array(
$p = $this->getPackage('foo', '2.1'),
));
$p->setId(1);
$ruleSet = new RuleSet;
$literal = $p->getId();
@ -155,7 +151,7 @@ class RuleSetTest extends TestCase
$ruleSet->add($rule, RuleSet::TYPE_JOB);
$this->assertContains('JOB : Install command rule (install foo 2.1)', $ruleSet->getPrettyString($this->pool));
$this->assertContains('JOB : Install command rule (install foo 2.1)', $ruleSet->getPrettyString($pool));
}
private function getRuleMock()

View file

@ -16,18 +16,12 @@ use Composer\DependencyResolver\GenericRule;
use Composer\DependencyResolver\Rule;
use Composer\DependencyResolver\RuleSet;
use Composer\DependencyResolver\Pool;
use Composer\Package\BasePackage;
use Composer\Repository\ArrayRepository;
use Composer\TestCase;
class RuleTest extends TestCase
{
protected $pool;
public function setUp()
{
$this->pool = new Pool;
}
public function testGetHash()
{
$rule = new GenericRule(array(123), Rule::RULE_JOB_INSTALL, null);
@ -99,13 +93,16 @@ class RuleTest extends TestCase
public function testPrettyString()
{
$repo = new ArrayRepository;
$repo->addPackage($p1 = $this->getPackage('foo', '2.1'));
$repo->addPackage($p2 = $this->getPackage('baz', '1.1'));
$this->pool->addRepository($repo);
$pool = new Pool(array('stable' => BasePackage::STABILITY_STABLE));
$pool->setPackages(array(
$p1 = $this->getPackage('foo', '2.1'),
$p2 = $this->getPackage('baz', '1.1'),
));
$p1->setId(1);
$p2->setId(2);
$rule = new GenericRule(array($p1->getId(), -$p2->getId()), Rule::RULE_JOB_INSTALL, null);
$this->assertEquals('Install command rule (don\'t install baz 1.1|install foo 2.1)', $rule->getPrettyString($this->pool));
$this->assertEquals('Install command rule (don\'t install baz 1.1|install foo 2.1)', $rule->getPrettyString($pool));
}
}

View file

@ -20,26 +20,28 @@ use Composer\DependencyResolver\Request;
use Composer\DependencyResolver\Solver;
use Composer\DependencyResolver\SolverProblemsException;
use Composer\Package\Link;
use Composer\Repository\InstalledArrayRepository;
use Composer\Repository\RepositorySet;
use Composer\TestCase;
use Composer\Semver\Constraint\MultiConstraint;
class SolverTest extends TestCase
{
protected $pool;
protected $repoSet;
protected $repo;
protected $repoInstalled;
protected $request;
protected $policy;
protected $solver;
public function setUp()
{
$this->pool = new Pool;
$this->repoSet = new RepositorySet(array());
$this->repo = new ArrayRepository;
$this->repoInstalled = new ArrayRepository;
$this->repoInstalled = new InstalledArrayRepository;
$this->request = new Request($this->pool);
$this->request = new Request($this->repoSet);
$this->policy = new DefaultPolicy;
$this->solver = new Solver($this->policy, $this->pool, $this->repoInstalled, new NullIO());
}
public function testSolverInstallSingle()
@ -71,6 +73,7 @@ class SolverTest extends TestCase
$this->request->install('B', $this->getVersionConstraint('==', '1'));
$this->createSolver();
try {
$transaction = $this->solver->solve($this->request);
$this->fail('Unsolvable conflict did not result in exception.');
@ -90,9 +93,9 @@ class SolverTest extends TestCase
$repo1->addPackage($foo1 = $this->getPackage('foo', '1'));
$repo2->addPackage($foo2 = $this->getPackage('foo', '1'));
$this->pool->addRepository($this->repoInstalled);
$this->pool->addRepository($repo1);
$this->pool->addRepository($repo2);
$this->repoSet->addRepository($this->repoInstalled);
$this->repoSet->addRepository($repo1);
$this->repoSet->addRepository($repo2);
$this->request->install('foo');
@ -445,6 +448,7 @@ class SolverTest extends TestCase
// must explicitly pick the provider, so error in this case
$this->setExpectedException('Composer\DependencyResolver\SolverProblemsException');
$this->createSolver();
$this->solver->solve($this->request);
}
@ -478,6 +482,7 @@ class SolverTest extends TestCase
$this->request->install('A');
$this->setExpectedException('Composer\DependencyResolver\SolverProblemsException');
$this->createSolver();
$this->solver->solve($this->request);
}
@ -650,6 +655,7 @@ class SolverTest extends TestCase
$this->setExpectedException('Composer\DependencyResolver\SolverProblemsException');
$this->createSolver();
$this->solver->solve($this->request);
}
@ -666,6 +672,7 @@ class SolverTest extends TestCase
$this->request->install('A');
$this->request->install('B');
$this->createSolver();
try {
$transaction = $this->solver->solve($this->request);
$this->fail('Unsolvable conflict did not result in exception.');
@ -695,6 +702,7 @@ class SolverTest extends TestCase
$this->request->install('A');
$this->createSolver();
try {
$transaction = $this->solver->solve($this->request);
$this->fail('Unsolvable conflict did not result in exception.');
@ -742,6 +750,7 @@ class SolverTest extends TestCase
$this->request->install('A');
$this->createSolver();
try {
$transaction = $this->solver->solve($this->request);
$this->fail('Unsolvable conflict did not result in exception.');
@ -839,12 +848,18 @@ class SolverTest extends TestCase
protected function reposComplete()
{
$this->pool->addRepository($this->repoInstalled);
$this->pool->addRepository($this->repo);
$this->repoSet->addRepository($this->repoInstalled);
$this->repoSet->addRepository($this->repo);
}
protected function createSolver()
{
$this->solver = new Solver($this->policy, $this->repoSet->createPool($this->request), $this->repoInstalled, new NullIO());
}
protected function checkSolverResult(array $expected)
{
$this->createSolver();
$transaction = $this->solver->solve($this->request);
$result = array();

View file

@ -411,12 +411,12 @@ class EventDispatcherTest extends TestCase
->will($this->returnValue(array()));
$policy = $this->getMockBuilder('Composer\DependencyResolver\PolicyInterface')->getMock();
$pool = $this->getMockBuilder('Composer\DependencyResolver\Pool')->disableOriginalConstructor()->getMock();
$repositorySet = $this->getMockBuilder('Composer\Repository\RepositorySet')->disableOriginalConstructor()->getMock();
$installedRepo = $this->getMockBuilder('Composer\Repository\CompositeRepository')->disableOriginalConstructor()->getMock();
$request = $this->getMockBuilder('Composer\DependencyResolver\Request')->disableOriginalConstructor()->getMock();
$dispatcher->dispatchInstallerEvent(InstallerEvents::PRE_DEPENDENCIES_SOLVING, true, $policy, $pool, $installedRepo, $request);
$dispatcher->dispatchInstallerEvent(InstallerEvents::POST_DEPENDENCIES_SOLVING, true, $policy, $pool, $installedRepo, $request, array());
$dispatcher->dispatchInstallerEvent(InstallerEvents::PRE_DEPENDENCIES_SOLVING, true, $policy, $repositorySet, $installedRepo, $request);
$dispatcher->dispatchInstallerEvent(InstallerEvents::POST_DEPENDENCIES_SOLVING, true, $policy, $repositorySet, $installedRepo, $request, array());
}
public static function call()

View file

@ -22,18 +22,18 @@ class InstallerEventTest extends TestCase
$composer = $this->getMockBuilder('Composer\Composer')->getMock();
$io = $this->getMockBuilder('Composer\IO\IOInterface')->getMock();
$policy = $this->getMockBuilder('Composer\DependencyResolver\PolicyInterface')->getMock();
$pool = $this->getMockBuilder('Composer\DependencyResolver\Pool')->disableOriginalConstructor()->getMock();
$repositorySet = $this->getMockBuilder('Composer\Repository\RepositorySet')->disableOriginalConstructor()->getMock();
$installedRepo = $this->getMockBuilder('Composer\Repository\CompositeRepository')->disableOriginalConstructor()->getMock();
$request = $this->getMockBuilder('Composer\DependencyResolver\Request')->disableOriginalConstructor()->getMock();
$operations = array($this->getMockBuilder('Composer\DependencyResolver\Operation\OperationInterface')->getMock());
$event = new InstallerEvent('EVENT_NAME', $composer, $io, true, $policy, $pool, $installedRepo, $request, $operations);
$event = new InstallerEvent('EVENT_NAME', $composer, $io, true, $policy, $repositorySet, $installedRepo, $request, $operations);
$this->assertSame('EVENT_NAME', $event->getName());
$this->assertInstanceOf('Composer\Composer', $event->getComposer());
$this->assertInstanceOf('Composer\IO\IOInterface', $event->getIO());
$this->assertTrue($event->isDevMode());
$this->assertInstanceOf('Composer\DependencyResolver\PolicyInterface', $event->getPolicy());
$this->assertInstanceOf('Composer\DependencyResolver\Pool', $event->getPool());
$this->assertInstanceOf('Composer\Repository\RepositorySet', $event->getRepositorySet());
$this->assertInstanceOf('Composer\Repository\CompositeRepository', $event->getInstalledRepo());
$this->assertInstanceOf('Composer\DependencyResolver\Request', $event->getRequest());
$this->assertCount(1, $event->getOperations());

View file

@ -14,6 +14,7 @@ namespace Composer\Test;
use Composer\Installer;
use Composer\Console\Application;
use Composer\IO\BufferIO;
use Composer\Json\JsonFile;
use Composer\Util\Filesystem;
use Composer\Repository\ArrayRepository;
@ -30,7 +31,6 @@ use Symfony\Component\Console\Output\StreamOutput;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Formatter\OutputFormatter;
use Composer\TestCase;
use Composer\IO\BufferIO;
class InstallerTest extends TestCase
{
@ -57,7 +57,7 @@ class InstallerTest extends TestCase
*/
public function testInstaller(RootPackageInterface $rootPackage, $repositories, array $options)
{
$io = $this->getMockBuilder('Composer\IO\IOInterface')->getMock();
$io = new BufferIO('', OutputInterface::VERBOSITY_NORMAL, new OutputFormatter(false));
$downloadManager = $this->getMockBuilder('Composer\Downloader\DownloadManager')
->setConstructorArgs(array($io))
@ -82,7 +82,9 @@ class InstallerTest extends TestCase
$installer = new Installer($io, $config, clone $rootPackage, $downloadManager, $repositoryManager, $locker, $installationManager, $eventDispatcher, $autoloadGenerator);
$result = $installer->run();
$this->assertSame(0, $result);
$output = str_replace("\r", '', $io->getOutput());
$this->assertEquals(0, $result, $output);
$expectedInstalled = isset($options['install']) ? $options['install'] : array();
$expectedUpdated = isset($options['update']) ? $options['update'] : array();

View file

@ -21,7 +21,7 @@ use PHPUnit\Framework\TestCase;
class VersionSelectorTest extends TestCase
{
// A) multiple versions, get the latest one
// B) targetPackageVersion will pass to pool
// B) targetPackageVersion will pass to repo set
// C) No results, throw exception
public function testLatestVersionIsReturned()
@ -33,13 +33,13 @@ class VersionSelectorTest extends TestCase
$package3 = $this->createPackage('1.2.0');
$packages = array($package1, $package2, $package3);
$pool = $this->createMockPool();
$pool->expects($this->once())
->method('whatProvides')
->with($packageName, null, true)
$repositorySet = $this->createMockRepositorySet();
$repositorySet->expects($this->once())
->method('findPackages')
->with($packageName, null)
->will($this->returnValue($packages));
$versionSelector = new VersionSelector($pool);
$versionSelector = new VersionSelector($repositorySet);
$best = $versionSelector->findBestCandidate($packageName);
// 1.2.2 should be returned because it's the latest of the returned versions
@ -57,13 +57,13 @@ class VersionSelectorTest extends TestCase
$package2->setRequires(array('php' => new Link($packageName, 'php', $parser->parseConstraints('>=5.6'), 'requires', '>=5.6')));
$packages = array($package1, $package2);
$pool = $this->createMockPool();
$pool->expects($this->once())
->method('whatProvides')
->with($packageName, null, true)
$repositorySet = $this->createMockRepositorySet();
$repositorySet->expects($this->once())
->method('findPackages')
->with($packageName, null)
->will($this->returnValue($packages));
$versionSelector = new VersionSelector($pool);
$versionSelector = new VersionSelector($repositorySet);
$best = $versionSelector->findBestCandidate($packageName, null, '5.5.0');
$this->assertSame($package1, $best, 'Latest version supporting php 5.5 should be returned (1.0.0)');
@ -77,13 +77,13 @@ class VersionSelectorTest extends TestCase
$package2 = $this->createPackage('1.1.0-beta');
$packages = array($package1, $package2);
$pool = $this->createMockPool();
$pool->expects($this->once())
->method('whatProvides')
->with($packageName, null, true)
$repositorySet = $this->createMockRepositorySet();
$repositorySet->expects($this->once())
->method('findPackages')
->with($packageName, null)
->will($this->returnValue($packages));
$versionSelector = new VersionSelector($pool);
$versionSelector = new VersionSelector($repositorySet);
$best = $versionSelector->findBestCandidate($packageName);
$this->assertSame($package1, $best, 'Latest most stable version should be returned (1.0.0)');
@ -97,18 +97,18 @@ class VersionSelectorTest extends TestCase
$package2 = $this->createPackage('2.0.0-beta3');
$packages = array($package1, $package2);
$pool = $this->createMockPool();
$pool->expects($this->at(0))
->method('whatProvides')
->with($packageName, null, true)
$repositorySet = $this->createMockRepositorySet();
$repositorySet->expects($this->at(0))
->method('findPackages')
->with($packageName, null)
->will($this->returnValue($packages));
$pool->expects($this->at(1))
->method('whatProvides')
->with($packageName, null, true)
$repositorySet->expects($this->at(1))
->method('findPackages')
->with($packageName, null)
->will($this->returnValue(array_reverse($packages)));
$versionSelector = new VersionSelector($pool);
$versionSelector = new VersionSelector($repositorySet);
$best = $versionSelector->findBestCandidate($packageName, null, null);
$this->assertSame($package2, $best, 'Expecting 2.0.0-beta3, cause beta is more stable than dev');
@ -124,13 +124,13 @@ class VersionSelectorTest extends TestCase
$package2 = $this->createPackage('1.1.0-beta');
$packages = array($package1, $package2);
$pool = $this->createMockPool();
$pool->expects($this->once())
->method('whatProvides')
->with($packageName, null, true)
$repositorySet = $this->createMockRepositorySet();
$repositorySet->expects($this->once())
->method('findPackages')
->with($packageName, null)
->will($this->returnValue($packages));
$versionSelector = new VersionSelector($pool);
$versionSelector = new VersionSelector($repositorySet);
$best = $versionSelector->findBestCandidate($packageName, null, null, 'dev');
$this->assertSame($package2, $best, 'Latest version should be returned (1.1.0-beta)');
@ -145,13 +145,13 @@ class VersionSelectorTest extends TestCase
$package3 = $this->createPackage('1.2.0-alpha');
$packages = array($package1, $package2, $package3);
$pool = $this->createMockPool();
$pool->expects($this->once())
->method('whatProvides')
->with($packageName, null, true)
$repositorySet = $this->createMockRepositorySet();
$repositorySet->expects($this->once())
->method('findPackages')
->with($packageName, null)
->will($this->returnValue($packages));
$versionSelector = new VersionSelector($pool);
$versionSelector = new VersionSelector($repositorySet);
$best = $versionSelector->findBestCandidate($packageName, null, null, 'beta');
$this->assertSame($package2, $best, 'Latest version should be returned (1.1.0-beta)');
@ -165,13 +165,13 @@ class VersionSelectorTest extends TestCase
$package3 = $this->createPackage('1.2.0-alpha');
$packages = array($package2, $package3);
$pool = $this->createMockPool();
$pool->expects($this->once())
->method('whatProvides')
->with($packageName, null, true)
$repositorySet = $this->createMockRepositorySet();
$repositorySet->expects($this->once())
->method('findPackages')
->with($packageName, null)
->will($this->returnValue($packages));
$versionSelector = new VersionSelector($pool);
$versionSelector = new VersionSelector($repositorySet);
$best = $versionSelector->findBestCandidate($packageName, null, null, 'stable');
$this->assertSame($package2, $best, 'Latest version should be returned (1.1.0-beta)');
@ -179,12 +179,12 @@ class VersionSelectorTest extends TestCase
public function testFalseReturnedOnNoPackages()
{
$pool = $this->createMockPool();
$pool->expects($this->once())
->method('whatProvides')
$repositorySet = $this->createMockRepositorySet();
$repositorySet->expects($this->once())
->method('findPackages')
->will($this->returnValue(array()));
$versionSelector = new VersionSelector($pool);
$versionSelector = new VersionSelector($repositorySet);
$best = $versionSelector->findBestCandidate('foobaz');
$this->assertFalse($best, 'No versions are available returns false');
}
@ -194,8 +194,8 @@ class VersionSelectorTest extends TestCase
*/
public function testFindRecommendedRequireVersion($prettyVersion, $isDev, $stability, $expectedVersion, $branchAlias = null)
{
$pool = $this->createMockPool();
$versionSelector = new VersionSelector($pool);
$repositorySet = $this->createMockRepositorySet();
$versionSelector = new VersionSelector($repositorySet);
$versionParser = new VersionParser();
$package = $this->getMockBuilder('\Composer\Package\PackageInterface')->getMock();
@ -273,8 +273,10 @@ class VersionSelectorTest extends TestCase
return new Package('foo', $parser->normalize($version), $version);
}
private function createMockPool()
private function createMockRepositorySet()
{
return $this->getMockBuilder('Composer\DependencyResolver\Pool')->getMock();
return $this->getMockBuilder('Composer\Repository\RepositorySet')
->disableOriginalConstructor()
->getMock();
}
}

View file

@ -7,6 +7,6 @@
"class": "Installer\\Plugin"
},
"require": {
"composer-plugin-api": "^1.0"
"composer-plugin-api": "^2.0"
}
}

View file

@ -7,6 +7,6 @@
"class": "Installer\\Plugin2"
},
"require": {
"composer-plugin-api": "^1.0"
"composer-plugin-api": "^2.0"
}
}

View file

@ -7,6 +7,6 @@
"class": "Installer\\Plugin2"
},
"require": {
"composer-plugin-api": "^1.0"
"composer-plugin-api": "^2.0"
}
}

View file

@ -10,6 +10,6 @@
]
},
"require": {
"composer-plugin-api": "^1.0"
"composer-plugin-api": "^2.0"
}
}

View file

@ -9,6 +9,6 @@
]
},
"require": {
"composer-plugin-api": "1.1.0"
"composer-plugin-api": "2.0.0"
}
}

View file

@ -7,6 +7,6 @@
"class": "Installer\\Plugin"
},
"require": {
"composer-plugin-api": "^1.0"
"composer-plugin-api": "^2.0"
}
}

View file

@ -130,7 +130,7 @@ class PluginInstallerTest extends TestCase
public function testInstallNewPlugin()
{
$this->repository
->expects($this->exactly(2))
->expects($this->once())
->method('getPackages')
->will($this->returnValue(array()));
$installer = new PluginInstaller($this->io, $this->composer);
@ -145,7 +145,7 @@ class PluginInstallerTest extends TestCase
public function testInstallMultiplePlugins()
{
$this->repository
->expects($this->exactly(2))
->expects($this->once())
->method('getPackages')
->will($this->returnValue(array($this->packages[3])));
$installer = new PluginInstaller($this->io, $this->composer);
@ -163,7 +163,7 @@ class PluginInstallerTest extends TestCase
public function testUpgradeWithNewClassName()
{
$this->repository
->expects($this->exactly(3))
->expects($this->once())
->method('getPackages')
->will($this->returnValue(array($this->packages[0])));
$this->repository
@ -182,7 +182,7 @@ class PluginInstallerTest extends TestCase
public function testUpgradeWithSameClassName()
{
$this->repository
->expects($this->exactly(3))
->expects($this->once())
->method('getPackages')
->will($this->returnValue(array($this->packages[1])));
$this->repository
@ -201,7 +201,7 @@ class PluginInstallerTest extends TestCase
public function testRegisterPluginOnlyOneTime()
{
$this->repository
->expects($this->exactly(2))
->expects($this->once())
->method('getPackages')
->will($this->returnValue(array()));
$installer = new PluginInstaller($this->io, $this->composer);
@ -240,11 +240,11 @@ class PluginInstallerTest extends TestCase
// Add the plugins to the repo along with the internal Plugin package on which they all rely.
$this->repository
->expects($this->any())
->method('getPackages')
->will($this->returnCallback(function () use ($plugApiInternalPackage, $plugins) {
return array_merge(array($plugApiInternalPackage), $plugins);
}));
->expects($this->any())
->method('getPackages')
->will($this->returnCallback(function () use ($plugApiInternalPackage, $plugins) {
return array_merge(array($plugApiInternalPackage), $plugins);
}));
$this->pm->loadInstalledPlugins();
}
@ -300,7 +300,7 @@ class PluginInstallerTest extends TestCase
public function testCommandProviderCapability()
{
$this->repository
->expects($this->exactly(2))
->expects($this->once())
->method('getPackages')
->will($this->returnValue(array($this->packages[7])));
$installer = new PluginInstaller($this->io, $this->composer);

View file

@ -142,11 +142,6 @@ class ComposerRepositoryTest extends TestCase
),
)));
$pool = $this->getMockBuilder('Composer\DependencyResolver\Pool')->getMock();
$pool->expects($this->any())
->method('isPackageAcceptable')
->will($this->returnValue(true));
$versionParser = new VersionParser();
$repo->setRootAliases(array(
'a' => array(
@ -155,7 +150,7 @@ class ComposerRepositoryTest extends TestCase
),
));
$packages = $repo->whatProvides($pool, 'a');
$packages = $repo->whatProvides('a', false, array($this, 'isPackageAcceptableReturnTrue'));
$this->assertCount(7, $packages);
$this->assertEquals(array('1', '1-alias', '2', '2-alias', '2-root', '3', '3-root'), array_keys($packages));
@ -164,6 +159,11 @@ class ComposerRepositoryTest extends TestCase
$this->assertSame($packages['2'], $packages['2-alias']->getAliasOf());
}
public function isPackageAcceptableReturnTrue()
{
return true;
}
public function testSearchWithType()
{
$repoConfig = array(