From bc2d733a47782c614e20012b4dfe31b651f60fca Mon Sep 17 00:00:00 2001 From: Pol Dellaiera Date: Mon, 6 Jan 2020 19:22:05 +0100 Subject: [PATCH] Fix behavior of ::filter() operation. --- spec/loophp/collection/CollectionSpec.php | 15 +++++++++++---- src/Operation/Filter.php | 6 ++++-- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/spec/loophp/collection/CollectionSpec.php b/spec/loophp/collection/CollectionSpec.php index 437de795a..2bd1230e3 100644 --- a/spec/loophp/collection/CollectionSpec.php +++ b/spec/loophp/collection/CollectionSpec.php @@ -467,7 +467,7 @@ public function it_can_explode(): void ); } - public function it_can_filter_its_element(): void + public function it_can_filter(): void { $input = array_merge([0, false], range(1, 10)); @@ -488,10 +488,17 @@ public function it_can_filter_its_element(): void ->normalize() ->shouldIterateAs([1, 3, 5, 7, 9]); - $this - ->filter() + $this::with(['afooe', 'fooe', 'allo', 'llo']) + ->filter( + static function ($value) { + return 0 === mb_strpos($value, 'a'); + }, + static function ($value) { + return mb_strlen($value) - 1 === mb_strpos($value, 'o'); + } + ) ->normalize() - ->shouldIterateAs([]); + ->shouldIterateAs(['allo']); } public function it_can_flatten(): void diff --git a/src/Operation/Filter.php b/src/Operation/Filter.php index 5f5d31319..8d2aac6af 100644 --- a/src/Operation/Filter.php +++ b/src/Operation/Filter.php @@ -38,11 +38,13 @@ public function on(iterable $collection): Closure $callbacks = $this->callbacks; return static function () use ($callbacks, $collection): Generator { - $iterator = $collection; + $iterator = new IterableIterator($collection); foreach ($callbacks as $callback) { - yield from $iterator = new CallbackFilterIterator(new IterableIterator($iterator), $callback); + $iterator = new CallbackFilterIterator($iterator, $callback); } + + yield from $iterator; }; } }