From 30ab89409b192005527fd78f720544448901f685 Mon Sep 17 00:00:00 2001 From: Marc Bennewitz Date: Sat, 4 May 2019 16:25:53 +0200 Subject: [PATCH 1/3] typo --- src/Enum.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Enum.php b/src/Enum.php index bc5afe2b..273cf212 100644 --- a/src/Enum.php +++ b/src/Enum.php @@ -167,7 +167,7 @@ final public function is($enumerator) * * @param static|null|bool|int|float|string|array $enumerator An enumerator object or value * @return static - * @throws InvalidArgumentException On an unknwon or invalid value + * @throws InvalidArgumentException On an unknown or invalid value * @throws LogicException On ambiguous constant values */ final public static function get($enumerator) @@ -184,7 +184,7 @@ final public static function get($enumerator) * * @param null|bool|int|float|string|array $value Enumerator value * @return static - * @throws InvalidArgumentException On an unknwon or invalid value + * @throws InvalidArgumentException On an unknown or invalid value * @throws LogicException On ambiguous constant values */ final public static function byValue($value) From 92e95586f49c93d8cc142a0d8f4031a52ad921aa Mon Sep 17 00:00:00 2001 From: Marc Bennewitz Date: Sun, 5 May 2019 08:27:10 +0200 Subject: [PATCH 2/3] Enum::__callStatic() should call static::byName() instead of self::byName() --- src/Enum.php | 2 +- tests/MabeEnumTest/EnumTest.php | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/Enum.php b/src/Enum.php index 273cf212..ceb29173 100644 --- a/src/Enum.php +++ b/src/Enum.php @@ -423,6 +423,6 @@ private static function noAmbiguousValues($constants) */ final public static function __callStatic(string $method, array $args) { - return self::byName($method); + return static::byName($method); } } diff --git a/tests/MabeEnumTest/EnumTest.php b/tests/MabeEnumTest/EnumTest.php index 219e9647..e451e70a 100644 --- a/tests/MabeEnumTest/EnumTest.php +++ b/tests/MabeEnumTest/EnumTest.php @@ -101,10 +101,22 @@ public function testEnumInheritance() ), EnumInheritance::getConstants()); $enum = EnumInheritance::get(EnumInheritance::ONE); + $this->assertInstanceOf(EnumInheritance::class, $enum); $this->assertSame(EnumInheritance::ONE, $enum->getValue()); $this->assertSame(0, $enum->getOrdinal()); $enum = EnumInheritance::get(EnumInheritance::INHERITANCE); + $this->assertInstanceOf(EnumInheritance::class, $enum); + $this->assertSame(EnumInheritance::INHERITANCE, $enum->getValue()); + $this->assertSame(17, $enum->getOrdinal()); + + $enum = EnumInheritance::ONE(); + $this->assertInstanceOf(EnumInheritance::class, $enum); + $this->assertSame(EnumInheritance::ONE, $enum->getValue()); + $this->assertSame(0, $enum->getOrdinal()); + + $enum = EnumInheritance::INHERITANCE(); + $this->assertInstanceOf(EnumInheritance::class, $enum); $this->assertSame(EnumInheritance::INHERITANCE, $enum->getValue()); $this->assertSame(17, $enum->getOrdinal()); } From 02e9a2fd0f7e6e1ce09e0e28e65ce7168e42b13f Mon Sep 17 00:00:00 2001 From: Marc Bennewitz Date: Tue, 21 May 2019 21:59:12 +0200 Subject: [PATCH 3/3] fix call static in SerializableTrait --- src/EnumSerializableTrait.php | 4 ++-- tests/MabeEnumTest/EnumSerializableTraitTest.php | 13 +++++++++++++ .../TestAsset/ExtendedSerializableEnum.php | 15 +++++++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 tests/MabeEnumTest/TestAsset/ExtendedSerializableEnum.php diff --git a/src/EnumSerializableTrait.php b/src/EnumSerializableTrait.php index e304a60c..a791aed6 100644 --- a/src/EnumSerializableTrait.php +++ b/src/EnumSerializableTrait.php @@ -24,7 +24,7 @@ trait EnumSerializableTrait { /** * The method will be defined by MabeEnum\Enum - * @return null|bool|int|float|string + * @return null|bool|int|float|string|array */ abstract public function getValue(); @@ -49,7 +49,7 @@ public function serialize(): string public function unserialize($serialized): void { $value = \unserialize($serialized); - $constants = self::getConstants(); + $constants = static::getConstants(); $name = \array_search($value, $constants, true); if ($name === false) { $message = \is_scalar($value) diff --git a/tests/MabeEnumTest/EnumSerializableTraitTest.php b/tests/MabeEnumTest/EnumSerializableTraitTest.php index c7aefa89..c09842fe 100644 --- a/tests/MabeEnumTest/EnumSerializableTraitTest.php +++ b/tests/MabeEnumTest/EnumSerializableTraitTest.php @@ -4,6 +4,7 @@ use LogicException; use MabeEnum\Enum; +use MabeEnumTest\TestAsset\ExtendedSerializableEnum; use MabeEnumTest\TestAsset\SerializableEnum; use PHPUnit\Framework\TestCase; use ReflectionClass; @@ -65,6 +66,18 @@ public function testUnserializeThrowsLogicExceptionOnChangingValue() $enum->unserialize(serialize(SerializableEnum::STR)); } + public function testInheritence() + { + $enum = ExtendedSerializableEnum::EXTENDED(); + + $serialized = serialize($enum); + $this->assertInternalType('string', $serialized); + + $unserialized = unserialize($serialized); + $this->assertInstanceOf(ExtendedSerializableEnum::class, $unserialized); + $this->assertSame($enum->getValue(), $unserialized->getValue()); + } + /** * Clears all instantiated enumerations and detected constants of the given enumerator * @param string $enumeration diff --git a/tests/MabeEnumTest/TestAsset/ExtendedSerializableEnum.php b/tests/MabeEnumTest/TestAsset/ExtendedSerializableEnum.php new file mode 100644 index 00000000..90126e63 --- /dev/null +++ b/tests/MabeEnumTest/TestAsset/ExtendedSerializableEnum.php @@ -0,0 +1,15 @@ +