/** * @test */ public function eventloop_schedule_recursive() { $loop = Factory::create(); $scheduler = new EventLoopScheduler($loop); $actionCalled = false; $count = 0; $action = function ($reschedule) use(&$actionCalled, &$count) { $actionCalled = true; $count++; if ($count < 5) { $reschedule(); } }; $disposable = $scheduler->scheduleRecursive($action); $this->assertInstanceOf('Rx\\DisposableInterface', $disposable); $this->assertFalse($actionCalled); $this->assertEquals(0, $count); $loop->tick(); $this->assertEquals(1, $count); $loop->tick(); $this->assertEquals(2, $count); $loop->tick(); $this->assertEquals(3, $count); $loop->tick(); $this->assertEquals(4, $count); $loop->tick(); $this->assertEquals(5, $count); $loop->tick(); $this->assertTrue($actionCalled); $this->assertEquals(5, $count); }