Subversion Repositories php-qbpwcf

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
3 liveuser 1
<?php
2
 
3
namespace React\Tests\EventLoop\Timer;
4
 
5
use React\Tests\EventLoop\TestCase;
6
 
7
abstract class AbstractTimerTest extends TestCase
8
{
9
    abstract public function createLoop();
10
 
11
    public function testAddTimer()
12
    {
13
        // usleep is intentionally high
14
 
15
        $loop = $this->createLoop();
16
 
17
        $loop->addTimer(0.001, $this->expectCallableOnce());
18
        usleep(1000);
19
        $loop->tick();
20
    }
21
 
22
    public function testAddPeriodicTimer()
23
    {
24
        $loop = $this->createLoop();
25
 
26
        $loop->addPeriodicTimer(0.001, $this->expectCallableExactly(3));
27
        usleep(1000);
28
        $loop->tick();
29
        usleep(1000);
30
        $loop->tick();
31
        usleep(1000);
32
        $loop->tick();
33
    }
34
 
35
    public function testAddPeriodicTimerWithCancel()
36
    {
37
        $loop = $this->createLoop();
38
 
39
        $timer = $loop->addPeriodicTimer(0.001, $this->expectCallableExactly(2));
40
 
41
        usleep(1000);
42
        $loop->tick();
43
        usleep(1000);
44
        $loop->tick();
45
 
46
        $timer->cancel();
47
 
48
        usleep(1000);
49
        $loop->tick();
50
    }
51
 
52
    public function testAddPeriodicTimerCancelsItself()
53
    {
54
        $i = 0;
55
 
56
        $loop = $this->createLoop();
57
 
58
        $loop->addPeriodicTimer(0.001, function ($timer) use (&$i) {
59
            $i++;
60
 
61
            if ($i == 2) {
62
                $timer->cancel();
63
            }
64
        });
65
 
66
        usleep(1000);
67
        $loop->tick();
68
        usleep(1000);
69
        $loop->tick();
70
        usleep(1000);
71
        $loop->tick();
72
 
73
        $this->assertSame(2, $i);
74
    }
75
 
76
    public function testIsTimerActive()
77
    {
78
        $loop = $this->createLoop();
79
 
80
        $timer = $loop->addPeriodicTimer(0.001, function () {});
81
 
82
        $this->assertTrue($loop->isTimerActive($timer));
83
 
84
        $timer->cancel();
85
 
86
        $this->assertFalse($loop->isTimerActive($timer));
87
    }
88
 
89
    public function testMinimumIntervalOneMicrosecond()
90
    {
91
        $loop = $this->createLoop();
92
 
93
        $timer = $loop->addTimer(0, function () {});
94
 
95
        $this->assertEquals(0.000001, $timer->getInterval());
96
    }
97
}