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

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

    public function groupByUntilOuterEleThrow()
    {
        $error = new \Exception();
        $keyInvoked = 0;
        $eleInvoked = 0;
        $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())]);
        $results = $this->scheduler->startWithCreate(function () use($xs, &$keyInvoked, &$eleInvoked, $error) {
            return $xs->groupByUntil(function ($x) use(&$keyInvoked) {
                $keyInvoked++;
                return trim(strtolower($x));
            }, function ($x) use(&$eleInvoked, $error) {
                $eleInvoked++;
                if ($eleInvoked === 10) {
                    throw $error;
                }
                return strrev($x);
            }, function (Observable $g) {
                return $g->skip(2);
            })->map(function (GroupedObservable $x) {
                return $x->getKey();
            });
        });
        $this->assertMessages([onNext(220, 'foo'), onNext(270, 'bar'), onNext(350, 'baz'), onNext(360, 'qux'), onNext(470, 'foo'), onError(480, $error)], $results->getMessages());
        $this->assertSubscriptions([subscribe(200, 480)], $xs->getSubscriptions());
        $this->assertEquals(10, $keyInvoked);
        $this->assertEquals(10, $eleInvoked);
    }