testParseRelativeWithTestValueSet()   B
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 42
Code Lines 32

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 42
rs 8.8571
cc 1
eloc 32
nc 1
nop 0
1
<?php
2
3
namespace HMLB\Date\Tests\Date;
4
5
/*
6
 * This file is part of the Date package.
7
 *
8
 * (c) Hugues Maignol <[email protected]>
9
 *
10
 * For the full copyright and license information, please view the LICENSE
11
 * file that was distributed with this source code.
12
 */
13
14
use HMLB\Date\Date;
15
use HMLB\Date\Tests\AbstractTestCase;
16
17
class TestingAidsTest extends AbstractTestCase
18
{
19
    public function testTestingAidsWithTestNowNotSet()
20
    {
21
        Date::setTestNow();
22
23
        $this->assertFalse(Date::hasTestNow());
24
        $this->assertNull(Date::getTestNow());
25
    }
26
27
    public function testTestingAidsWithTestNowSet()
28
    {
29
        $notNow = Date::yesterday();
30
        Date::setTestNow($notNow);
31
32
        $this->assertTrue(Date::hasTestNow());
33
        $this->assertSame($notNow, Date::getTestNow());
34
    }
35
36
    public function testConstructorWithTestValueSet()
37
    {
38
        $notNow = Date::yesterday();
39
        Date::setTestNow($notNow);
40
41
        $this->assertEquals($notNow, new Date());
42
        $this->assertEquals($notNow, new Date(null));
43
        $this->assertEquals($notNow, new Date(''));
44
        $this->assertEquals($notNow, new Date('now'));
45
    }
46
47
    public function testNowWithTestValueSet()
48
    {
49
        $notNow = Date::yesterday();
50
        Date::setTestNow($notNow);
51
52
        $this->assertEquals($notNow, Date::now());
53
    }
54
55
    public function testParseWithTestValueSet()
56
    {
57
        $notNow = Date::yesterday();
58
        Date::setTestNow($notNow);
59
60
        $this->assertEquals($notNow, Date::parse());
61
        $this->assertEquals($notNow, Date::parse(null));
62
        $this->assertEquals($notNow, Date::parse(''));
63
        $this->assertEquals($notNow, Date::parse('now'));
64
    }
65
66
    public function testParseRelativeWithTestValueSet()
67
    {
68
        $notNow = Date::parse('2013-09-01 05:15:05');
69
        Date::setTestNow($notNow);
70
71
        $this->assertSame('2013-09-01 05:10:05', Date::parse('5 minutes ago')->toDateTimeString());
72
73
        $this->assertSame('2013-08-25 05:15:05', Date::parse('1 week ago')->toDateTimeString());
74
75
        $this->assertSame('2013-09-02 00:00:00', Date::parse('tomorrow')->toDateTimeString());
76
        $this->assertSame('2013-08-31 00:00:00', Date::parse('yesterday')->toDateTimeString());
77
78
        $this->assertSame('2013-09-02 05:15:05', Date::parse('+1 day')->toDateTimeString());
79
        $this->assertSame('2013-08-31 05:15:05', Date::parse('-1 day')->toDateTimeString());
80
81
        $this->assertSame('2013-09-02 00:00:00', Date::parse('next monday')->toDateTimeString());
82
        $this->assertSame('2013-09-03 00:00:00', Date::parse('next tuesday')->toDateTimeString());
83
        $this->assertSame('2013-09-04 00:00:00', Date::parse('next wednesday')->toDateTimeString());
84
        $this->assertSame('2013-09-05 00:00:00', Date::parse('next thursday')->toDateTimeString());
85
        $this->assertSame('2013-09-06 00:00:00', Date::parse('next friday')->toDateTimeString());
86
        $this->assertSame('2013-09-07 00:00:00', Date::parse('next saturday')->toDateTimeString());
87
        $this->assertSame('2013-09-08 00:00:00', Date::parse('next sunday')->toDateTimeString());
88
89
        $this->assertSame('2013-08-26 00:00:00', Date::parse('last monday')->toDateTimeString());
90
        $this->assertSame('2013-08-27 00:00:00', Date::parse('last tuesday')->toDateTimeString());
91
        $this->assertSame('2013-08-28 00:00:00', Date::parse('last wednesday')->toDateTimeString());
92
        $this->assertSame('2013-08-29 00:00:00', Date::parse('last thursday')->toDateTimeString());
93
        $this->assertSame('2013-08-30 00:00:00', Date::parse('last friday')->toDateTimeString());
94
        $this->assertSame('2013-08-31 00:00:00', Date::parse('last saturday')->toDateTimeString());
95
        $this->assertSame('2013-08-25 00:00:00', Date::parse('last sunday')->toDateTimeString());
96
97
        $this->assertSame('2013-09-02 00:00:00', Date::parse('this monday')->toDateTimeString());
98
        $this->assertSame('2013-09-03 00:00:00', Date::parse('this tuesday')->toDateTimeString());
99
        $this->assertSame('2013-09-04 00:00:00', Date::parse('this wednesday')->toDateTimeString());
100
        $this->assertSame('2013-09-05 00:00:00', Date::parse('this thursday')->toDateTimeString());
101
        $this->assertSame('2013-09-06 00:00:00', Date::parse('this friday')->toDateTimeString());
102
        $this->assertSame('2013-09-07 00:00:00', Date::parse('this saturday')->toDateTimeString());
103
        $this->assertSame('2013-09-01 00:00:00', Date::parse('this sunday')->toDateTimeString());
104
105
        $this->assertSame('2013-10-01 05:15:05', Date::parse('first day of next month')->toDateTimeString());
106
        $this->assertSame('2013-09-30 05:15:05', Date::parse('last day of this month')->toDateTimeString());
107
    }
108
109
    public function testParseRelativeWithMinusSignsInDate()
110
    {
111
        $notNow = Date::parse('2013-09-01 05:15:05');
112
        Date::setTestNow($notNow);
113
114
        $this->assertSame('2000-01-03 00:00:00', Date::parse('2000-1-3')->toDateTimeString());
115
        $this->assertSame('2000-10-10 00:00:00', Date::parse('2000-10-10')->toDateTimeString());
116
    }
117
118
    public function testTimeZoneWithTestValueSet()
119
    {
120
        $notNow = Date::parse('2013-07-01 12:00:00', 'America/New_York');
121
        Date::setTestNow($notNow);
122
123
        $this->assertSame('2013-07-01T12:00:00-0400', Date::parse('now')->toIso8601String());
124
        $this->assertSame('2013-07-01T11:00:00-0500', Date::parse('now', 'America/Mexico_City')->toIso8601String());
125
        $this->assertSame('2013-07-01T09:00:00-0700', Date::parse('now', 'America/Vancouver')->toIso8601String());
126
    }
127
}
128