Skip to content
This repository has been archived by the owner on May 28, 2019. It is now read-only.

Commit

Permalink
CompatibilityComparator no longer treats versions with zero-major-ver…
Browse files Browse the repository at this point in the history
…sion as compatible unless exactly equal.
  • Loading branch information
jmalloc committed Mar 9, 2015
1 parent e20fc7e commit e1800f5
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 13 deletions.
6 changes: 5 additions & 1 deletion src/CompatibilityComparator.php
Expand Up @@ -18,7 +18,11 @@ public function compare(Version $left, Version $right)
{
$result = parent::compare($left, $right);

if ($result <= 0 && $left->major() === $right->major()) {
if (
$result <= 0
&& $left->major() !== 0
&& $left->major() === $right->major()
) {
return 0;
}

Expand Down
43 changes: 31 additions & 12 deletions test/suite/CompatibilityComparatorTest.php
Expand Up @@ -7,33 +7,46 @@ class CompatibilityComparatorTest extends PHPUnit_Framework_TestCase
{
public function setUp()
{
$this->_comparator = new CompatibilityComparator();
$this->comparator = new CompatibilityComparator();
}

/**
* @dataProvider comparisonTestVectors
*/
public function testCompareEquality($left, $right)
{
$left = Version::parse($left);
$left = Version::parse($left);
$right = Version::parse($right);

$this->assertSame(0, $this->_comparator->compare($left, $left));
$this->assertSame(0, $this->_comparator->compare($right, $right));
$this->assertSame(
0,
$this->comparator->compare($left, $left)
);

$this->assertSame(
0,
$this->comparator->compare($right, $right)
);
}

/**
* @dataProvider comparisonTestVectors
*/
public function testCompare($left, $right, $isCompatible)
{
$left = Version::parse($left);
$left = Version::parse($left);
$right = Version::parse($right);

if ($isCompatible) {
$this->assertSame(0, $this->_comparator->compare($left, $right));
$this->assertSame(
0,
$this->comparator->compare($left, $right)
);
} else {
$this->assertLessThan(0, $this->_comparator->compare($left, $right));
$this->assertLessThan(
0,
$this->comparator->compare($left, $right)
);
}
}

Expand All @@ -42,9 +55,13 @@ public function testCompare($left, $right, $isCompatible)
*/
public function testCompareInverse($left, $right, $isCompatible)
{
$left = Version::parse($left);
$left = Version::parse($left);
$right = Version::parse($right);
$this->assertGreaterThan(0, $this->_comparator->compare($right, $left));

$this->assertGreaterThan(
0,
$this->comparator->compare($right, $left)
);
}

/**
Expand All @@ -55,10 +72,12 @@ public function testCompareInverse($left, $right, $isCompatible)
public function comparisonTestVectors()
{
return array(
'major version comparison' => array('1.0.0', '2.0.0', false),
'major version comparison' => array('1.0.0', '2.0.0', false),
'major version comparison, pre-release' => array('1.0.0', '2.0.0-foo', false),
'minor version comparison' => array('1.1.0', '1.2.0', true),
'patch version comparison' => array('1.1.1', '1.1.2', true),
'minor version comparison' => array('1.1.0', '1.2.0', true),
'patch version comparison' => array('1.1.1', '1.1.2', true),
'zero major version comparison' => array('0.1.0', '0.2.0', false), // never compatible unless equal
);

}
}

0 comments on commit e1800f5

Please sign in to comment.