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

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

    public function groupByUntilInnerComplete()
    {
        $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())]);
        $inners = [];
        $innerSubscriptions = [];
        $results = [];
        $outer = null;
        $outerSubscription = null;
        $this->scheduler->scheduleAbsolute(TestScheduler::CREATED, function () use($xs, &$outer) {
            $outer = $xs->groupByUntil(function ($x) {
                return trim(strtolower($x));
            }, function ($x) {
                return strrev($x);
            }, function (Observable $g) {
                return $g->skip(2);
            });
        });
        $this->scheduler->scheduleAbsolute(TestScheduler::SUBSCRIBED, function () use(&$outer, &$outerSubscription, &$inners, &$results, &$innerSubscriptions) {
            $outerSubscription = $outer->subscribeCallback(function (GroupedObservable $group) use(&$inners, &$results) {
                $result = $this->scheduler->createObserver();
                $inners[$group->getKey()] = $group;
                $results[$group->getKey()] = $result;
                $this->scheduler->scheduleRelativeWithState(null, 100, function () use($group, $result) {
                    $innerSubscriptions[$group->getKey()] = $group->subscribe($result);
                });
            });
        });
        $this->scheduler->scheduleAbsolute(TestScheduler::DISPOSED, function () use(&$outerSubscription, &$innerSubscriptions) {
            $outerSubscription->dispose();
            foreach ($innerSubscriptions as $innerSubscription) {
                $innerSubscription->dispose();
            }
        });
        $this->scheduler->start();
        $this->assertEquals(4, count($inners));
        $this->assertMessages([onNext(390, 'rab   '), onCompleted(420)], $results['bar']->getMessages());
        $this->assertMessages([onNext(480, '  zab'), onCompleted(510)], $results['baz']->getMessages());
        $this->assertMessages([onCompleted(570)], $results['qux']->getMessages());
        $this->assertMessages([onCompleted(570)], $results['foo']->getMessages());
        $this->assertSubscriptions([subscribe(200, 570)], $xs->getSubscriptions());
    }