public function groupByUntilInnerEscapeError()
{
$error = new \Exception();
$xs = $this->createHotObservable([onNext(220, ' foo'), onNext(240, ' FoO '), onNext(310, 'foO '), onNext(470, 'FOO '), onNext(530, ' fOo '), onError(570, $error)]);
$results = $this->scheduler->createObserver();
$inner = null;
$innerSubscription = null;
$outer = null;
$outerSubscription = null;
$this->scheduler->scheduleAbsolute(TestScheduler::CREATED, function () use(&$outer, $xs) {
$outer = $xs->groupByUntil(function ($x) {
return trim(strtolower($x));
}, function ($x) {
return strrev($x);
}, function ($g) {
return $g->skip(2);
});
});
$this->scheduler->scheduleAbsolute(TestScheduler::SUBSCRIBED, function () use(&$outerSubscription, &$outer, &$inner) {
$outerSubscription = $outer->subscribeCallback(function (GroupedObservable $group) use(&$inner) {
$inner = $group;
}, function () {
});
});
$this->scheduler->scheduleAbsolute(600, function () use(&$innerSubscription, &$inner, $results) {
$innerSubscription = $inner->subscribe($results);
});
$this->scheduler->scheduleAbsolute(TestScheduler::DISPOSED, function () use(&$innerSubscription, &$outerSubscription) {
$outerSubscription->dispose();
$innerSubscription->dispose();
});
$this->scheduler->start();
$this->assertSubscriptions([subscribe(200, 570)], $xs->getSubscriptions());
$this->assertMessages([onError(600, $error)], $results->getMessages());
}