public function groupByUntilDefault()
{
$keyInvoked = 0;
$eleInvoked = 0;
$xs = $this->createHotObservable([onNext(90, new \Exception()), onNext(110, new \Exception()), onNext(130, new \Exception()), onNext(220, ' foo'), onNext(240, ' FoO '), onNext(270, 'baR '), onNext(310, 'foO '), onNext(350, ' Baz '), onNext(360, ' qux '), onNext(390, ' bar'), onNext(420, ' BAR '), onNext(470, 'FOO '), onNext(480, 'baz '), onNext(510, ' bAZ '), onNext(530, ' fOo '), onCompleted(570), onNext(580, new \Exception()), onCompleted(600), onError(650, new \Exception())]);
$results = $this->scheduler->startWithCreate(function () use($xs, &$keyInvoked, &$eleInvoked) {
return $xs->groupByUntil(function ($x) use(&$keyInvoked) {
$keyInvoked++;
return trim(strtolower($x));
}, function ($x) use(&$eleInvoked) {
$eleInvoked++;
return strrev($x);
}, function ($g) {
return $g->skip(2);
})->map(function (GroupedObservable $x) {
return $x->getKey();
});
});
$this->assertMessages([onNext(220, 'foo'), onNext(270, 'bar'), onNext(350, 'baz'), onNext(360, 'qux'), onNext(470, 'foo'), onCompleted(570)], $results->getMessages());
$this->assertSubscriptions([subscribe(200, 570)], $xs->getSubscriptions());
$this->assertEquals(12, $keyInvoked);
$this->assertEquals(12, $eleInvoked);
}