expectException(\ValueError::class); Color::fromName('Purple'); } // ------------------------------------------------------------------------- // tryFromName() // ------------------------------------------------------------------------- public function testTryFromNameReturnsCorrectCase(): void { self::assertSame(Color::Red, Color::tryFromName('Red')); } public function testTryFromNameReturnsNullForUnknownName(): void { self::assertNull(Color::tryFromName('Magenta')); } // ------------------------------------------------------------------------- // toArray() — inherited via EnumTrait, but backed path tested here // ------------------------------------------------------------------------- public function testToArrayReturnsValueToNameMapping(): void { self::assertSame( ['red' => 'Red', 'green' => 'Green', 'blue' => 'Blue'], Color::toArray(), ); } public function testToArrayForIntBackedEnum(): void { self::assertSame( [1 => 'Low', 2 => 'Medium', 3 => 'High'], Priority::toArray(), ); } // ------------------------------------------------------------------------- // is() with scalar (backed enum path) // ------------------------------------------------------------------------- public function testIsReturnsTrueForMatchingValue(): void { self::assertTrue(Color::Green->is('green')); } public function testIsReturnsFalseForOtherValue(): void { self::assertFalse(Color::Green->is('red')); } public function testIsReturnsTrueForIntValue(): void { self::assertTrue(Priority::Medium->is(2)); } // ------------------------------------------------------------------------- // find() — backed enum paths (value + case-insensitive) // ------------------------------------------------------------------------- public function testFindByValue(): void { self::assertSame(Color::Blue, Color::find('blue')); } public function testFindByValueCaseInsensitive(): void { self::assertSame(Color::Red, Color::find('RED', ignoreCase: true)); } public function testFindByNameCaseInsensitive(): void { self::assertSame(Color::Green, Color::find('green', ignoreCase: true)); } public function testFindReturnsNullForUnknown(): void { self::assertNull(Color::find('violet')); } // ------------------------------------------------------------------------- // toValueArray() // ------------------------------------------------------------------------- public function testToValueArrayReturnsNameToValueMapping(): void { self::assertSame( ['Red' => 'red', 'Green' => 'green', 'Blue' => 'blue'], Color::toValueArray(), ); } public function testToValueArrayForIntBackedEnum(): void { self::assertSame( ['Low' => 1, 'Medium' => 2, 'High' => 3], Priority::toValueArray(), ); } }