Skip to content

Commit 1d0ac63

Browse files
committed
fixed bug in EnumMap::offsetSet()
1 parent 6227f02 commit 1d0ac63

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

src/EnumMap.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ public function offsetSet($enumerator, $value = null)
171171
$enumeration = $this->enumeration;
172172
$ord = $enumeration::get($enumerator)->getOrdinal();
173173

174-
if (!isset($this->map[$ord])) {
174+
if (!array_key_exists($ord, $this->map)) {
175175
$this->ordinals[] = $ord;
176176
}
177177
$this->map[$ord] = $value;

tests/MabeEnumTest/EnumMapTest.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,9 @@ public function testNullValue()
242242
$enumMap = new EnumMap(EnumBasic::class);
243243
$enumMap[EnumBasic::ONE()] = null;
244244

245+
$this->assertSame(1, $enumMap->count());
246+
$this->assertSame([EnumBasic::ONE()], $enumMap->getKeys());
247+
245248
$enumMap->rewind();
246249
$this->assertSame(1, $enumMap->count());
247250
$this->assertTrue($enumMap->valid());
@@ -252,7 +255,28 @@ public function testNullValue()
252255
$this->assertFalse(isset($enumMap[EnumBasic::ONE()]));
253256
$this->assertFalse($enumMap->offsetExists(EnumBasic::ONE));
254257
$this->assertFalse($enumMap->offsetExists(EnumBasic::ONE()));
258+
$this->assertTrue($enumMap->contains(EnumBasic::ONE));
259+
$this->assertTrue($enumMap->contains(EnumBasic::ONE()));
260+
261+
// add the same enumeration a second time should do nothing
262+
$enumMap->offsetSet(EnumBasic::ONE(), null);
263+
$this->assertSame(1, $enumMap->count());
264+
$this->assertSame([EnumBasic::ONE()], $enumMap->getKeys());
265+
266+
// overwrite by non null value
267+
$enumMap->offsetSet(EnumBasic::ONE(), false);
268+
$this->assertSame(1, $enumMap->count());
269+
$this->assertSame([EnumBasic::ONE()], $enumMap->getKeys());
255270

271+
$this->assertSame(1, $enumMap->count());
272+
$this->assertTrue($enumMap->valid());
273+
$this->assertSame(EnumBasic::ONE(), $enumMap->key());
274+
$this->assertFalse($enumMap->current());
275+
276+
$this->assertTrue(isset($enumMap[EnumBasic::ONE]));
277+
$this->assertTrue(isset($enumMap[EnumBasic::ONE()]));
278+
$this->assertTrue($enumMap->offsetExists(EnumBasic::ONE));
279+
$this->assertTrue($enumMap->offsetExists(EnumBasic::ONE()));
256280
$this->assertTrue($enumMap->contains(EnumBasic::ONE));
257281
$this->assertTrue($enumMap->contains(EnumBasic::ONE()));
258282
}

0 commit comments

Comments
 (0)