Rx\Functional\Operator\GroupByUntilTest::groupByUntilInnerEscapeError PHP Метод

groupByUntilInnerEscapeError() публичный Метод

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