public function testFilter() { $records = [1, false, null, '']; $collection = new Collection($records); $this->expectsException(function () use($collection) { $collection->filter('exception'); }, Exception::class, null, Exception::INVALID_CALLBACK); // default behaviour: filter returns a new Collection $filtered = $collection->filter(); $this->assertInstanceOf(Collection::class, $filtered); $this->assertSame($collection, $filtered); $this->assertEquals([1], $filtered->getArrayCopy()); // alternative: it returns self $filtered = $collection->copy()->filter(); $this->assertInstanceOf(Collection::class, $filtered); $this->assertNotSame($collection, $filtered); $this->assertEquals([1], $filtered->getArrayCopy()); // other scenarii $records = [1, 'test', 'test', '']; $collection = new Collection($records); $filtered = $collection->filter(function () { return false; }); $this->assertInstanceOf(Collection::class, $filtered); $this->assertSame($collection, $filtered); $this->assertEquals([], $filtered->getArrayCopy()); $filtered = $collection->filter(function () { return false; }, true); $this->assertSame($collection, $filtered); $this->assertEquals([], $filtered->getArrayCopy()); }