Example #1
0
 /**
  * @test
  */
 public function range_five()
 {
     $results = $this->scheduler->startWithCreate(function () {
         return Observable::range(10, 5, $this->scheduler);
     });
     $this->assertMessages([onNext(201, 10), onNext(202, 11), onNext(203, 12), onNext(204, 13), onNext(205, 14), onCompleted(206)], $results->getMessages());
 }
Example #2
0
 /**
  * @test
  */
 public function timer_one_shot_relative_time_negative()
 {
     $results = $this->scheduler->startWithCreate(function () {
         return new TimerObservable(-1, $this->scheduler);
     });
     $this->assertMessages([onNext(201, 0), onCompleted(201)], $results->getMessages());
 }
Example #3
0
 /**
  * @test
  */
 public function fromArray_one()
 {
     $xs = Observable::fromArray([1]);
     $results = $this->scheduler->startWithCreate(function () use($xs) {
         return $xs;
     });
     $this->assertMessages([onNext(201, 1), onCompleted(202)], $results->getMessages());
 }
Example #4
0
 /**
  * @test
  */
 public function switchLatest_Dispose()
 {
     $xs = $this->createHotObservable([onNext(300, $this->createColdObservable([onNext(10, 101), onNext(20, 102), onNext(110, 103), onNext(120, 104), onNext(210, 105), onNext(220, 106), onCompleted(230)])), onNext(400, $this->createColdObservable([onNext(10, 201), onNext(20, 202), onNext(30, 203), onNext(40, 204), onCompleted(50)])), onNext(500, $this->createColdObservable([onNext(10, 301), onNext(20, 302), onNext(30, 303), onNext(40, 304), onCompleted(150)])), onCompleted(600)]);
     $results = $this->scheduler->startWithDispose(function () use($xs) {
         return $xs->switchLatest();
     }, 500);
     $this->assertMessages([onNext(310, 101), onNext(320, 102), onNext(410, 201), onNext(420, 202), onNext(430, 203), onNext(440, 204)], $results->getMessages());
 }
Example #5
0
 /**
  * Adapted from RxJS
  *
  * @test
  */
 public function sum_number_some()
 {
     $xs = $this->createHotObservable([onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onCompleted(250)]);
     $results = $this->scheduler->startWithCreate(function () use($xs) {
         return $xs->sum();
     });
     $this->assertMessages([onNext(250, 2 + 3 + 4), onCompleted(250)], $results->getMessages());
 }
Example #6
0
 /**
  * @test
  */
 public function startWith_multiple_before()
 {
     $xs = $this->createHotObservable([onNext(150, 1), onNext(202, 4), onCompleted(250)]);
     $results = $this->scheduler->startWithCreate(function () use($xs) {
         return $xs->startWithArray([1, 2, 3]);
     });
     $this->assertMessages([onNext(201, 1), onNext(202, 2), onNext(203, 3), onCompleted(250)], $results->getMessages());
 }
Example #7
0
 /**
  * @test
  */
 public function timestamp_dispose()
 {
     $xs = $this->createHotObservable([onNext(150, 1), onNext(210, 2), onNext(230, 3), onNext(260, 4), onNext(300, 5), onNext(350, 6), onCompleted(400)]);
     $results = $this->scheduler->startWithDispose(function () use($xs) {
         return $xs->timestamp($this->scheduler);
     }, 275);
     $this->assertMessages([onNext(210, new Timestamped(210, 2)), onNext(230, new Timestamped(230, 3)), onNext(260, new Timestamped(260, 4))], $results->getMessages());
 }
Example #8
0
 public function testToArrayCompleted()
 {
     $xs = $this->createHotObservable([onNext(110, 1), onNext(220, 2), onNext(330, 3), onNext(440, 4), onNext(550, 5), onCompleted(660)]);
     $results = $this->scheduler->startWithCreate(function () use($xs) {
         return $xs->toArray();
     });
     $this->assertMessages([onNext(660, [2, 3, 4, 5]), onCompleted(660)], $results->getMessages());
 }
Example #9
0
 /**
  * @test
  */
 public function it_passes_on_completed_from_sources()
 {
     $ys = $this->createHotObservable(array(onCompleted(250)));
     $results = $this->scheduler->startWithCreate(function () use($ys) {
         return Observable::mergeAll($ys);
     });
     $this->assertMessages(array(onCompleted(250)), $results->getMessages());
     $this->assertSubscriptions(array(subscribe(200, 250)), $ys->getSubscriptions());
 }
Example #10
0
 /**
  * @test
  */
 public function it_calls_relative_to_subscribe_time()
 {
     $xs = $this->createColdObservable(array(onNext(50, "foo"), onNext(75, "Bar"), onCompleted(105)));
     $results = $this->scheduler->startWithCreate(function () use($xs) {
         return $xs;
     });
     $this->assertCount(3, $results->getMessages());
     $this->assertMessages(array(onNext(250, "foo"), onNext(275, "Bar"), onCompleted(305)), $results->getMessages());
 }
Example #11
0
 /**
  * @test
  */
 public function generator_yields_one()
 {
     $generator = $this->genOne();
     $xs = new \Rx\Observable\IteratorObservable($generator);
     $results = $this->scheduler->startWithCreate(function () use($xs) {
         return $xs;
     });
     $this->assertMessages([onNext(201, 1), onCompleted(202)], $results->getMessages());
 }
Example #12
0
 public function testSkipLastThreeCompleted()
 {
     $xs = $this->createHotObservable([onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9), onCompleted(650)]);
     $results = $this->scheduler->startWithCreate(function () use($xs) {
         return $xs->skipLast(3);
     });
     $this->assertMessages([onNext(310, 2), onNext(360, 3), onNext(380, 4), onNext(410, 5), onNext(590, 6), onCompleted(650)], $results->getMessages());
     $this->assertSubscriptions([subscribe(200, 650)], $xs->getSubscriptions());
 }
Example #13
0
 /**
  * @test
  */
 public function delay_empty()
 {
     $xs = $this->createHotObservable([onNext(150, 1), onCompleted(550)]);
     $results = $this->scheduler->startWithCreate(function () use($xs) {
         return $xs->delay(10, $this->scheduler);
     });
     $this->assertMessages([onCompleted(560)], $results->getMessages());
     $this->assertSubscriptions([subscribe(200, 550)], $xs->getSubscriptions());
 }
Example #14
0
 /**
  * @test
  */
 public function take_zero_calls_on_completed()
 {
     $scheduler = $this->createTestScheduler();
     $xs = $this->createHotObservable(array(onNext(300, 21), onNext(500, 42), onNext(800, 84), onCompleted(820)));
     $results = $this->scheduler->startWithCreate(function () use($xs) {
         return $xs->take(0);
     });
     $this->assertMessages(array(onCompleted(201)), $results->getMessages());
 }
Example #15
0
 /**
  * @test
  */
 public function pluck_array_numeric_index()
 {
     $xs = $this->createHotObservable([onNext(180, [-1, -1, -1, -1]), onNext(210, [4, 3, 2, 1]), onNext(240, [4, 3, 20, 10]), onNext(290, [4, 3, 200, 100]), onNext(350, [4, 3, 2000, 1000]), onCompleted(400)]);
     $results = $this->scheduler->startWithCreate(function () use($xs) {
         return $xs->pluck(2);
     });
     $this->assertMessages([onNext(210, 2), onNext(240, 20), onNext(290, 200), onNext(350, 2000), onCompleted(400)], $results->getMessages());
     $this->assertSubscriptions([subscribe(200, 400)], $xs->getSubscriptions());
 }
Example #16
0
 /**
  * @test
  */
 public function start_action_number()
 {
     $results = $this->scheduler->startWithCreate(function () {
         return Observable::start(function () {
             return 1;
         }, $this->scheduler);
     });
     $this->assertMessages([onNext(200, 1), onCompleted(200)], $results->getMessages());
 }
Example #17
0
 /**
  * @test
  */
 public function it_skips_multiple_values()
 {
     $scheduler = $this->createTestScheduler();
     $xs = $this->createHotObservable(array(onNext(300, 21), onNext(500, 42), onNext(800, 84), onNext(850, 168), onCompleted(870)));
     $results = $this->scheduler->startWithCreate(function () use($xs) {
         return $xs->skip(2);
     });
     $this->assertMessages(array(onNext(800, 84), onNext(850, 168), onCompleted(870)), $results->getMessages());
 }
Example #18
0
 /**
  * @test
  */
 public function it_calls_on_complete_when_the_array_is_empte()
 {
     $xs = BaseObservable::fromArray(array(), $this->scheduler);
     $results = $this->scheduler->startWithCreate(function () use($xs) {
         return $xs;
     });
     $this->assertCount(1, $results->getMessages());
     $this->assertMessages(array(onCompleted(201)), $results->getMessages());
 }
Example #19
0
 /**
  * @test
  */
 public function from_promise_success()
 {
     $source = PromiseFactory::toObservable(function () {
         return Promise::resolved(42);
     });
     $results = $this->scheduler->startWithCreate(function () use($source) {
         return $source;
     });
     $this->assertMessages(array(onNext(200, 42), onCompleted(200)), $results->getMessages());
 }
Example #20
0
 /**
  * @test
  */
 public function concatAll_timer_missing_item()
 {
     $xs = $this->createHotObservable([onNext(201, 0), onNext(206, 1), onNext(211, 2), onCompleted(212)]);
     $results = $this->scheduler->startWithCreate(function () use($xs) {
         return $xs->map(function ($x) {
             return Observable::timer(5)->mapTo($x);
         })->concatAll();
     });
     $this->assertMessages([onNext(206, 0), onNext(211, 1), onNext(216, 2), onCompleted(216)], $results->getMessages());
 }
Example #21
0
 /**
  * @test
  */
 public function throttle_error()
 {
     $error = new \Exception();
     $xs = $this->createHotObservable([onNext(150, 1), onNext(210, 2), onNext(250, 3), onNext(310, 4), onNext(350, 5), onError(410, $error), onNext(450, 7), onCompleted(500)]);
     $results = $this->scheduler->startWithCreate(function () use($xs) {
         return $xs->throttle(200);
     });
     $this->assertMessages([onNext(210, 2), onError(410, $error)], $results->getMessages());
     $this->assertSubscriptions([subscribe(200, 410)], $xs->getSubscriptions());
 }
Example #22
0
 /**
  * @test
  */
 public function select_calls_selector()
 {
     $xs = $this->createHotObservable(array(onNext(100, 2), onNext(300, 21), onNext(500, 42), onNext(800, 84), onCompleted(820)));
     $results = $this->scheduler->startWithCreate(function () use($xs) {
         return $xs->select(function ($elem) {
             return $elem * 2;
         });
     });
     $this->assertMessages(array(onNext(300, 42), onNext(500, 84), onNext(800, 168), onCompleted(820)), $results->getMessages());
 }
Example #23
0
 /**
  * @test
  */
 public function doOnNext_should_call_after_resubscription()
 {
     $xs = $this->createColdObservable([onNext(10, 1), onCompleted(20)]);
     $messages = [];
     $xs->doOnNext(function ($x) use(&$messages) {
         $messages[] = onNext($this->scheduler->getClock(), $x);
     })->repeat(2)->subscribeCallback(null, null, null, $this->scheduler);
     $this->scheduler->start();
     $this->assertMessages([onNext(10, 1), onNext(30, 1)], $messages);
 }
Example #24
0
 /**
  * @test
  */
 public function doOnError_should_call_after_resubscription()
 {
     $xs = $this->createColdObservable([onError(10, new \Exception("Hello")), onCompleted(20)]);
     $messages = [];
     $xs->doOnError(function ($x) use(&$messages) {
         $messages[] = onError($this->scheduler->getClock(), $x);
     })->retry(2)->subscribeCallback(null, function () {
     }, null, $this->scheduler);
     $this->scheduler->start();
     $this->assertMessages([onError(10, new \Exception("Hello")), onError(20, new \Exception("Hello"))], $messages);
 }
Example #25
0
 /**
  * @test
  */
 public function it_passes_the_last_on_complete()
 {
     $xs = $this->createColdObservable(array(onNext(100, 4), onNext(200, 2), onNext(300, 3), onNext(400, 1), onCompleted(500)));
     $ys = $this->createColdObservable(array(onNext(50, 'foo'), onNext(100, 'bar'), onNext(150, 'baz'), onNext(200, 'qux'), onCompleted(250)));
     $results = $this->scheduler->startWithCreate(function () use($xs, $ys) {
         return $xs->merge($ys);
     });
     $this->assertMessages(array(onNext(250, 'foo'), onNext(300, 4), onNext(300, 'bar'), onNext(350, 'baz'), onNext(400, 2), onNext(400, 'qux'), onNext(500, 3), onNext(600, 1), onCompleted(700)), $results->getMessages());
     $this->assertSubscriptions(array(subscribe(200, 700)), $xs->getSubscriptions());
     $this->assertSubscriptions(array(subscribe(200, 450)), $ys->getSubscriptions());
 }
Example #26
0
 /**
  * @test
  */
 public function doOnCompleted_should_be_called()
 {
     $xs = $this->createHotObservable([onNext(150, 1), onNext(210, 2), onNext(220, 3), onCompleted(250)]);
     $called = 0;
     $this->scheduler->startWithCreate(function () use($xs, &$called) {
         return $xs->doOnCompleted(function () use(&$called) {
             $called++;
         });
     });
     $this->assertEquals(1, $called);
 }
Example #27
0
 /**
  * @test
  */
 public function flatMapTo_it_passes_on_error()
 {
     $xs = $this->createColdObservable(array(onNext(100, 4), onNext(200, 2), onNext(300, 3), onNext(400, 1), onCompleted(510)));
     $ys = $this->createColdObservable(array(onNext(50, 'foo'), onNext(100, 'bar'), onNext(150, 'baz'), onError(210, new Exception()), onCompleted(250)));
     $results = $this->scheduler->startWithCreate(function () use($xs, $ys) {
         return $xs->flatMapTo($ys);
     });
     $this->assertMessages(array(onNext(350, "foo"), onNext(400, "bar"), onNext(450, "baz"), onNext(450, "foo"), onNext(500, "bar"), onError(510, new Exception())), $results->getMessages());
     $this->assertSubscriptions(array(subscribe(200, 510)), $xs->getSubscriptions());
     $this->assertSubscriptions(array(subscribe(300, 510), subscribe(400, 510), subscribe(500, 510)), $ys->getSubscriptions());
 }
Example #28
0
 /**
  * @test
  */
 public function defaultIfEmpty_empty_2()
 {
     $xs = $this->createHotObservable([onCompleted(420)]);
     $results = $this->scheduler->startWithCreate(function () use($xs) {
         return $xs->defaultIfEmpty(new ReturnObservable(-1));
     });
     // Note: these tests differ from the RxJS tests that they were based on because RxJS was
     // explicitly using the immediate scheduler on subscribe internally. When we pass the
     // proper scheduler in, the subscription gets scheduled which requires an extra tick.
     $this->assertMessages([onNext(421, -1), onCompleted(421)], $results->getMessages());
     $this->assertSubscriptions([subscribe(200, 420)], $xs->getSubscriptions());
 }
 /**
  * @test
  */
 public function connectable_observable_multiple_non_overlapped_connections()
 {
     $xs = $this->createHotObservable([onNext(210, 1), onNext(220, 2), onNext(230, 3), onNext(240, 4), onNext(250, 5), onNext(260, 6), onNext(270, 7), onNext(280, 8), onNext(290, 9), onCompleted(300)]);
     $subject = new TestSubject();
     $conn = $xs->multicast($subject);
     $c1 = null;
     $this->scheduler->scheduleAbsolute(225, function () use(&$c1, $conn) {
         $c1 = $conn->connect();
     });
     $this->scheduler->scheduleAbsolute(241, function () use(&$c1) {
         $c1->dispose();
     });
     $this->scheduler->scheduleAbsolute(245, function () use(&$c1) {
         $c1->dispose();
     });
     // idempotency test
     $this->scheduler->scheduleAbsolute(251, function () use(&$c1) {
         $c1->dispose();
     });
     // idempotency test
     $this->scheduler->scheduleAbsolute(260, function () use(&$c1) {
         $c1->dispose();
     });
     // idempotency test
     $c2 = null;
     $this->scheduler->scheduleAbsolute(249, function () use(&$c2, $conn) {
         $c2 = $conn->connect();
     });
     $this->scheduler->scheduleAbsolute(255, function () use(&$c2) {
         $c2->dispose();
     });
     $this->scheduler->scheduleAbsolute(265, function () use(&$c2) {
         $c2->dispose();
     });
     // idempotency test
     $this->scheduler->scheduleAbsolute(280, function () use(&$c2) {
         $c2->dispose();
     });
     // idempotency test
     $c3 = null;
     $this->scheduler->scheduleAbsolute(275, function () use(&$c3, $conn) {
         $c3 = $conn->connect();
     });
     $this->scheduler->scheduleAbsolute(295, function () use(&$c3) {
         $c3->dispose();
     });
     $results = $this->scheduler->startWithCreate(function () use($xs, $conn) {
         return $conn;
     });
     $this->assertMessages([onNext(230, 3), onNext(240, 4), onNext(250, 5), onNext(280, 8), onNext(290, 9)], $results->getMessages());
     $this->assertSubscriptions([subscribe(225, 241), subscribe(249, 255), subscribe(275, 295)], $xs->getSubscriptions());
 }
Example #30
0
 /**
  * @test
  */
 public function create_completed()
 {
     $results = $this->scheduler->startWithCreate(function () {
         return Observable::create(function (ObserverInterface $o) {
             $o->onCompleted();
             $o->onNext(100);
             $o->onError(new \Exception());
             $o->onCompleted();
             return new EmptyDisposable();
         });
     });
     $this->assertMessages([onCompleted(200)], $results->getMessages());
 }