From e1800f59148d6639680d9ca7226df691233b88b6 Mon Sep 17 00:00:00 2001 From: James Harris Date: Mon, 9 Mar 2015 14:43:37 +1000 Subject: [PATCH] CompatibilityComparator no longer treats versions with zero-major-version as compatible unless exactly equal. --- src/CompatibilityComparator.php | 6 ++- test/suite/CompatibilityComparatorTest.php | 43 ++++++++++++++++------ 2 files changed, 36 insertions(+), 13 deletions(-) diff --git a/src/CompatibilityComparator.php b/src/CompatibilityComparator.php index eaabd11..1d76f89 100644 --- a/src/CompatibilityComparator.php +++ b/src/CompatibilityComparator.php @@ -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; } diff --git a/test/suite/CompatibilityComparatorTest.php b/test/suite/CompatibilityComparatorTest.php index 7b9c10d..dcb184b 100644 --- a/test/suite/CompatibilityComparatorTest.php +++ b/test/suite/CompatibilityComparatorTest.php @@ -7,7 +7,7 @@ class CompatibilityComparatorTest extends PHPUnit_Framework_TestCase { public function setUp() { - $this->_comparator = new CompatibilityComparator(); + $this->comparator = new CompatibilityComparator(); } /** @@ -15,11 +15,18 @@ public function setUp() */ 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) + ); } /** @@ -27,13 +34,19 @@ public function testCompareEquality($left, $right) */ 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) + ); } } @@ -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) + ); } /** @@ -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 ); + } }