| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 | 
							- <?php
 
- declare(strict_types = 1);
 
- namespace DASPRiD\EnumTest;
 
- use DASPRiD\Enum\AbstractEnum;
 
- use DASPRiD\Enum\Exception\CloneNotSupportedException;
 
- use DASPRiD\Enum\Exception\IllegalArgumentException;
 
- use DASPRiD\Enum\Exception\MismatchException;
 
- use DASPRiD\Enum\Exception\SerializeNotSupportedException;
 
- use DASPRiD\Enum\Exception\UnserializeNotSupportedException;
 
- use PHPUnit\Framework\TestCase;
 
- use ReflectionClass;
 
- final class AbstractEnumTest extends TestCase
 
- {
 
-     public function setUp(): void
 
-     {
 
-         $reflectionClass = new ReflectionClass(AbstractEnum::class);
 
-         $constantsProperty = $reflectionClass->getProperty('constants');
 
-         $constantsProperty->setAccessible(true);
 
-         $constantsProperty->setValue([]);
 
-         $valuesProperty = $reflectionClass->getProperty('values');
 
-         $valuesProperty->setAccessible(true);
 
-         $valuesProperty->setValue([]);
 
-         $allValuesLoadedProperty = $reflectionClass->getProperty('allValuesLoaded');
 
-         $allValuesLoadedProperty->setAccessible(true);
 
-         $allValuesLoadedProperty->setValue([]);
 
-     }
 
-     public function testToString() : void
 
-     {
 
-         $weekday = WeekDay::FRIDAY();
 
-         self::assertSame('FRIDAY', (string) $weekday);
 
-     }
 
-     public function testName() : void
 
-     {
 
-         $this->assertSame('WEDNESDAY', WeekDay::WEDNESDAY()->name());
 
-     }
 
-     public function testOrdinal() : void
 
-     {
 
-         $this->assertSame(2, WeekDay::WEDNESDAY()->ordinal());
 
-     }
 
-     public function testSameInstanceIsReturned() : void
 
-     {
 
-         self::assertSame(WeekDay::FRIDAY(), WeekDay::FRIDAY());
 
-     }
 
-     public static function testValueOf() : void
 
-     {
 
-         self::assertSame(WeekDay::FRIDAY(), WeekDay::valueOf('FRIDAY'));
 
-     }
 
-     public function testValueOfInvalidConstant() : void
 
-     {
 
-         $this->expectException(IllegalArgumentException::class);
 
-         WeekDay::valueOf('CATURDAY');
 
-     }
 
-     public function testExceptionOnCloneAttempt() : void
 
-     {
 
-         $this->expectException(CloneNotSupportedException::class);
 
-         clone WeekDay::FRIDAY();
 
-     }
 
-     public function testExceptionOnSerializeAttempt() : void
 
-     {
 
-         $this->expectException(SerializeNotSupportedException::class);
 
-         serialize(WeekDay::FRIDAY());
 
-     }
 
-     public function testExceptionOnUnserializeAttempt() : void
 
-     {
 
-         $this->expectException(UnserializeNotSupportedException::class);
 
-         unserialize('O:24:"DASPRiD\\EnumTest\\WeekDay":0:{}');
 
-     }
 
-     public function testReturnValueOfValuesIsSortedByOrdinal() : void
 
-     {
 
-         // Initialize some week days out of order
 
-         WeekDay::SATURDAY();
 
-         WeekDay::TUESDAY();
 
-         $ordinals = array_values(array_map(function (WeekDay $weekDay) : int {
 
-             return $weekDay->ordinal();
 
-         }, WeekDay::values()));
 
-         self::assertSame([0, 1, 2, 3, 4, 5, 6], $ordinals);
 
-         $cachedOrdinals = array_values(array_map(function (WeekDay $weekDay) : int {
 
-             return $weekDay->ordinal();
 
-         }, WeekDay::values()));
 
-         $this->assertSame($ordinals, $cachedOrdinals);
 
-     }
 
-     public function testCompareTo() : void
 
-     {
 
-         $this->assertSame(-4, WeekDay::WEDNESDAY()->compareTo(WeekDay::SUNDAY()));
 
-         $this->assertSame(4, WeekDay::SUNDAY()->compareTo(WeekDay::WEDNESDAY()));
 
-         $this->assertSame(0, WeekDay::WEDNESDAY()->compareTo(WeekDay::WEDNESDAY()));
 
-     }
 
-     public function testCompareToWrongEnum() : void
 
-     {
 
-         $this->expectException(MismatchException::class);
 
-         WeekDay::MONDAY()->compareTo(Planet::EARTH());
 
-     }
 
-     public function testParameterizedEnum() : void
 
-     {
 
-         $planet = Planet::EARTH();
 
-         $this->assertSame(5.976e+24, $planet->mass());
 
-         $this->assertSame(6.37814e6, $planet->radius());
 
-     }
 
- }
 
 
  |