4
4
5
5
use MabeEnumTest \TestAsset \SerializableEnum ;
6
6
use PHPUnit_Framework_TestCase as TestCase ;
7
+ use ReflectionClass ;
7
8
8
9
/**
9
10
* Unit tests for the trait MabeEnum\EnumSerializableTrait
@@ -16,11 +17,9 @@ class EnumSerializableTraitTest extends TestCase
16
17
{
17
18
public function setUp ()
18
19
{
19
- if (version_compare ( PHP_VERSION , ' 5.4 ' , ' < ' ) ) {
20
+ if (PHP_VERSION_ID < 50400 ) {
20
21
$ this ->markTestSkipped ('Traits require PHP-5.4 ' );
21
22
}
22
-
23
- SerializableEnum::clear ();
24
23
}
25
24
26
25
public function testSerializeSerializableEnum ()
@@ -38,7 +37,7 @@ public function testUnserializeFirstWillHoldTheSameInstance()
38
37
$ this ->assertInternalType ('string ' , $ serialized );
39
38
40
39
// clear all instantiated instances so we can virtual test unserializing first
41
- SerializableEnum:: clear ( );
40
+ $ this -> clearEnumeration ( ' MabeEnumTest\TestAsset\SerializableEnum ' );
42
41
43
42
// First unserialize
44
43
$ unserialized = unserialize ($ serialized );
@@ -69,4 +68,23 @@ public function testUnserializeThrowsLogicExceptionOnChangingValue()
69
68
$ enum = SerializableEnum::get (SerializableEnum::INT );
70
69
$ enum ->unserialize (serialize (SerializableEnum::STR ));
71
70
}
71
+
72
+ /**
73
+ * Clears all instantiated enumerations and detected constants of the given enumerator
74
+ * @param string $enumeration
75
+ */
76
+ private function clearEnumeration ($ enumeration )
77
+ {
78
+ $ reflClass = new ReflectionClass ($ enumeration );
79
+ while ($ reflClass ->getName () !== 'MabeEnum\Enum ' ) {
80
+ $ reflClass = $ reflClass ->getParentClass ();
81
+ }
82
+
83
+ $ reflPropInstances = $ reflClass ->getProperty ('instances ' );
84
+ $ reflPropInstances ->setAccessible (true );
85
+ $ reflPropInstances ->setValue (null , array ());
86
+ $ reflPropConstants = $ reflClass ->getProperty ('constants ' );
87
+ $ reflPropConstants ->setAccessible (true );
88
+ $ reflPropConstants ->setValue (null , array ());
89
+ }
72
90
}
0 commit comments