Skip to content

Commit 6fad956

Browse files
committed
Add Comparator implementation
1 parent 1060235 commit 6fad956

2 files changed

Lines changed: 102 additions & 9 deletions

File tree

src/Version/Comparator.php

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,7 @@ final class Comparator implements ComparatorInterface
1212
*/
1313
public function greaterThan(string $requested, string $installed): bool
1414
{
15-
// TODO need implementation
16-
17-
return true;
15+
return \version_compare($installed, $requested) >= 0;
1816
}
1917

2018
/**
@@ -23,9 +21,7 @@ public function greaterThan(string $requested, string $installed): bool
2321
*/
2422
public function lessThan(string $requested, string $installed): bool
2523
{
26-
// TODO need implementation
27-
28-
return true;
24+
return \version_compare($installed, $requested) <= 0;
2925
}
3026

3127
/**
@@ -34,8 +30,6 @@ public function lessThan(string $requested, string $installed): bool
3430
*/
3531
public function equal(string $requested, string $installed): bool
3632
{
37-
// TODO need implementation
38-
39-
return true;
33+
return \version_compare($installed, $requested) === 0;
4034
}
4135
}
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace RoadRunner\VersionChecker\Tests\Unit;
6+
7+
use PHPUnit\Framework\TestCase;
8+
use RoadRunner\VersionChecker\Version\Comparator;
9+
10+
final class ComparatorTest extends TestCase
11+
{
12+
/**
13+
* @dataProvider greaterThanDataProvider
14+
*/
15+
public function testGreaterThan(string $requested, string $installed, bool $expected): void
16+
{
17+
$comparator = new Comparator();
18+
19+
$this->assertSame($expected, $comparator->greaterThan($requested, $installed));
20+
}
21+
22+
/**
23+
* @dataProvider lessThanDataProvider
24+
*/
25+
public function testLessThan(string $requested, string $installed, bool $expected): void
26+
{
27+
$comparator = new Comparator();
28+
29+
$this->assertSame($expected, $comparator->lessThan($requested, $installed));
30+
}
31+
32+
/**
33+
* @dataProvider equalDataProvider
34+
*/
35+
public function testEqual(string $requested, string $installed, bool $expected): void
36+
{
37+
$comparator = new Comparator();
38+
39+
$this->assertSame($expected, $comparator->equal($requested, $installed));
40+
}
41+
42+
public static function greaterThanDataProvider(): \Traversable
43+
{
44+
// requested version equal to installed version
45+
yield ['1.0.0', '1.0.0', true];
46+
// requested version less than installed version
47+
yield ['1.0.0', '2.0.0', true];
48+
// requested version greater than installed version
49+
yield ['2.0.0', '1.0.0', false];
50+
// requested version with same major and minor version as installed version, but greater patch version
51+
yield ['1.0.1', '1.0.0', false];
52+
// requested version with same major version as installed version, but greater minor version
53+
yield ['1.1.0', '1.0.0', false];
54+
// requested version with pre-release identifier
55+
yield ['2.0.0-alpha', '2.0.0', true];
56+
yield ['2.0.0-alpha', '2.0.0-beta', true];
57+
yield ['2.0.0-alpha', '2.0.0-alpha.1', true];
58+
yield ['2.0.0-alpha', '2.0.0-alpha', true];
59+
}
60+
61+
public static function lessThanDataProvider(): \Traversable
62+
{
63+
// requested version equal to installed version
64+
yield ['1.0.0', '1.0.0', true];
65+
// requested version less than installed version
66+
yield ['1.0.0', '2.0.0', false];
67+
// requested version greater than installed version
68+
yield ['2.0.0', '1.0.0', true];
69+
// requested version with same major and minor version as installed version, but greater patch version
70+
yield ['1.0.1', '1.0.0', true];
71+
// requested version with same major version as installed version, but greater minor version
72+
yield ['1.1.0', '1.0.0', true];
73+
// requested version with pre-release identifier
74+
yield ['2.0.0-alpha', '2.0.0', false];
75+
yield ['2.0.0-alpha', '2.0.0-beta', false];
76+
yield ['2.0.0-alpha', '2.0.0-alpha.1', false];
77+
yield ['2.0.0-alpha', '2.0.0-alpha', true];
78+
}
79+
80+
public static function equalDataProvider(): \Traversable
81+
{
82+
// requested version equal to installed version
83+
yield ['1.0.0', '1.0.0', true];
84+
// requested version less than installed version
85+
yield ['1.0.0', '2.0.0', false];
86+
// requested version greater than installed version
87+
yield ['2.0.0', '1.0.0', false];
88+
// requested version with same major and minor version as installed version, but greater patch version
89+
yield ['1.0.1', '1.0.0', false];
90+
// requested version with same major version as installed version, but greater minor version
91+
yield ['1.1.0', '1.0.0', false];
92+
// requested version with pre-release identifier
93+
yield ['2.0.0-alpha', '2.0.0', false];
94+
yield ['2.0.0-alpha', '2.0.0-beta', false];
95+
yield ['2.0.0-alpha', '2.0.0-alpha.1', false];
96+
yield ['2.0.0-alpha', '2.0.0-alpha', true];
97+
yield ['2.0.0-alpha.1', '2.0.0-alpha.1', true];
98+
}
99+
}

0 commit comments

Comments
 (0)