* Добавлено перечисление VersionCompareRangeOption. * В классе VersionInfo добавлен метод CompareWithRange.
134 lines
5.2 KiB
PHP
134 lines
5.2 KiB
PHP
<?php
|
||
|
||
namespace goodboyalex\php_components_pack\tests\classes;
|
||
|
||
use goodboyalex\php_components_pack\classes\ObjectArray;
|
||
use goodboyalex\php_components_pack\classes\VersionInfo;
|
||
use goodboyalex\php_components_pack\enums\VersionInfoStage;
|
||
use PHPUnit\Framework\TestCase;
|
||
|
||
class VersionInfoTest extends TestCase
|
||
{
|
||
public function testCompareWith ()
|
||
{
|
||
$this->PrepareForTest();
|
||
|
||
$versionInfo1 = new VersionInfo(1, 2, 3, 4, VersionInfoStage::Beta, 1);
|
||
$versionInfo2 = new VersionInfo(1, 1, 3, 4, VersionInfoStage::Alpha, 2);
|
||
|
||
$this->assertEquals(1, $versionInfo1->CompareWith($versionInfo2));
|
||
|
||
}
|
||
|
||
private function PrepareForTest (): void
|
||
{
|
||
require_once __DIR__ . '/../../sources/enums/VersionInfoStage.php';
|
||
require_once __DIR__ . '/../../sources/classes/VersionInfo.php';
|
||
}
|
||
|
||
public function test__toString ()
|
||
{
|
||
$this->PrepareForTest();
|
||
$versionInfo = new VersionInfo(1, 2, 3, 4, VersionInfoStage::Beta, 1);
|
||
$this->assertEquals('1.2.3.4 Beta 1', $versionInfo->__toString());
|
||
}
|
||
|
||
public function testToString ()
|
||
{
|
||
$this->PrepareForTest();
|
||
$versionInfo = new VersionInfo(1, 2, 3, 4, VersionInfoStage::Beta, 1);
|
||
|
||
$template = "Это #{Stage} #{StageNumber} версии #{Major}.#{Minor}.#{Release}.#{Build}";
|
||
|
||
$stageNames = [
|
||
VersionInfoStage::PreAlpha->value => 'рано',
|
||
VersionInfoStage::Alpha->value => 'начало',
|
||
VersionInfoStage::Beta->value => 'середнячок',
|
||
VersionInfoStage::ReleaseCandidate->value => 'почти',
|
||
VersionInfoStage::Stable->value => 'это релиз, детка!'
|
||
];
|
||
|
||
$this->assertEquals('Это середнячок 1 версии 1.2.3.4', $versionInfo->ToString($template, $stageNames));
|
||
}
|
||
|
||
public function testParse ()
|
||
{
|
||
$this->PrepareForTest();
|
||
|
||
$stageNames = [
|
||
VersionInfoStage::PreAlpha->value => 'pre',
|
||
VersionInfoStage::Alpha->value => 'alpha',
|
||
VersionInfoStage::Beta->value => 'beta',
|
||
VersionInfoStage::ReleaseCandidate->value => 'rc',
|
||
VersionInfoStage::Stable->value => 'stable'
|
||
];
|
||
|
||
$version = VersionInfo::Parse('1.2.3.4 beta 1', $stageNames);
|
||
|
||
$this->assertEquals(1, $version->Major);
|
||
$this->assertEquals(2, $version->Minor);
|
||
$this->assertEquals(3, $version->Release);
|
||
$this->assertEquals(4, $version->Build);
|
||
$this->assertEquals(VersionInfoStage::Beta, $version->Stage);
|
||
$this->assertEquals(1, $version->StageNumber);
|
||
}
|
||
|
||
public function test__construct ()
|
||
{
|
||
$this->PrepareForTest();
|
||
|
||
$version = new VersionInfo(1, 2, 3, 4, VersionInfoStage::Beta, 1);
|
||
|
||
$this->assertEquals(2, $version->Minor);
|
||
}
|
||
|
||
public function testCompare ()
|
||
{
|
||
$this->PrepareForTest();
|
||
|
||
$versionInfo1 = new VersionInfo(1, 2, 3, 4, VersionInfoStage::Beta, 1);
|
||
$versionInfo2 = new VersionInfo(1, 1, 3, 4, VersionInfoStage::Alpha, 2);
|
||
|
||
$this->assertEquals(1, VersionInfo::Compare($versionInfo1, $versionInfo2));
|
||
}
|
||
|
||
public function testCompareWithRange ()
|
||
{
|
||
$this->PrepareForTest();
|
||
|
||
$versionInfo1 = new VersionInfo(1, 2, 3, 4, VersionInfoStage::Beta, 1);
|
||
|
||
$versionInfo2 = new VersionInfo(1, 1, 3, 4, VersionInfoStage::Alpha, 2);
|
||
|
||
$versionInfo3 = new VersionInfo(1, 1, 1, 1, VersionInfoStage::Alpha, 2);
|
||
|
||
$versionInfo4 = new VersionInfo(5, 5, 5, 5, VersionInfoStage::Stable);
|
||
|
||
$optionNotBorder = new ObjectArray();
|
||
|
||
// Для начала простое сравнение
|
||
$this->assertEquals(0, $versionInfo1->CompareWithRange($versionInfo3, $versionInfo4));
|
||
$this->assertEquals(-1, $versionInfo2->CompareWithRange($versionInfo1, $versionInfo4));
|
||
$this->assertEquals(1, $versionInfo4->CompareWithRange($versionInfo2, $versionInfo1));
|
||
|
||
// Немного перепутаем границы =)
|
||
$this->assertEquals(1, $versionInfo4->CompareWithRange($versionInfo1, $versionInfo2));
|
||
|
||
// А теперь с границами
|
||
// - значение равно левой границе
|
||
$this->assertEquals(0, $versionInfo2->CompareWithRange($versionInfo2, $versionInfo1));
|
||
// - значение равно правой границе
|
||
$this->assertEquals(0, $versionInfo1->CompareWithRange($versionInfo2, $versionInfo1));
|
||
// - а теперь с выключением границ
|
||
// -- для левой
|
||
$this->assertEquals(-1, $versionInfo2->CompareWithRange($versionInfo2, $versionInfo1, $optionNotBorder));
|
||
// -- для правой
|
||
$this->assertEquals(1, $versionInfo1->CompareWithRange($versionInfo2, $versionInfo1, $optionNotBorder));
|
||
|
||
// А что если границы равны и значение равно
|
||
// - для включённых границ
|
||
$this->assertEquals(0, $versionInfo1->CompareWithRange($versionInfo1, $versionInfo1));
|
||
// - для выключённых границ
|
||
$this->assertEquals(-1, $versionInfo1->CompareWithRange($versionInfo1, $versionInfo1, $optionNotBorder));
|
||
}
|
||
} |