From fc9401f04a3aca5abb22f87ebc210de8afe11d32 Mon Sep 17 00:00:00 2001 From: marvin-borner@live.com Date: Tue, 10 Apr 2018 21:50:16 +0200 Subject: Initial Commit --- .../event-loop/tests/Timer/AbstractTimerTest.php | 122 +++++++++++++++++++++ .../event-loop/tests/Timer/ExtEvTimerTest.php | 17 +++ .../event-loop/tests/Timer/ExtEventTimerTest.php | 17 +++ .../event-loop/tests/Timer/ExtLibevTimerTest.php | 17 +++ .../tests/Timer/ExtLibeventTimerTest.php | 17 +++ .../tests/Timer/StreamSelectTimerTest.php | 13 +++ .../react/event-loop/tests/Timer/TimersTest.php | 27 +++++ 7 files changed, 230 insertions(+) create mode 100644 assets/php/vendor/react/event-loop/tests/Timer/AbstractTimerTest.php create mode 100644 assets/php/vendor/react/event-loop/tests/Timer/ExtEvTimerTest.php create mode 100644 assets/php/vendor/react/event-loop/tests/Timer/ExtEventTimerTest.php create mode 100644 assets/php/vendor/react/event-loop/tests/Timer/ExtLibevTimerTest.php create mode 100644 assets/php/vendor/react/event-loop/tests/Timer/ExtLibeventTimerTest.php create mode 100644 assets/php/vendor/react/event-loop/tests/Timer/StreamSelectTimerTest.php create mode 100644 assets/php/vendor/react/event-loop/tests/Timer/TimersTest.php (limited to 'assets/php/vendor/react/event-loop/tests/Timer') diff --git a/assets/php/vendor/react/event-loop/tests/Timer/AbstractTimerTest.php b/assets/php/vendor/react/event-loop/tests/Timer/AbstractTimerTest.php new file mode 100644 index 0000000..294e683 --- /dev/null +++ b/assets/php/vendor/react/event-loop/tests/Timer/AbstractTimerTest.php @@ -0,0 +1,122 @@ +createLoop(); + + $timer = $loop->addTimer(0.001, $this->expectCallableNever()); + + $this->assertInstanceOf('React\EventLoop\TimerInterface', $timer); + $this->assertFalse($timer->isPeriodic()); + } + + public function testAddTimerWillBeInvokedOnceAndBlocksLoopWhenRunning() + { + $loop = $this->createLoop(); + + $loop->addTimer(0.001, $this->expectCallableOnce()); + + $start = microtime(true); + $loop->run(); + $end = microtime(true); + + // make no strict assumptions about actual time interval. + // must be at least 0.001s (1ms) and should not take longer than 0.1s + $this->assertGreaterThanOrEqual(0.001, $end - $start); + $this->assertLessThan(0.1, $end - $start); + } + + public function testAddPeriodicTimerReturnsPeriodicTimerInstance() + { + $loop = $this->createLoop(); + + $periodic = $loop->addPeriodicTimer(0.1, $this->expectCallableNever()); + + $this->assertInstanceOf('React\EventLoop\TimerInterface', $periodic); + $this->assertTrue($periodic->isPeriodic()); + } + + public function testAddPeriodicTimerWillBeInvokedUntilItIsCancelled() + { + $loop = $this->createLoop(); + + $periodic = $loop->addPeriodicTimer(0.1, $this->expectCallableExactly(3)); + + // make no strict assumptions about actual time interval. + // leave some room to ensure this ticks exactly 3 times. + $loop->addTimer(0.399, function () use ($loop, $periodic) { + $loop->cancelTimer($periodic); + }); + + $loop->run(); + } + + public function testAddPeriodicTimerWillBeInvokedWithMaximumAccuracyUntilItIsCancelled() + { + $loop = $this->createLoop(); + + $i = 0; + $periodic = $loop->addPeriodicTimer(0.001, function () use (&$i) { + ++$i; + }); + + $loop->addTimer(0.02, function () use ($loop, $periodic) { + $loop->cancelTimer($periodic); + }); + + $loop->run(); + + // make no strict assumptions about number of invocations. + // we know it must be no more than 20 times and should at least be + // invoked twice for really slow loops + $this->assertLessThanOrEqual(20, $i); + $this->assertGreaterThan(2, $i); + } + + public function testAddPeriodicTimerCancelsItself() + { + $loop = $this->createLoop(); + + $i = 0; + $loop->addPeriodicTimer(0.001, function ($timer) use (&$i, $loop) { + $i++; + + if ($i === 5) { + $loop->cancelTimer($timer); + } + }); + + $start = microtime(true); + $loop->run(); + $end = microtime(true); + + $this->assertEquals(5, $i); + + // make no strict assumptions about time interval. + // 5 invocations must take at least 0.005s (5ms) and should not take + // longer than 0.1s for slower loops. + $this->assertGreaterThanOrEqual(0.005, $end - $start); + $this->assertLessThan(0.1, $end - $start); + } + + public function testMinimumIntervalOneMicrosecond() + { + $loop = $this->createLoop(); + + $timer = $loop->addTimer(0, function () {}); + + $this->assertEquals(0.000001, $timer->getInterval()); + } +} diff --git a/assets/php/vendor/react/event-loop/tests/Timer/ExtEvTimerTest.php b/assets/php/vendor/react/event-loop/tests/Timer/ExtEvTimerTest.php new file mode 100644 index 0000000..bfa9186 --- /dev/null +++ b/assets/php/vendor/react/event-loop/tests/Timer/ExtEvTimerTest.php @@ -0,0 +1,17 @@ +markTestSkipped('ExtEvLoop tests skipped because ext-ev extension is not installed.'); + } + + return new ExtEvLoop(); + } +} diff --git a/assets/php/vendor/react/event-loop/tests/Timer/ExtEventTimerTest.php b/assets/php/vendor/react/event-loop/tests/Timer/ExtEventTimerTest.php new file mode 100644 index 0000000..a7a6d00 --- /dev/null +++ b/assets/php/vendor/react/event-loop/tests/Timer/ExtEventTimerTest.php @@ -0,0 +1,17 @@ +markTestSkipped('ext-event tests skipped because ext-event is not installed.'); + } + + return new ExtEventLoop(); + } +} diff --git a/assets/php/vendor/react/event-loop/tests/Timer/ExtLibevTimerTest.php b/assets/php/vendor/react/event-loop/tests/Timer/ExtLibevTimerTest.php new file mode 100644 index 0000000..65e82be --- /dev/null +++ b/assets/php/vendor/react/event-loop/tests/Timer/ExtLibevTimerTest.php @@ -0,0 +1,17 @@ +markTestSkipped('libev tests skipped because ext-libev is not installed.'); + } + + return new ExtLibevLoop(); + } +} diff --git a/assets/php/vendor/react/event-loop/tests/Timer/ExtLibeventTimerTest.php b/assets/php/vendor/react/event-loop/tests/Timer/ExtLibeventTimerTest.php new file mode 100644 index 0000000..9089b9a --- /dev/null +++ b/assets/php/vendor/react/event-loop/tests/Timer/ExtLibeventTimerTest.php @@ -0,0 +1,17 @@ +markTestSkipped('libevent tests skipped because ext-libevent is not installed.'); + } + + return new ExtLibeventLoop(); + } +} diff --git a/assets/php/vendor/react/event-loop/tests/Timer/StreamSelectTimerTest.php b/assets/php/vendor/react/event-loop/tests/Timer/StreamSelectTimerTest.php new file mode 100644 index 0000000..cfe1d7d --- /dev/null +++ b/assets/php/vendor/react/event-loop/tests/Timer/StreamSelectTimerTest.php @@ -0,0 +1,13 @@ +tick(); + + // simulate a bunch of processing on stream events, + // part of which schedules a future timer... + sleep(1); + $timers->add(new Timer(0.5, function () { + $this->fail("Timer shouldn't be called"); + })); + + $timers->tick(); + + $this->assertTrue(true); + } +} -- cgit v1.2.3