File tree Expand file tree Collapse file tree 5 files changed +32
-12
lines changed Expand file tree Collapse file tree 5 files changed +32
-12
lines changed Original file line number Diff line number Diff line change @@ -365,7 +365,7 @@ private static function detectConstants(string $class): array
365
365
{
366
366
if (!isset (self ::$ constants [$ class ])) {
367
367
$ reflection = new ReflectionClass ($ class );
368
- $ allConstants = [];
368
+ $ constants = [];
369
369
370
370
do {
371
371
$ scopeConstants = [];
@@ -376,16 +376,16 @@ private static function detectConstants(string $class): array
376
376
}
377
377
}
378
378
379
- $ allConstants = $ scopeConstants + $ allConstants ;
379
+ $ constants = $ scopeConstants + $ constants ;
380
380
} while (($ reflection = $ reflection ->getParentClass ()) && $ reflection ->name !== __CLASS__ );
381
381
382
382
assert (
383
- self ::noAmbiguousValues ($ allConstants ),
383
+ self ::noAmbiguousValues ($ constants ),
384
384
"Ambiguous enumerator values detected for {$ class }"
385
385
);
386
386
387
- self ::$ constants [$ class ] = $ allConstants ;
388
- self ::$ names [$ class ] = \array_keys ($ allConstants );
387
+ self ::$ constants [$ class ] = $ constants ;
388
+ self ::$ names [$ class ] = \array_keys ($ constants );
389
389
}
390
390
391
391
return self ::$ constants [$ class ];
Original file line number Diff line number Diff line change 9
9
use InvalidArgumentException ;
10
10
use OutOfBoundsException ;
11
11
use SeekableIterator ;
12
+ use TypeError ;
12
13
use UnexpectedValueException ;
13
14
14
15
/**
@@ -53,7 +54,8 @@ public function __construct(string $enumeration)
53
54
{
54
55
if (!\is_subclass_of ($ enumeration , Enum::class)) {
55
56
throw new InvalidArgumentException (\sprintf (
56
- "This EnumMap can handle subclasses of '%s' only " ,
57
+ '%s can handle subclasses of %s only ' ,
58
+ __CLASS__ ,
57
59
Enum::class
58
60
));
59
61
}
@@ -199,7 +201,14 @@ public function offsetUnset($enumerator): void
199
201
*/
200
202
public function seek ($ pos ): void
201
203
{
202
- $ pos = (int )$ pos ;
204
+ if (!is_int ($ pos )) {
205
+ throw new TypeError (\sprintf (
206
+ 'Argument 1 passed to %s() must be of the type int, %s given ' ,
207
+ __METHOD__ ,
208
+ gettype ($ pos )
209
+ ));
210
+ }
211
+
203
212
if (!isset ($ this ->ordinals [$ pos ])) {
204
213
throw new OutOfBoundsException ("Position {$ pos } not found " );
205
214
}
Original file line number Diff line number Diff line change @@ -70,7 +70,6 @@ public function unserialize($serialized)
70
70
self ::$ instances [$ class ][$ name ] = $ enumerator ;
71
71
}
72
72
};
73
- $ closure = $ closure ->bindTo ($ this , Enum::class);
74
- $ closure ();
73
+ $ closure ->bindTo ($ this , Enum::class)();
75
74
}
76
75
}
Original file line number Diff line number Diff line change @@ -69,8 +69,8 @@ public function __construct(string $enumeration)
69
69
{
70
70
if (!\is_subclass_of ($ enumeration , Enum::class)) {
71
71
throw new InvalidArgumentException (\sprintf (
72
- " %s can handle subclasses of '%s' only " ,
73
- static ::class ,
72
+ ' %s can handle subclasses of %s only ' ,
73
+ __METHOD__ ,
74
74
Enum::class
75
75
));
76
76
}
@@ -301,7 +301,7 @@ private function doCountInt(): int
301
301
302
302
// PHP does not support right shift unsigned
303
303
if ($ bitset < 0 ) {
304
- $ count = 1 ;
304
+ $ count = 1 ;
305
305
$ bitset = $ bitset & \PHP_INT_MAX ;
306
306
}
307
307
Original file line number Diff line number Diff line change @@ -319,6 +319,18 @@ public function testSeek()
319
319
$ enumMap ->seek (2 );
320
320
}
321
321
322
+ public function testSeekThrowsTypeError ()
323
+ {
324
+ $ enumMap = new EnumMap (EnumBasic::class);
325
+
326
+ $ this ->expectException (\TypeError::class);
327
+ $ this ->expectExceptionMessage (
328
+ 'Argument 1 passed to ' . EnumMap::class . '::seek() must be of the type int, string given '
329
+ );
330
+
331
+ $ enumMap ->seek ('0 ' );
332
+ }
333
+
322
334
public function testSerializable ()
323
335
{
324
336
$ enumMap = new EnumMap (EnumBasic::class);
You can’t perform that action at this time.
0 commit comments