* Добавлено перечисление 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));
 | ||
|     }
 | ||
| } |