2022-09-13 13:13:11 +00:00
|
|
|
<?php
|
|
|
|
// VersionTest.php
|
|
|
|
// Created: 2021-04-30
|
2024-07-31 18:12:46 +00:00
|
|
|
// Updated: 2024-07-31
|
2022-09-13 13:13:11 +00:00
|
|
|
|
|
|
|
declare(strict_types=1);
|
|
|
|
|
|
|
|
use PHPUnit\Framework\TestCase;
|
2024-07-31 18:12:46 +00:00
|
|
|
use PHPUnit\Framework\Attributes\CoversClass;
|
|
|
|
use PHPUnit\Framework\Attributes\UsesClass;
|
2022-09-13 13:13:11 +00:00
|
|
|
use Index\Version;
|
|
|
|
use Index\XArray;
|
|
|
|
|
2024-07-31 18:12:46 +00:00
|
|
|
#[CoversClass(Version::class)]
|
|
|
|
#[UsesClass(XArray::class)]
|
2022-09-13 13:13:11 +00:00
|
|
|
final class VersionTest extends TestCase {
|
|
|
|
public function testParse(): void {
|
|
|
|
$tests = [
|
|
|
|
'1.0.0',
|
|
|
|
'v2.4.2',
|
|
|
|
'1.0.0-alpha',
|
|
|
|
'1.0.0-alpha.1',
|
|
|
|
'1.0.0-0.3.7',
|
|
|
|
'1.0.0-0.3.7',
|
|
|
|
'v1.0.0-alpha+001',
|
|
|
|
'1.0.0-beta+exp.sha.5114f85',
|
|
|
|
'v1.0.0+21AF26D3--117B344092BD',
|
|
|
|
];
|
|
|
|
|
|
|
|
foreach($tests as $test) {
|
|
|
|
$version = Version::parse($test);
|
|
|
|
$this->assertEquals($test, (string)$test);
|
|
|
|
}
|
|
|
|
|
|
|
|
$build = Version::parse('v1.0.0+21AF26D3--117B344092BD');
|
|
|
|
$pre = Version::parse('1.0.0-alpha');
|
|
|
|
$both = Version::parse('1.0.0-beta+exp.sha.5114f85');
|
|
|
|
|
|
|
|
$this->assertFalse($build->isPrerelease());
|
|
|
|
$this->assertTrue($pre->isPrerelease());
|
|
|
|
$this->assertTrue($both->isPrerelease());
|
|
|
|
|
|
|
|
$this->assertTrue(XArray::sequenceEquals($build->getBuild(), ['21AF26D3--117B344092BD']));
|
|
|
|
$this->assertTrue(XArray::sequenceEquals($pre->getPrerelease(), ['alpha']));
|
|
|
|
$this->assertTrue(XArray::sequenceEquals($both->getPrerelease(), ['beta']));
|
|
|
|
$this->assertTrue(XArray::sequenceEquals($both->getBuild(), ['exp', 'sha', '5114f85']));
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testCompare(): void {
|
|
|
|
$v1_0_0_alpha = Version::parse('v1.0.0-alpha');
|
|
|
|
$v1_0_0 = Version::parse('1.0.0');
|
|
|
|
$v1_0_0_build = Version::parse('1.0.0+build');
|
|
|
|
$v2_0_0 = Version::parse('v2.0.0');
|
|
|
|
$v2_1_0 = new Version(2, 1);
|
|
|
|
$v2_1_1 = new Version(2, 1, 1);
|
|
|
|
|
|
|
|
$this->assertEquals(0, $v1_0_0->compare($v1_0_0_build));
|
|
|
|
$this->assertEquals(-1, $v2_0_0->compare($v2_1_0));
|
|
|
|
$this->assertEquals(-1, $v2_0_0->compare($v2_1_0));
|
|
|
|
$this->assertEquals(-1, $v1_0_0->compare($v2_0_0));
|
|
|
|
$this->assertEquals(-1, $v1_0_0_alpha->compare($v1_0_0));
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testEquals(): void {
|
|
|
|
$v1_0_0_alpha = Version::parse('v1.0.0-alpha');
|
|
|
|
$v1_0_0 = Version::parse('1.0.0');
|
|
|
|
$v1_0_0_build = Version::parse('1.0.0+build');
|
|
|
|
$v2_0_0 = Version::parse('v2.0.0');
|
|
|
|
$v2_1_0 = new Version(2, 1);
|
|
|
|
$v2_1_1 = new Version(2, 1, 1);
|
|
|
|
|
|
|
|
$this->assertTrue($v1_0_0->equals($v1_0_0_build));
|
|
|
|
$this->assertFalse($v2_0_0->equals($v2_1_0));
|
|
|
|
$this->assertFalse($v2_0_0->equals($v2_1_0));
|
|
|
|
$this->assertFalse($v1_0_0->equals($v2_0_0));
|
|
|
|
$this->assertFalse($v1_0_0_alpha->equals($v1_0_0));
|
|
|
|
}
|
|
|
|
}
|