1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace Tests\COG\ChronoShifter\Shifter; |
4
|
|
|
|
5
|
|
|
use COG\ChronoShifter\Direction\Increasing; |
6
|
|
|
use COG\ChronoShifter\Period\IsoChronic; |
7
|
|
|
use COG\ChronoShifter\Selector\Specific; |
8
|
|
|
use COG\ChronoShifter\Shifter\ChronoShifter; |
9
|
|
|
|
10
|
|
|
/** |
11
|
|
|
* @author Kristjan Siimson <[email protected]> |
12
|
|
|
* @package Shifter\Test |
13
|
|
|
*/ |
14
|
|
View Code Duplication |
class IsochronicIncrementTest extends \PHPUnit_Framework_TestCase |
|
|
|
|
15
|
|
|
{ |
16
|
|
|
/** |
17
|
|
|
* @var array |
18
|
|
|
*/ |
19
|
|
|
private $fixture = array( |
20
|
|
|
|
21
|
|
|
// Shift up by four weeks |
22
|
|
|
array( |
23
|
|
|
'2015-06-02', // Day of reference |
24
|
|
|
'2015-06-02', // Starting time |
25
|
|
|
'2015-06-30' // Expected time |
26
|
|
|
), |
27
|
|
|
|
28
|
|
|
// Discard time of the day |
29
|
|
|
array( |
30
|
|
|
'2015-06-02', // Day of reference |
31
|
|
|
'2015-06-02 15:12:24', // Starting time |
32
|
|
|
'2015-06-30' // Expected time |
33
|
|
|
), |
34
|
|
|
|
35
|
|
|
// Reference date in past |
36
|
|
|
array( |
37
|
|
|
'2015-06-10 15:12:24', // Day of reference |
38
|
|
|
'2015-06-29', // Starting time |
39
|
|
|
'2015-07-08' // Expected time |
40
|
|
|
), |
41
|
|
|
|
42
|
|
|
// Reference date in future |
43
|
|
|
array( |
44
|
|
|
'2015-07-01', // Day of reference |
45
|
|
|
'2015-06-15', // Starting time |
46
|
|
|
'2015-07-01' // Expected time |
47
|
|
|
), |
48
|
|
|
|
49
|
|
|
// Reference date on the next day |
50
|
|
|
array( |
51
|
|
|
'2015-07-02', // Day of reference |
52
|
|
|
'2015-06-15', // Starting time |
53
|
|
|
'2015-07-02' // Expected time |
54
|
|
|
), |
55
|
|
|
|
56
|
|
|
// February with 28 days |
57
|
|
|
array( |
58
|
|
|
'2015-02-01', // Day of reference |
59
|
|
|
'2015-02-15', // Starting time |
60
|
|
|
'2015-03-01' // Expected time |
61
|
|
|
), |
62
|
|
|
|
63
|
|
|
// February with 29 days |
64
|
|
|
array( |
65
|
|
|
'2016-02-01', // Day of reference |
66
|
|
|
'2016-02-15', // Starting time |
67
|
|
|
'2016-02-29' // Expected time |
68
|
|
|
), |
69
|
|
|
// Increment with DST difference |
70
|
|
|
array( |
71
|
|
|
'2015-04-05 10:26:20', // Day of reference |
72
|
|
|
'2015-03-04', // Starting time |
73
|
|
|
'2015-03-08' // Expected time |
74
|
|
|
), |
75
|
|
|
// Increment with DST difference |
76
|
|
|
array( |
77
|
|
|
'2015-04-05 10:26:20', // Day of reference |
78
|
|
|
'2015-10-15', // Starting time |
79
|
|
|
'2015-10-18' // Expected time |
80
|
|
|
) |
81
|
|
|
); |
82
|
|
|
|
83
|
|
|
/** |
84
|
|
|
* @dataProvider shiftProvider |
85
|
|
|
* @param integer $reference |
86
|
|
|
* @param string $start |
87
|
|
|
* @param string $expected |
88
|
|
|
*/ |
89
|
|
|
public function testShift($reference, $start, $expected) |
90
|
|
|
{ |
91
|
|
|
$shifter = new ChronoShifter(new Isochronic($start, $reference, 28), new Specific(new Increasing(), 1)); |
92
|
|
|
$result = $shifter->shift($start); |
93
|
|
|
|
94
|
|
|
$this->assertEquals( |
95
|
|
|
$expected, |
96
|
|
|
$result, |
97
|
|
|
sprintf( |
98
|
|
|
'From %s to next four weeks referencing %s', |
99
|
|
|
$start, |
100
|
|
|
$reference |
101
|
|
|
) |
102
|
|
|
); |
103
|
|
|
} |
104
|
|
|
|
105
|
|
|
/** |
106
|
|
|
* @return array |
107
|
|
|
*/ |
108
|
|
|
public function shiftProvider() |
109
|
|
|
{ |
110
|
|
|
return $this->fixture; |
111
|
|
|
} |
112
|
|
|
} |
113
|
|
|
|
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.