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

groupByUntilInnerDispose() public method

    public function groupByUntilInnerDispose()
    {
        $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(&$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, &$innerSubscriptions, &$results, &$inners) {
            $outerSubscription = $outer->subscribeCallback(function (GroupedObservable $group) use(&$inners, &$results, &$innerSubscriptions) {
                $result = $this->scheduler->createObserver();
                $inners[$group->getKey()] = $group;
                $results[$group->getKey()] = $result;
                $innerSubscriptions[$group->getKey()] = $group->subscribe($result);
            });
        });
        $this->scheduler->scheduleAbsolute(400, function () use(&$outerSubscription, &$innerSubscriptions) {
            $outerSubscription->dispose();
            foreach ($innerSubscriptions as $innerSubscription) {
                $innerSubscription->dispose();
            }
        });
        $this->scheduler->start();
        $this->assertEquals(4, count($inners));
        $this->assertMessages([onNext(270, '  Rab'), onNext(390, 'rab   ')], $results['bar']->getMessages());
        $this->assertMessages([onNext(350, '   zaB ')], $results['baz']->getMessages());
        $this->assertMessages([onNext(360, ' xuq  ')], $results['qux']->getMessages());
        $this->assertMessages([onNext(220, 'oof  '), onNext(240, ' OoF '), onNext(310, ' Oof'), onCompleted(310)], $results['foo']->getMessages());
        $this->assertSubscriptions([subscribe(200, 400)], $xs->getSubscriptions());
    }