File: SleepEnvironmentBuilderTest.php

package info (click to toggle)
php-mock 2.5.0-2
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 332 kB
  • sloc: php: 1,703; makefile: 18; xml: 17; sh: 7
file content (118 lines) | stat: -rw-r--r-- 2,793 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
<?php

namespace phpmock\environment;

use phpmock\TestCaseTrait;
use PHPUnit\Framework\TestCase;

/**
 * Tests SleepEnvironmentBuilder.
 *
 * @author Markus Malkusch <markus@malkusch.de>
 * @link bitcoin:1335STSwu9hST4vcMRppEPgENMHD2r1REK Donations
 * @license http://www.wtfpl.net/txt/copying/ WTFPL
 * @see SleepEnvironmentBuilder
 */
class SleepEnvironmentBuilderTest extends TestCase
{
    use TestCaseTrait;

    /**
     * @var MockEnvironment The build environment.
     */
    private $environment;

    protected function setUpCompat()
    {
        $builder = new SleepEnvironmentBuilder();
        $builder->addNamespace(__NAMESPACE__)
                ->setTimestamp(1234);

        $this->environment = $builder->build();
        $this->environment->enable();
    }

    protected function tearDownCompat()
    {
        $this->environment->disable();
    }

    /**
     * Tests mocking functions accross several namespaces.
     */
    public function testAddNamespace()
    {
        $builder = new SleepEnvironmentBuilder();
        $builder->addNamespace(__NAMESPACE__)
                ->addNamespace("testAddNamespace")
                ->setTimestamp(1234);

        $this->environment->disable();
        $this->environment = $builder->build();
        $this->environment->enable();

        $time = time();
        \testAddNamespace\sleep(123);
        sleep(123);

        $this->assertEquals(2 * 123 + $time, time());
        $this->assertEquals(2 * 123 + $time, \testAddNamespace\time());
    }

    /**
     * Tests sleep()
     */
    public function testSleep()
    {
        $time = time();
        $microtime = microtime(true);
        sleep(1);

        $this->assertEquals($time + 1, time());
        $this->assertEquals($microtime + 1, microtime(true));
        $this->assertEquals($time + 1, date("U"));
    }

    /**
     * Tests usleep()
     *
     * @param int $microseconds Microseconds.
     * @dataProvider provideTestUsleep
     */
    public function testUsleep($microseconds)
    {
        $time = time();
        $microtime = microtime(true);
        usleep($microseconds);

        $delta = $microseconds / 1000000;
        $this->assertEquals((int)($time + $delta), time());
        $this->assertEquals((int)($time + $delta), date("U"));
        $this->assertEquals($microtime + $delta, microtime(true));
    }

    /**
     * Returns test cases for testUsleep().
     *
     * @return int[][] Test cases.
     */
    public static function provideTestUsleep()
    {
        return [
            [1000],
            [999999],
            [1000000],
        ];
    }

    /**
     * Tests date()
     */
    public function testDate()
    {
        $time = time();
        sleep(100);

        $this->assertEquals($time + 100, date("U"));
    }
}