2011-06-26 22:11:57 +00:00
< ? php
/*
* This file is part of Composer .
*
* ( c ) Nils Adermann < naderman @ naderman . de >
* Jordi Boggiano < j . boggiano @ seld . be >
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
namespace Composer\Test\DependencyResolver ;
2017-02-16 22:00:57 +00:00
use Composer\DependencyResolver\GenericRule ;
2011-06-26 22:11:57 +00:00
use Composer\DependencyResolver\Rule ;
use Composer\DependencyResolver\RuleSet ;
2012-05-19 18:38:56 +00:00
use Composer\DependencyResolver\Pool ;
2021-08-21 15:41:52 +00:00
use Composer\Semver\Constraint\MatchNoneConstraint ;
2018-11-12 14:23:32 +00:00
use Composer\Test\TestCase ;
2011-06-26 22:11:57 +00:00
2012-01-22 21:06:09 +00:00
class RuleSetTest extends TestCase
2011-06-26 22:11:57 +00:00
{
public function testAdd ()
{
$rules = array (
RuleSet :: TYPE_PACKAGE => array (),
2020-01-19 22:11:36 +00:00
RuleSet :: TYPE_REQUEST => array (
new GenericRule ( array ( 1 ), Rule :: RULE_ROOT_REQUIRE , null ),
new GenericRule ( array ( 2 ), Rule :: RULE_ROOT_REQUIRE , null ),
2011-06-26 22:11:57 +00:00
),
2012-04-27 16:28:18 +00:00
RuleSet :: TYPE_LEARNED => array (
2020-06-02 11:12:15 +00:00
new GenericRule ( array (), Rule :: RULE_LEARNED , null ),
2011-06-26 22:11:57 +00:00
),
);
$ruleSet = new RuleSet ;
2020-01-19 22:11:36 +00:00
$ruleSet -> add ( $rules [ RuleSet :: TYPE_REQUEST ][ 0 ], RuleSet :: TYPE_REQUEST );
2012-04-27 16:28:18 +00:00
$ruleSet -> add ( $rules [ RuleSet :: TYPE_LEARNED ][ 0 ], RuleSet :: TYPE_LEARNED );
2020-01-19 22:11:36 +00:00
$ruleSet -> add ( $rules [ RuleSet :: TYPE_REQUEST ][ 1 ], RuleSet :: TYPE_REQUEST );
2011-06-26 22:11:57 +00:00
$this -> assertEquals ( $rules , $ruleSet -> getRules ());
}
2012-01-22 21:06:09 +00:00
2016-09-30 13:06:22 +00:00
public function testAddIgnoresDuplicates ()
{
$rules = array (
2020-01-19 22:11:36 +00:00
RuleSet :: TYPE_REQUEST => array (
new GenericRule ( array (), Rule :: RULE_ROOT_REQUIRE , null ),
new GenericRule ( array (), Rule :: RULE_ROOT_REQUIRE , null ),
new GenericRule ( array (), Rule :: RULE_ROOT_REQUIRE , null ),
2017-03-08 14:07:29 +00:00
),
2016-09-30 13:06:22 +00:00
);
$ruleSet = new RuleSet ;
2020-01-19 22:11:36 +00:00
$ruleSet -> add ( $rules [ RuleSet :: TYPE_REQUEST ][ 0 ], RuleSet :: TYPE_REQUEST );
$ruleSet -> add ( $rules [ RuleSet :: TYPE_REQUEST ][ 1 ], RuleSet :: TYPE_REQUEST );
$ruleSet -> add ( $rules [ RuleSet :: TYPE_REQUEST ][ 2 ], RuleSet :: TYPE_REQUEST );
2016-09-30 13:06:22 +00:00
2020-01-19 22:11:36 +00:00
$this -> assertCount ( 1 , $ruleSet -> getIteratorFor ( array ( RuleSet :: TYPE_REQUEST )));
2016-09-30 13:06:22 +00:00
}
2012-01-22 21:06:09 +00:00
public function testAddWhenTypeIsNotRecognized ()
{
$ruleSet = new RuleSet ;
2020-09-10 15:21:11 +00:00
$this -> setExpectedException ( 'OutOfBoundsException' );
2020-01-19 22:11:36 +00:00
$ruleSet -> add ( new GenericRule ( array (), Rule :: RULE_ROOT_REQUIRE , null ), 7 );
2012-01-22 21:06:09 +00:00
}
public function testCount ()
{
$ruleSet = new RuleSet ;
2020-01-19 22:11:36 +00:00
$ruleSet -> add ( new GenericRule ( array ( 1 ), Rule :: RULE_ROOT_REQUIRE , null ), RuleSet :: TYPE_REQUEST );
$ruleSet -> add ( new GenericRule ( array ( 2 ), Rule :: RULE_ROOT_REQUIRE , null ), RuleSet :: TYPE_REQUEST );
2012-01-22 21:06:09 +00:00
$this -> assertEquals ( 2 , $ruleSet -> count ());
}
public function testRuleById ()
{
$ruleSet = new RuleSet ;
2020-01-19 22:11:36 +00:00
$rule = new GenericRule ( array (), Rule :: RULE_ROOT_REQUIRE , null );
$ruleSet -> add ( $rule , RuleSet :: TYPE_REQUEST );
2012-01-22 21:06:09 +00:00
2014-12-01 17:28:45 +00:00
$this -> assertSame ( $rule , $ruleSet -> ruleById [ 0 ]);
2012-01-22 21:06:09 +00:00
}
public function testGetIterator ()
{
$ruleSet = new RuleSet ;
2020-01-19 22:11:36 +00:00
$rule1 = new GenericRule ( array ( 1 ), Rule :: RULE_ROOT_REQUIRE , null );
$rule2 = new GenericRule ( array ( 2 ), Rule :: RULE_ROOT_REQUIRE , null );
$ruleSet -> add ( $rule1 , RuleSet :: TYPE_REQUEST );
2012-04-27 16:28:18 +00:00
$ruleSet -> add ( $rule2 , RuleSet :: TYPE_LEARNED );
2012-01-22 21:06:09 +00:00
$iterator = $ruleSet -> getIterator ();
$this -> assertSame ( $rule1 , $iterator -> current ());
$iterator -> next ();
$this -> assertSame ( $rule2 , $iterator -> current ());
}
public function testGetIteratorFor ()
{
$ruleSet = new RuleSet ;
2020-01-19 22:11:36 +00:00
$rule1 = new GenericRule ( array ( 1 ), Rule :: RULE_ROOT_REQUIRE , null );
$rule2 = new GenericRule ( array ( 2 ), Rule :: RULE_ROOT_REQUIRE , null );
2012-01-22 21:06:09 +00:00
2020-01-19 22:11:36 +00:00
$ruleSet -> add ( $rule1 , RuleSet :: TYPE_REQUEST );
2012-04-27 16:28:18 +00:00
$ruleSet -> add ( $rule2 , RuleSet :: TYPE_LEARNED );
2012-01-22 21:06:09 +00:00
2012-04-27 16:28:18 +00:00
$iterator = $ruleSet -> getIteratorFor ( RuleSet :: TYPE_LEARNED );
2012-01-22 21:06:09 +00:00
$this -> assertSame ( $rule2 , $iterator -> current ());
}
public function testGetIteratorWithout ()
{
$ruleSet = new RuleSet ;
2020-01-19 22:11:36 +00:00
$rule1 = new GenericRule ( array ( 1 ), Rule :: RULE_ROOT_REQUIRE , null );
$rule2 = new GenericRule ( array ( 2 ), Rule :: RULE_ROOT_REQUIRE , null );
2012-01-22 21:06:09 +00:00
2020-01-19 22:11:36 +00:00
$ruleSet -> add ( $rule1 , RuleSet :: TYPE_REQUEST );
2012-04-27 16:28:18 +00:00
$ruleSet -> add ( $rule2 , RuleSet :: TYPE_LEARNED );
2012-01-22 21:06:09 +00:00
2020-01-19 22:11:36 +00:00
$iterator = $ruleSet -> getIteratorWithout ( RuleSet :: TYPE_REQUEST );
2012-01-22 21:06:09 +00:00
$this -> assertSame ( $rule2 , $iterator -> current ());
}
2014-12-01 18:02:50 +00:00
public function testPrettyString ()
2012-01-22 21:06:09 +00:00
{
2020-01-17 14:48:31 +00:00
$pool = new Pool ( array (
2018-09-12 09:49:09 +00:00
$p = $this -> getPackage ( 'foo' , '2.1' ),
));
2012-05-19 18:38:56 +00:00
2020-01-29 21:47:16 +00:00
$repositorySetMock = $this -> getMockBuilder ( 'Composer\Repository\RepositorySet' ) -> disableOriginalConstructor () -> getMock ();
$requestMock = $this -> getMockBuilder ( 'Composer\DependencyResolver\Request' ) -> disableOriginalConstructor () -> getMock ();
2012-01-22 21:06:09 +00:00
$ruleSet = new RuleSet ;
2012-05-19 18:38:56 +00:00
$literal = $p -> getId ();
2021-08-21 15:41:52 +00:00
$rule = new GenericRule ( array ( $literal ), Rule :: RULE_ROOT_REQUIRE , array ( 'packageName' => 'foo/bar' , 'constraint' => new MatchNoneConstraint ));
2012-01-22 21:06:09 +00:00
2020-01-19 22:11:36 +00:00
$ruleSet -> add ( $rule , RuleSet :: TYPE_REQUEST );
2012-01-22 21:06:09 +00:00
2020-09-10 15:21:11 +00:00
$this -> assertStringContainsString ( 'REQUEST : No package found to satisfy root composer.json require foo/bar' , $ruleSet -> getPrettyString ( $repositorySetMock , $requestMock , $pool ));
2012-01-22 21:06:09 +00:00
}
2011-06-26 22:11:57 +00:00
}