given( $foobar = $this->getDummyIterator(), $filter = new LUT\CallbackFilter( $foobar, function ($value) { return false === in_array($value, ['a', 'e', 'i', 'o', 'u']); } ) ) ->when($result = iterator_to_array($filter)) ->then ->array($result) ->isEqualTo([ 0 => 'f', 3 => 'b', 5 => 'r' ]); } public function case_all_callback_parameters() { $self = $this; $this ->given( $foobar = $this->getDummyIterator(), $keys = [], $values = [], $filter = new LUT\CallbackFilter( $foobar, function ($value, $key, $iterator) use ( $self, $foobar, &$keys, &$values ) { $self ->object($iterator) ->isIdenticalTo($foobar); $keys[] = $key; $values[] = $value; return false === in_array($value, ['a', 'e', 'i', 'o', 'u']); } ) ) ->when($result = iterator_to_array($filter)) ->then ->array($result) ->isEqualTo([ 0 => 'f', 3 => 'b', 5 => 'r' ]) ->array(array_combine($keys, $values)) ->isEqualTo(iterator_to_array($foobar)); } public function case_remove_all() { $this ->given( $foobar = $this->getDummyIterator(), $filter = new LUT\CallbackFilter( $foobar, function () { return false; } ) ) ->when($result = iterator_to_array($filter)) ->then ->array($result) ->isEmpty(); } public function case_remove_none() { $this ->given( $foobar = $this->getDummyIterator(), $filter = new LUT\CallbackFilter( $foobar, function () { return true; } ) ) ->when( $foobarResult = iterator_to_array($foobar), $filterResult = iterator_to_array($filter) ) ->then ->array($foobarResult) ->isEqualTo($filterResult); } public function case_recursive() { $this ->given( $foobar = $this->getDummyRecursiveIterator(), $filter = new LUT\Recursive\CallbackFilter( $foobar, function ($value) { return false === in_array($value, ['a', 'e', 'i', 'o', 'u']); } ), $iterator = new LUT\Recursive\Iterator($filter) ) ->when($result = iterator_to_array($iterator, false)) ->then ->array($result) ->isEqualTo([ 0 => 'f', 1 => 'b', 2 => 'r' ]); } public function case_recursive_remove_all() { $this ->given( $foobar = $this->getDummyRecursiveIterator(), $filter = new LUT\Recursive\CallbackFilter( $foobar, function () { return false; } ), $iterator = new LUT\Recursive\Iterator($filter) ) ->when($result = iterator_to_array($iterator)) ->then ->array($result) ->isEmpty(); } public function case_recursive_remove_none() { $this ->given( $foobar = $this->getDummyRecursiveIterator(), $filter = new LUT\Recursive\CallbackFilter( $foobar, function () { return true; } ), $foobarIterator = new LUT\Recursive\Iterator($foobar), $filterIterator = new LUT\Recursive\Iterator($filter) ) ->when( $foobarResult = iterator_to_array($foobarIterator), $filterResult = iterator_to_array($filterIterator) ) ->then ->array($foobarResult) ->isEqualTo($filterResult); } protected function getDummyIterator() { return new LUT\Map(['f', 'o', 'o', 'b', 'a', 'r']); } protected function getDummyRecursiveIterator() { return new LUT\Recursive\Map([['f', 'o', 'o'], ['b', 'a', 'r']]); } }