Skip to content

Commit 8ac31f2

Browse files
committed
EmulatedUnitEnum should not care about values
1 parent 90f9b0c commit 8ac31f2

File tree

3 files changed

+30
-14
lines changed

3 files changed

+30
-14
lines changed

src/Mabe/Enum/Cl/EmulatedUnitEnum.php

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,12 @@
33
namespace Mabe\Enum\Cl;
44

55
use ArgumentCountError;
6+
use AssertionError;
67
use BadMethodCallException;
78
use LogicException;
89
use ReflectionClass;
910
use ReflectionClassConstant;
10-
use TypeError;
1111
use UnitEnum;
12-
use ValueError;
1312

1413
/**
1514
* Abstract base class for emulated unit enumerations.
@@ -37,11 +36,9 @@ abstract class EmulatedUnitEnum implements UnitEnum
3736
*/
3837
private static $cases = [];
3938

40-
/** @param int|string $value */
41-
final private function __construct(string $name, $value)
39+
final private function __construct(string $name)
4240
{
43-
$this->name = $name;
44-
$this->value = $value;
41+
$this->name = $name;
4542
}
4643

4744
/**
@@ -149,12 +146,7 @@ private static function init(string $enumClass)
149146

150147
$cases = [];
151148
foreach ($caseConstants as $name => $value) {
152-
assert(
153-
\count(\array_keys($caseConstants, $value, true)) === 1,
154-
"Enum case value for {$enumClass}::{$name} is ambiguous"
155-
);
156-
157-
$cases[$name] = new $enumClass($name, $value);
149+
$cases[$name] = new $enumClass($name);
158150
}
159151

160152
self::$cases[$enumClass] = $cases;

tests/BasicUnitEnumTest.php

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,31 @@ public function testCases()
4141
}, null));
4242
}
4343
}
44-
44+
45+
public function testUnitEnumDoesNotCareAboutValue()
46+
{
47+
if (PHP_VERSION_ID >= 80100) {
48+
$this->markTestSkipped('This test is for PHP < 8.1 only');
49+
}
50+
51+
$class = __FUNCTION__;
52+
53+
eval(
54+
'final class ' . $class . ' extends Mabe\Enum\Cl\EmulatedUnitEnum {'
55+
. ' const TEST1 = "test";'
56+
. ' const TEST2 = "test";'
57+
. '}'
58+
);
59+
60+
$test1 = $class::TEST1();
61+
$test2 = $class::TEST2();
62+
63+
static::assertNotSame($test1, $test2);
64+
static::assertSame($test1, $class::TEST1());
65+
static::assertSame($test2, $class::TEST2());
66+
static::assertSame([$test1, $test2], $class::cases());
67+
}
68+
4569
/* BasicUnitEnum::__callStatic() */
4670

4771
public function testCallStaticSuccess()

tests/EnumExistsTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ public function testAutoloadFalse()
125125
$classLoader = function (string $class) use ($enumClass, &$called) {
126126
if ($class === $enumClass) {
127127
$called++;
128-
eval('final class ' . $class . ' extends Mabe\Enum\Cl\StringEnumPolyfill {}');
128+
eval('final class ' . $class . ' extends Mabe\Enum\Cl\EmulatedStringEnum {}');
129129
}
130130
};
131131

0 commit comments

Comments
 (0)