/** * @dataProvider theImplementations */ public function testThatMaintainsCorrectSameIteratorScheme(\Pinq\ITraversable $traversable, array $data) { $originalScheme = $traversable->getIteratorScheme(); $queriedTraversable = $traversable->where(function () { throw new \Exception('This should never be executed'); })->append([])->difference([])->except([])->groupBy(function () { return 1; })->groupJoin([])->on(function () { return true; })->to(function () { return 1; })->indexBy(function () { return 1; })->intersect([])->join([])->on(function () { return true; })->to(function () { return 1; })->keys()->orderBy(function () { return 1; }, \Pinq\Direction::ASCENDING)->thenByDescending(function () { return 1; })->reindex()->select(function () { return 1; })->selectMany(function () { return []; })->skip(1)->take(5)->union([])->where(function () { return true; })->whereIn([]); //Well that was fun $this->assertSame($originalScheme, $queriedTraversable->getIteratorScheme()); }
/** * @dataProvider people */ public function testWhereCondition(\Pinq\ITraversable $traversable, array $data) { $fileteredNames = $traversable->where(function ($i) { return strpos($i['firstName'], 'D') !== false; })->implode(':', function ($i) { return $i['firstName'] . ' ' . $i['lastName']; }); $this->assertEquals('Daniel Farmer:Dave Desopolous:David Faller:Daniel Dekresta', $fileteredNames); }
/** * @dataProvider assocOneToTen */ public function testThatElementsAreFilteredFromTraversableAndPreserveKeys(\Pinq\ITraversable $numbers, array $data) { $predicate = function ($i) { return $i % 2 === 0; }; $evenNumbers = $numbers->where($predicate); foreach ($data as $key => $value) { if (!$predicate($value)) { unset($data[$key]); } } $this->assertMatches($evenNumbers, $data); }
public function visitFilter(Segments\Filter $query) { $this->traversable = $this->traversable->where($this->resolvedParameters[$query->getProjectionFunction()->getCallableId()]); }
/** * @dataProvider theImplementations */ public function testThatExecutionIsDeferred(\Pinq\ITraversable $traversable, array $data) { $this->assertThatExecutionIsDeferred(function (callable $function) use($traversable) { return $traversable->where($function)->reindex(); }); }