php_components_pack/tests/classes/VersionInfoTest.php
babaev-an 1290a567de 20250625
* Добавлено перечисление VersionCompareRangeOption.
* В классе VersionInfo добавлен метод CompareWithRange.
2025-06-25 23:24:50 +03:00

134 lines
5.2 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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));
}
}