RuleSetTest.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. <?php
  2. /*
  3. * This file is part of Composer.
  4. *
  5. * (c) Nils Adermann <naderman@naderman.de>
  6. * Jordi Boggiano <j.boggiano@seld.be>
  7. *
  8. * For the full copyright and license information, please view the LICENSE
  9. * file that was distributed with this source code.
  10. */
  11. namespace Composer\Test\DependencyResolver;
  12. use Composer\DependencyResolver\Rule;
  13. use Composer\DependencyResolver\RuleSet;
  14. use Composer\DependencyResolver\Pool;
  15. use Composer\Repository\ArrayRepository;
  16. use Composer\TestCase;
  17. class RuleSetTest extends TestCase
  18. {
  19. protected $pool;
  20. public function setUp()
  21. {
  22. $this->pool = new Pool;
  23. }
  24. public function testAdd()
  25. {
  26. $rules = array(
  27. RuleSet::TYPE_PACKAGE => array(),
  28. RuleSet::TYPE_JOB => array(
  29. new Rule(array(), 'job1', null),
  30. new Rule(array(), 'job2', null),
  31. ),
  32. RuleSet::TYPE_LEARNED => array(
  33. new Rule(array(), 'update1', null),
  34. ),
  35. );
  36. $ruleSet = new RuleSet;
  37. $ruleSet->add($rules[RuleSet::TYPE_JOB][0], RuleSet::TYPE_JOB);
  38. $ruleSet->add($rules[RuleSet::TYPE_LEARNED][0], RuleSet::TYPE_LEARNED);
  39. $ruleSet->add($rules[RuleSet::TYPE_JOB][1], RuleSet::TYPE_JOB);
  40. $this->assertEquals($rules, $ruleSet->getRules());
  41. }
  42. /**
  43. * @expectedException \OutOfBoundsException
  44. */
  45. public function testAddWhenTypeIsNotRecognized()
  46. {
  47. $ruleSet = new RuleSet;
  48. $ruleSet->add(new Rule(array(), 'job1', null), 7);
  49. }
  50. public function testCount()
  51. {
  52. $ruleSet = new RuleSet;
  53. $ruleSet->add(new Rule(array(), 'job1', null), RuleSet::TYPE_JOB);
  54. $ruleSet->add(new Rule(array(), 'job2', null), RuleSet::TYPE_JOB);
  55. $this->assertEquals(2, $ruleSet->count());
  56. }
  57. public function testRuleById()
  58. {
  59. $ruleSet = new RuleSet;
  60. $rule = new Rule(array(), 'job1', null);
  61. $ruleSet->add($rule, RuleSet::TYPE_JOB);
  62. $this->assertSame($rule, $ruleSet->ruleById[0]);
  63. }
  64. public function testGetIterator()
  65. {
  66. $ruleSet = new RuleSet;
  67. $rule1 = new Rule(array(), 'job1', null);
  68. $rule2 = new Rule(array(), 'job1', null);
  69. $ruleSet->add($rule1, RuleSet::TYPE_JOB);
  70. $ruleSet->add($rule2, RuleSet::TYPE_LEARNED);
  71. $iterator = $ruleSet->getIterator();
  72. $this->assertSame($rule1, $iterator->current());
  73. $iterator->next();
  74. $this->assertSame($rule2, $iterator->current());
  75. }
  76. public function testGetIteratorFor()
  77. {
  78. $ruleSet = new RuleSet;
  79. $rule1 = new Rule(array(), 'job1', null);
  80. $rule2 = new Rule(array(), 'job1', null);
  81. $ruleSet->add($rule1, RuleSet::TYPE_JOB);
  82. $ruleSet->add($rule2, RuleSet::TYPE_LEARNED);
  83. $iterator = $ruleSet->getIteratorFor(RuleSet::TYPE_LEARNED);
  84. $this->assertSame($rule2, $iterator->current());
  85. }
  86. public function testGetIteratorWithout()
  87. {
  88. $ruleSet = new RuleSet;
  89. $rule1 = new Rule(array(), 'job1', null);
  90. $rule2 = new Rule(array(), 'job1', null);
  91. $ruleSet->add($rule1, RuleSet::TYPE_JOB);
  92. $ruleSet->add($rule2, RuleSet::TYPE_LEARNED);
  93. $iterator = $ruleSet->getIteratorWithout(RuleSet::TYPE_JOB);
  94. $this->assertSame($rule2, $iterator->current());
  95. }
  96. public function testContainsEqual()
  97. {
  98. $ruleSet = new RuleSet;
  99. $rule = $this->getRuleMock();
  100. $rule->expects($this->any())
  101. ->method('getHash')
  102. ->will($this->returnValue('rule_1_hash'));
  103. $rule->expects($this->any())
  104. ->method('equals')
  105. ->will($this->returnValue(true));
  106. $rule2 = $this->getRuleMock();
  107. $rule2->expects($this->any())
  108. ->method('getHash')
  109. ->will($this->returnValue('rule_2_hash'));
  110. $rule3 = $this->getRuleMock();
  111. $rule3->expects($this->any())
  112. ->method('getHash')
  113. ->will($this->returnValue('rule_1_hash'));
  114. $rule3->expects($this->any())
  115. ->method('equals')
  116. ->will($this->returnValue(false));
  117. $ruleSet->add($rule, RuleSet::TYPE_LEARNED);
  118. $this->assertTrue($ruleSet->containsEqual($rule));
  119. $this->assertFalse($ruleSet->containsEqual($rule2));
  120. $this->assertFalse($ruleSet->containsEqual($rule3));
  121. }
  122. public function testPrettyString()
  123. {
  124. $repo = new ArrayRepository;
  125. $repo->addPackage($p = $this->getPackage('foo', '2.1'));
  126. $this->pool->addRepository($repo);
  127. $ruleSet = new RuleSet;
  128. $literal = $p->getId();
  129. $rule = new Rule(array($literal), 'job1', null);
  130. $ruleSet->add($rule, RuleSet::TYPE_JOB);
  131. $this->assertContains('JOB : (install foo 2.1)', $ruleSet->getPrettyString($this->pool));
  132. }
  133. private function getRuleMock()
  134. {
  135. return $this->getMockBuilder('Composer\DependencyResolver\Rule')
  136. ->disableOriginalConstructor()
  137. ->getMock();
  138. }
  139. }