Rx\Functional\Operator\GroupByUntilTest::groupByUntilInnerEscapeDispose PHP Method

groupByUntilInnerEscapeDispose() public method

    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());
    }