diff --git a/src/AbstractCollection.php b/src/AbstractCollection.php index a8bd9dd..fe12ddb 100644 --- a/src/AbstractCollection.php +++ b/src/AbstractCollection.php @@ -14,9 +14,24 @@ class AbstractCollection implements CollectionInterface public function add(mixed $item): void { + if (null === $item) { + return; + } + $this->items[] = $item; } + public function remove(mixed $item): void + { + $key = array_search($item, $this->items, true); + + if ($key) { + unset($this->items[$key]); + } + + $this->items = array_values($this->items); + } + public function toArray(): array { return $this->items; diff --git a/src/Interface/CollectionInterface.php b/src/Interface/CollectionInterface.php index 9f052c8..22bcae2 100644 --- a/src/Interface/CollectionInterface.php +++ b/src/Interface/CollectionInterface.php @@ -1,4 +1,5 @@ assertEquals($expectedResult, $collection->toArray()); } + #[DataProvider('removeDataProvider')] + public function testRemove(array $startingArray, mixed $itemToRemove, array $expectedResult): void + { + $collection = new Collection($startingArray); + $collection->remove($itemToRemove); + + $this->assertEquals($expectedResult, $collection->toArray()); + } + public static function addDataProvider(): array { return [ [ - 'startingItems' => ['apple', 'banana', 'cherry'], - 'itemToAdd' => 'grape', - 'expectedResult' => ['apple', 'banana', 'cherry', 'grape'], + 'startingItems' => ['A', 'B', 'C'], + 'itemToAdd' => 'D', + 'expectedResult' => ['A', 'B', 'C', 'D'], ], [ 'startingItems' => [], 'itemToAdd' => 1, 'expectedResult' => [1], ], + [ + 'startingItems' => [], + 'itemToAdd' => null, + 'expectedResult' => [], + ], + ]; + } + public static function removeDataProvider(): array + { + return [ + [ + 'startingArray' => ['A', 'B', 'C'], + 'itemToRemove' => 'B', + 'expectedResult' => ['A', 'C'], + ], + [ + 'startingArray' => ['A', 'B', 'C'], + 'itemToRemove' => 'orange', + 'expectedResult' => ['A', 'B', 'C'], + ], + [ + 'startingArray' => [], + 'itemToRemove' => 'A', + 'expectedResult' => [], + ], ]; } } \ No newline at end of file