public function groupByUntilInnerEscapeDispose()
{
$xs = $this->createHotObservable([onNext(220, ' foo'), onNext(240, ' FoO '), onNext(310, 'foO '), onNext(470, 'FOO '), onNext(530, ' fOo '), onError(570, new \Exception())]);
$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 ($group) use(&$inner) {
$inner = $group;
});
});
$this->scheduler->scheduleAbsolute(290, function () use(&$outerSubscription) {
$outerSubscription->dispose();
});
$this->scheduler->scheduleAbsolute(600, function () use(&$innerSubscription, &$inner, $results) {
$innerSubscription = $inner->subscribe($results);
});
$this->scheduler->scheduleAbsolute(TestScheduler::DISPOSED, function () use(&$outerSubscription) {
$outerSubscription->dispose();
});
$this->scheduler->start();
$this->assertSubscriptions([subscribe(200, 290)], $xs->getSubscriptions());
$this->assertMessages([], $results->getMessages());
}