Chris@12
|
1 <?php
|
Chris@12
|
2
|
Chris@12
|
3 /*
|
Chris@12
|
4 * This file is part of the Symfony package.
|
Chris@12
|
5 *
|
Chris@12
|
6 * (c) Fabien Potencier <fabien@symfony.com>
|
Chris@12
|
7 *
|
Chris@12
|
8 * For the full copyright and license information, please view the LICENSE
|
Chris@12
|
9 * file that was distributed with this source code.
|
Chris@12
|
10 */
|
Chris@12
|
11
|
Chris@12
|
12 namespace Symfony\Component\VarDumper\Tests\Caster;
|
Chris@12
|
13
|
Chris@12
|
14 use PHPUnit\Framework\TestCase;
|
Chris@12
|
15 use Symfony\Component\VarDumper\Caster\Caster;
|
Chris@12
|
16 use Symfony\Component\VarDumper\Caster\DateCaster;
|
Chris@12
|
17 use Symfony\Component\VarDumper\Cloner\Stub;
|
Chris@12
|
18 use Symfony\Component\VarDumper\Test\VarDumperTestTrait;
|
Chris@12
|
19
|
Chris@12
|
20 /**
|
Chris@12
|
21 * @author Dany Maillard <danymaillard93b@gmail.com>
|
Chris@12
|
22 */
|
Chris@12
|
23 class DateCasterTest extends TestCase
|
Chris@12
|
24 {
|
Chris@12
|
25 use VarDumperTestTrait;
|
Chris@12
|
26
|
Chris@12
|
27 /**
|
Chris@12
|
28 * @dataProvider provideDateTimes
|
Chris@12
|
29 */
|
Chris@12
|
30 public function testDumpDateTime($time, $timezone, $xDate, $xTimestamp)
|
Chris@12
|
31 {
|
Chris@17
|
32 if ((\defined('HHVM_VERSION_ID') || \PHP_VERSION_ID <= 50509) && preg_match('/[-+]\d{2}:\d{2}/', $timezone)) {
|
Chris@12
|
33 $this->markTestSkipped('DateTimeZone GMT offsets are supported since 5.5.10. See https://github.com/facebook/hhvm/issues/5875 for HHVM.');
|
Chris@12
|
34 }
|
Chris@12
|
35
|
Chris@12
|
36 $date = new \DateTime($time, new \DateTimeZone($timezone));
|
Chris@12
|
37
|
Chris@12
|
38 $xDump = <<<EODUMP
|
Chris@12
|
39 DateTime @$xTimestamp {
|
Chris@12
|
40 date: $xDate
|
Chris@12
|
41 }
|
Chris@12
|
42 EODUMP;
|
Chris@12
|
43
|
Chris@12
|
44 $this->assertDumpEquals($xDump, $date);
|
Chris@12
|
45 }
|
Chris@12
|
46
|
Chris@12
|
47 /**
|
Chris@12
|
48 * @dataProvider provideDateTimes
|
Chris@12
|
49 */
|
Chris@12
|
50 public function testCastDateTime($time, $timezone, $xDate, $xTimestamp, $xInfos)
|
Chris@12
|
51 {
|
Chris@17
|
52 if ((\defined('HHVM_VERSION_ID') || \PHP_VERSION_ID <= 50509) && preg_match('/[-+]\d{2}:\d{2}/', $timezone)) {
|
Chris@12
|
53 $this->markTestSkipped('DateTimeZone GMT offsets are supported since 5.5.10. See https://github.com/facebook/hhvm/issues/5875 for HHVM.');
|
Chris@12
|
54 }
|
Chris@12
|
55
|
Chris@12
|
56 $stub = new Stub();
|
Chris@12
|
57 $date = new \DateTime($time, new \DateTimeZone($timezone));
|
Chris@17
|
58 $cast = DateCaster::castDateTime($date, ['foo' => 'bar'], $stub, false, 0);
|
Chris@12
|
59
|
Chris@12
|
60 $xDump = <<<EODUMP
|
Chris@12
|
61 array:1 [
|
Chris@12
|
62 "\\x00~\\x00date" => $xDate
|
Chris@12
|
63 ]
|
Chris@12
|
64 EODUMP;
|
Chris@12
|
65
|
Chris@12
|
66 $this->assertDumpEquals($xDump, $cast);
|
Chris@12
|
67
|
Chris@12
|
68 $xDump = <<<EODUMP
|
Chris@12
|
69 Symfony\Component\VarDumper\Caster\ConstStub {
|
Chris@12
|
70 +type: 1
|
Chris@12
|
71 +class: "$xDate"
|
Chris@12
|
72 +value: "%A$xInfos%A"
|
Chris@12
|
73 +cut: 0
|
Chris@12
|
74 +handle: 0
|
Chris@12
|
75 +refCount: 0
|
Chris@12
|
76 +position: 0
|
Chris@12
|
77 +attr: []
|
Chris@12
|
78 }
|
Chris@12
|
79 EODUMP;
|
Chris@12
|
80
|
Chris@12
|
81 $this->assertDumpMatchesFormat($xDump, $cast["\0~\0date"]);
|
Chris@12
|
82 }
|
Chris@12
|
83
|
Chris@12
|
84 public function provideDateTimes()
|
Chris@12
|
85 {
|
Chris@17
|
86 return [
|
Chris@17
|
87 ['2017-04-30 00:00:00.000000', 'Europe/Zurich', '2017-04-30 00:00:00.0 Europe/Zurich (+02:00)', 1493503200, 'Sunday, April 30, 2017%Afrom now%ADST On'],
|
Chris@17
|
88 ['2017-12-31 00:00:00.000000', 'Europe/Zurich', '2017-12-31 00:00:00.0 Europe/Zurich (+01:00)', 1514674800, 'Sunday, December 31, 2017%Afrom now%ADST Off'],
|
Chris@17
|
89 ['2017-04-30 00:00:00.000000', '+02:00', '2017-04-30 00:00:00.0 +02:00', 1493503200, 'Sunday, April 30, 2017%Afrom now'],
|
Chris@12
|
90
|
Chris@17
|
91 ['2017-04-30 00:00:00.100000', '+00:00', '2017-04-30 00:00:00.100 +00:00', 1493510400, 'Sunday, April 30, 2017%Afrom now'],
|
Chris@17
|
92 ['2017-04-30 00:00:00.120000', '+00:00', '2017-04-30 00:00:00.120 +00:00', 1493510400, 'Sunday, April 30, 2017%Afrom now'],
|
Chris@17
|
93 ['2017-04-30 00:00:00.123000', '+00:00', '2017-04-30 00:00:00.123 +00:00', 1493510400, 'Sunday, April 30, 2017%Afrom now'],
|
Chris@17
|
94 ['2017-04-30 00:00:00.123400', '+00:00', '2017-04-30 00:00:00.123400 +00:00', 1493510400, 'Sunday, April 30, 2017%Afrom now'],
|
Chris@17
|
95 ['2017-04-30 00:00:00.123450', '+00:00', '2017-04-30 00:00:00.123450 +00:00', 1493510400, 'Sunday, April 30, 2017%Afrom now'],
|
Chris@17
|
96 ['2017-04-30 00:00:00.123456', '+00:00', '2017-04-30 00:00:00.123456 +00:00', 1493510400, 'Sunday, April 30, 2017%Afrom now'],
|
Chris@17
|
97 ];
|
Chris@12
|
98 }
|
Chris@12
|
99
|
Chris@12
|
100 /**
|
Chris@12
|
101 * @dataProvider provideIntervals
|
Chris@12
|
102 */
|
Chris@12
|
103 public function testDumpInterval($intervalSpec, $ms, $invert, $expected)
|
Chris@12
|
104 {
|
Chris@17
|
105 if ($ms && \PHP_VERSION_ID >= 70200 && version_compare(PHP_VERSION, '7.2.0rc3', '<=')) {
|
Chris@12
|
106 $this->markTestSkipped('Skipped on 7.2 before rc4 because of php bug #75354.');
|
Chris@12
|
107 }
|
Chris@12
|
108
|
Chris@12
|
109 $interval = $this->createInterval($intervalSpec, $ms, $invert);
|
Chris@12
|
110
|
Chris@12
|
111 $xDump = <<<EODUMP
|
Chris@12
|
112 DateInterval {
|
Chris@12
|
113 interval: $expected
|
Chris@12
|
114 %A}
|
Chris@12
|
115 EODUMP;
|
Chris@12
|
116
|
Chris@12
|
117 $this->assertDumpMatchesFormat($xDump, $interval);
|
Chris@12
|
118 }
|
Chris@12
|
119
|
Chris@12
|
120 /**
|
Chris@12
|
121 * @dataProvider provideIntervals
|
Chris@12
|
122 */
|
Chris@12
|
123 public function testDumpIntervalExcludingVerbosity($intervalSpec, $ms, $invert, $expected)
|
Chris@12
|
124 {
|
Chris@17
|
125 if ($ms && \PHP_VERSION_ID >= 70200 && version_compare(PHP_VERSION, '7.2.0rc3', '<=')) {
|
Chris@12
|
126 $this->markTestSkipped('Skipped on 7.2 before rc4 because of php bug #75354.');
|
Chris@12
|
127 }
|
Chris@12
|
128
|
Chris@12
|
129 $interval = $this->createInterval($intervalSpec, $ms, $invert);
|
Chris@12
|
130
|
Chris@12
|
131 $xDump = <<<EODUMP
|
Chris@12
|
132 DateInterval {
|
Chris@12
|
133 interval: $expected
|
Chris@12
|
134 }
|
Chris@12
|
135 EODUMP;
|
Chris@12
|
136
|
Chris@12
|
137 $this->assertDumpEquals($xDump, $interval, Caster::EXCLUDE_VERBOSE);
|
Chris@12
|
138 }
|
Chris@12
|
139
|
Chris@12
|
140 /**
|
Chris@12
|
141 * @dataProvider provideIntervals
|
Chris@12
|
142 */
|
Chris@12
|
143 public function testCastInterval($intervalSpec, $ms, $invert, $xInterval, $xSeconds)
|
Chris@12
|
144 {
|
Chris@17
|
145 if ($ms && \PHP_VERSION_ID >= 70200 && version_compare(PHP_VERSION, '7.2.0rc3', '<=')) {
|
Chris@12
|
146 $this->markTestSkipped('Skipped on 7.2 before rc4 because of php bug #75354.');
|
Chris@12
|
147 }
|
Chris@12
|
148
|
Chris@12
|
149 $interval = $this->createInterval($intervalSpec, $ms, $invert);
|
Chris@12
|
150 $stub = new Stub();
|
Chris@12
|
151
|
Chris@17
|
152 $cast = DateCaster::castInterval($interval, ['foo' => 'bar'], $stub, false, Caster::EXCLUDE_VERBOSE);
|
Chris@12
|
153
|
Chris@12
|
154 $xDump = <<<EODUMP
|
Chris@12
|
155 array:1 [
|
Chris@12
|
156 "\\x00~\\x00interval" => $xInterval
|
Chris@12
|
157 ]
|
Chris@12
|
158 EODUMP;
|
Chris@12
|
159
|
Chris@12
|
160 $this->assertDumpEquals($xDump, $cast);
|
Chris@12
|
161
|
Chris@12
|
162 if (null === $xSeconds) {
|
Chris@12
|
163 return;
|
Chris@12
|
164 }
|
Chris@12
|
165
|
Chris@12
|
166 $xDump = <<<EODUMP
|
Chris@12
|
167 Symfony\Component\VarDumper\Caster\ConstStub {
|
Chris@12
|
168 +type: 1
|
Chris@12
|
169 +class: "$xInterval"
|
Chris@12
|
170 +value: "$xSeconds"
|
Chris@12
|
171 +cut: 0
|
Chris@12
|
172 +handle: 0
|
Chris@12
|
173 +refCount: 0
|
Chris@12
|
174 +position: 0
|
Chris@12
|
175 +attr: []
|
Chris@12
|
176 }
|
Chris@12
|
177 EODUMP;
|
Chris@12
|
178
|
Chris@12
|
179 $this->assertDumpMatchesFormat($xDump, $cast["\0~\0interval"]);
|
Chris@12
|
180 }
|
Chris@12
|
181
|
Chris@12
|
182 public function provideIntervals()
|
Chris@12
|
183 {
|
Chris@12
|
184 $i = new \DateInterval('PT0S');
|
Chris@12
|
185 $ms = ($withMs = \PHP_VERSION_ID >= 70100 && isset($i->f)) ? '.0' : '';
|
Chris@12
|
186
|
Chris@17
|
187 return [
|
Chris@17
|
188 ['PT0S', 0, 0, '0s', '0s'],
|
Chris@17
|
189 ['PT0S', 0.1, 0, $withMs ? '+ 00:00:00.100' : '0s', '%is'],
|
Chris@17
|
190 ['PT1S', 0, 0, '+ 00:00:01'.$ms, '%is'],
|
Chris@17
|
191 ['PT2M', 0, 0, '+ 00:02:00'.$ms, '%is'],
|
Chris@17
|
192 ['PT3H', 0, 0, '+ 03:00:00'.$ms, '%ss'],
|
Chris@17
|
193 ['P4D', 0, 0, '+ 4d', '%ss'],
|
Chris@17
|
194 ['P5M', 0, 0, '+ 5m', null],
|
Chris@17
|
195 ['P6Y', 0, 0, '+ 6y', null],
|
Chris@17
|
196 ['P1Y2M3DT4H5M6S', 0, 0, '+ 1y 2m 3d 04:05:06'.$ms, null],
|
Chris@17
|
197 ['PT1M60S', 0, 0, '+ 00:02:00'.$ms, null],
|
Chris@17
|
198 ['PT1H60M', 0, 0, '+ 02:00:00'.$ms, null],
|
Chris@17
|
199 ['P1DT24H', 0, 0, '+ 2d', null],
|
Chris@17
|
200 ['P1M32D', 0, 0, '+ 1m 32d', null],
|
Chris@12
|
201
|
Chris@17
|
202 ['PT0S', 0, 1, '0s', '0s'],
|
Chris@17
|
203 ['PT0S', 0.1, 1, $withMs ? '- 00:00:00.100' : '0s', '%is'],
|
Chris@17
|
204 ['PT1S', 0, 1, '- 00:00:01'.$ms, '%is'],
|
Chris@17
|
205 ['PT2M', 0, 1, '- 00:02:00'.$ms, '%is'],
|
Chris@17
|
206 ['PT3H', 0, 1, '- 03:00:00'.$ms, '%ss'],
|
Chris@17
|
207 ['P4D', 0, 1, '- 4d', '%ss'],
|
Chris@17
|
208 ['P5M', 0, 1, '- 5m', null],
|
Chris@17
|
209 ['P6Y', 0, 1, '- 6y', null],
|
Chris@17
|
210 ['P1Y2M3DT4H5M6S', 0, 1, '- 1y 2m 3d 04:05:06'.$ms, null],
|
Chris@17
|
211 ['PT1M60S', 0, 1, '- 00:02:00'.$ms, null],
|
Chris@17
|
212 ['PT1H60M', 0, 1, '- 02:00:00'.$ms, null],
|
Chris@17
|
213 ['P1DT24H', 0, 1, '- 2d', null],
|
Chris@17
|
214 ['P1M32D', 0, 1, '- 1m 32d', null],
|
Chris@17
|
215 ];
|
Chris@12
|
216 }
|
Chris@12
|
217
|
Chris@12
|
218 /**
|
Chris@12
|
219 * @dataProvider provideTimeZones
|
Chris@12
|
220 */
|
Chris@12
|
221 public function testDumpTimeZone($timezone, $expected)
|
Chris@12
|
222 {
|
Chris@17
|
223 if ((\defined('HHVM_VERSION_ID') || \PHP_VERSION_ID <= 50509) && !preg_match('/\w+\/\w+/', $timezone)) {
|
Chris@12
|
224 $this->markTestSkipped('DateTimeZone GMT offsets are supported since 5.5.10. See https://github.com/facebook/hhvm/issues/5875 for HHVM.');
|
Chris@12
|
225 }
|
Chris@12
|
226
|
Chris@12
|
227 $timezone = new \DateTimeZone($timezone);
|
Chris@12
|
228
|
Chris@12
|
229 $xDump = <<<EODUMP
|
Chris@12
|
230 DateTimeZone {
|
Chris@12
|
231 timezone: $expected
|
Chris@12
|
232 %A}
|
Chris@12
|
233 EODUMP;
|
Chris@12
|
234
|
Chris@12
|
235 $this->assertDumpMatchesFormat($xDump, $timezone);
|
Chris@12
|
236 }
|
Chris@12
|
237
|
Chris@12
|
238 /**
|
Chris@12
|
239 * @dataProvider provideTimeZones
|
Chris@12
|
240 */
|
Chris@12
|
241 public function testDumpTimeZoneExcludingVerbosity($timezone, $expected)
|
Chris@12
|
242 {
|
Chris@17
|
243 if ((\defined('HHVM_VERSION_ID') || \PHP_VERSION_ID <= 50509) && !preg_match('/\w+\/\w+/', $timezone)) {
|
Chris@12
|
244 $this->markTestSkipped('DateTimeZone GMT offsets are supported since 5.5.10. See https://github.com/facebook/hhvm/issues/5875 for HHVM.');
|
Chris@12
|
245 }
|
Chris@12
|
246
|
Chris@12
|
247 $timezone = new \DateTimeZone($timezone);
|
Chris@12
|
248
|
Chris@12
|
249 $xDump = <<<EODUMP
|
Chris@12
|
250 DateTimeZone {
|
Chris@12
|
251 timezone: $expected
|
Chris@12
|
252 }
|
Chris@12
|
253 EODUMP;
|
Chris@12
|
254
|
Chris@12
|
255 $this->assertDumpMatchesFormat($xDump, $timezone, Caster::EXCLUDE_VERBOSE);
|
Chris@12
|
256 }
|
Chris@12
|
257
|
Chris@12
|
258 /**
|
Chris@12
|
259 * @dataProvider provideTimeZones
|
Chris@12
|
260 */
|
Chris@12
|
261 public function testCastTimeZone($timezone, $xTimezone, $xRegion)
|
Chris@12
|
262 {
|
Chris@17
|
263 if ((\defined('HHVM_VERSION_ID') || \PHP_VERSION_ID <= 50509) && !preg_match('/\w+\/\w+/', $timezone)) {
|
Chris@12
|
264 $this->markTestSkipped('DateTimeZone GMT offsets are supported since 5.5.10. See https://github.com/facebook/hhvm/issues/5875 for HHVM.');
|
Chris@12
|
265 }
|
Chris@12
|
266
|
Chris@12
|
267 $timezone = new \DateTimeZone($timezone);
|
Chris@12
|
268 $stub = new Stub();
|
Chris@12
|
269
|
Chris@17
|
270 $cast = DateCaster::castTimeZone($timezone, ['foo' => 'bar'], $stub, false, Caster::EXCLUDE_VERBOSE);
|
Chris@12
|
271
|
Chris@12
|
272 $xDump = <<<EODUMP
|
Chris@12
|
273 array:1 [
|
Chris@12
|
274 "\\x00~\\x00timezone" => $xTimezone
|
Chris@12
|
275 ]
|
Chris@12
|
276 EODUMP;
|
Chris@12
|
277
|
Chris@12
|
278 $this->assertDumpMatchesFormat($xDump, $cast);
|
Chris@12
|
279
|
Chris@12
|
280 $xDump = <<<EODUMP
|
Chris@12
|
281 Symfony\Component\VarDumper\Caster\ConstStub {
|
Chris@12
|
282 +type: 1
|
Chris@12
|
283 +class: "$xTimezone"
|
Chris@12
|
284 +value: "$xRegion"
|
Chris@12
|
285 +cut: 0
|
Chris@12
|
286 +handle: 0
|
Chris@12
|
287 +refCount: 0
|
Chris@12
|
288 +position: 0
|
Chris@12
|
289 +attr: []
|
Chris@12
|
290 }
|
Chris@12
|
291 EODUMP;
|
Chris@12
|
292
|
Chris@12
|
293 $this->assertDumpMatchesFormat($xDump, $cast["\0~\0timezone"]);
|
Chris@12
|
294 }
|
Chris@12
|
295
|
Chris@12
|
296 public function provideTimeZones()
|
Chris@12
|
297 {
|
Chris@17
|
298 $xRegion = \extension_loaded('intl') ? '%s' : '';
|
Chris@12
|
299
|
Chris@17
|
300 return [
|
Chris@12
|
301 // type 1 (UTC offset)
|
Chris@17
|
302 ['-12:00', '-12:00', ''],
|
Chris@17
|
303 ['+00:00', '+00:00', ''],
|
Chris@17
|
304 ['+14:00', '+14:00', ''],
|
Chris@12
|
305
|
Chris@12
|
306 // type 2 (timezone abbreviation)
|
Chris@17
|
307 ['GMT', '+00:00', ''],
|
Chris@17
|
308 ['a', '+01:00', ''],
|
Chris@17
|
309 ['b', '+02:00', ''],
|
Chris@17
|
310 ['z', '+00:00', ''],
|
Chris@12
|
311
|
Chris@12
|
312 // type 3 (timezone identifier)
|
Chris@17
|
313 ['Africa/Tunis', 'Africa/Tunis (%s:00)', $xRegion],
|
Chris@17
|
314 ['America/Panama', 'America/Panama (%s:00)', $xRegion],
|
Chris@17
|
315 ['Asia/Jerusalem', 'Asia/Jerusalem (%s:00)', $xRegion],
|
Chris@17
|
316 ['Atlantic/Canary', 'Atlantic/Canary (%s:00)', $xRegion],
|
Chris@17
|
317 ['Australia/Perth', 'Australia/Perth (%s:00)', $xRegion],
|
Chris@17
|
318 ['Europe/Zurich', 'Europe/Zurich (%s:00)', $xRegion],
|
Chris@17
|
319 ['Pacific/Tahiti', 'Pacific/Tahiti (%s:00)', $xRegion],
|
Chris@17
|
320 ];
|
Chris@12
|
321 }
|
Chris@12
|
322
|
Chris@12
|
323 /**
|
Chris@12
|
324 * @dataProvider providePeriods
|
Chris@12
|
325 */
|
Chris@12
|
326 public function testDumpPeriod($start, $interval, $end, $options, $expected)
|
Chris@12
|
327 {
|
Chris@17
|
328 if (\defined('HHVM_VERSION_ID') || \PHP_VERSION_ID < 50620 || (\PHP_VERSION_ID >= 70000 && \PHP_VERSION_ID < 70005)) {
|
Chris@12
|
329 $this->markTestSkipped();
|
Chris@12
|
330 }
|
Chris@12
|
331
|
Chris@17
|
332 $p = new \DatePeriod(new \DateTime($start), new \DateInterval($interval), \is_int($end) ? $end : new \DateTime($end), $options);
|
Chris@12
|
333
|
Chris@12
|
334 $xDump = <<<EODUMP
|
Chris@12
|
335 DatePeriod {
|
Chris@12
|
336 period: $expected
|
Chris@12
|
337 %A}
|
Chris@12
|
338 EODUMP;
|
Chris@12
|
339
|
Chris@12
|
340 $this->assertDumpMatchesFormat($xDump, $p);
|
Chris@12
|
341 }
|
Chris@12
|
342
|
Chris@12
|
343 /**
|
Chris@12
|
344 * @dataProvider providePeriods
|
Chris@12
|
345 */
|
Chris@12
|
346 public function testCastPeriod($start, $interval, $end, $options, $xPeriod, $xDates)
|
Chris@12
|
347 {
|
Chris@17
|
348 if (\defined('HHVM_VERSION_ID') || \PHP_VERSION_ID < 50620 || (\PHP_VERSION_ID >= 70000 && \PHP_VERSION_ID < 70005)) {
|
Chris@12
|
349 $this->markTestSkipped();
|
Chris@12
|
350 }
|
Chris@12
|
351
|
Chris@17
|
352 $p = new \DatePeriod(new \DateTime($start), new \DateInterval($interval), \is_int($end) ? $end : new \DateTime($end), $options);
|
Chris@12
|
353 $stub = new Stub();
|
Chris@12
|
354
|
Chris@17
|
355 $cast = DateCaster::castPeriod($p, [], $stub, false, 0);
|
Chris@12
|
356
|
Chris@12
|
357 $xDump = <<<EODUMP
|
Chris@12
|
358 array:1 [
|
Chris@12
|
359 "\\x00~\\x00period" => $xPeriod
|
Chris@12
|
360 ]
|
Chris@12
|
361 EODUMP;
|
Chris@12
|
362
|
Chris@12
|
363 $this->assertDumpEquals($xDump, $cast);
|
Chris@12
|
364
|
Chris@12
|
365 $xDump = <<<EODUMP
|
Chris@12
|
366 Symfony\Component\VarDumper\Caster\ConstStub {
|
Chris@12
|
367 +type: 1
|
Chris@12
|
368 +class: "$xPeriod"
|
Chris@12
|
369 +value: "%A$xDates%A"
|
Chris@12
|
370 +cut: 0
|
Chris@12
|
371 +handle: 0
|
Chris@12
|
372 +refCount: 0
|
Chris@12
|
373 +position: 0
|
Chris@12
|
374 +attr: []
|
Chris@12
|
375 }
|
Chris@12
|
376 EODUMP;
|
Chris@12
|
377
|
Chris@12
|
378 $this->assertDumpMatchesFormat($xDump, $cast["\0~\0period"]);
|
Chris@12
|
379 }
|
Chris@12
|
380
|
Chris@12
|
381 public function providePeriods()
|
Chris@12
|
382 {
|
Chris@12
|
383 $i = new \DateInterval('PT0S');
|
Chris@12
|
384 $ms = \PHP_VERSION_ID >= 70100 && isset($i->f) ? '.0' : '';
|
Chris@12
|
385
|
Chris@17
|
386 $periods = [
|
Chris@17
|
387 ['2017-01-01', 'P1D', '2017-01-03', 0, 'every + 1d, from 2017-01-01 00:00:00.0 (included) to 2017-01-03 00:00:00.0', '1) 2017-01-01%a2) 2017-01-02'],
|
Chris@17
|
388 ['2017-01-01', 'P1D', 1, 0, 'every + 1d, from 2017-01-01 00:00:00.0 (included) recurring 2 time/s', '1) 2017-01-01%a2) 2017-01-02'],
|
Chris@12
|
389
|
Chris@17
|
390 ['2017-01-01', 'P1D', '2017-01-04', 0, 'every + 1d, from 2017-01-01 00:00:00.0 (included) to 2017-01-04 00:00:00.0', '1) 2017-01-01%a2) 2017-01-02%a3) 2017-01-03'],
|
Chris@17
|
391 ['2017-01-01', 'P1D', 2, 0, 'every + 1d, from 2017-01-01 00:00:00.0 (included) recurring 3 time/s', '1) 2017-01-01%a2) 2017-01-02%a3) 2017-01-03'],
|
Chris@12
|
392
|
Chris@17
|
393 ['2017-01-01', 'P1D', '2017-01-05', 0, 'every + 1d, from 2017-01-01 00:00:00.0 (included) to 2017-01-05 00:00:00.0', '1) 2017-01-01%a2) 2017-01-02%a1 more'],
|
Chris@17
|
394 ['2017-01-01', 'P1D', 3, 0, 'every + 1d, from 2017-01-01 00:00:00.0 (included) recurring 4 time/s', '1) 2017-01-01%a2) 2017-01-02%a3) 2017-01-03%a1 more'],
|
Chris@12
|
395
|
Chris@17
|
396 ['2017-01-01', 'P1D', '2017-01-21', 0, 'every + 1d, from 2017-01-01 00:00:00.0 (included) to 2017-01-21 00:00:00.0', '1) 2017-01-01%a17 more'],
|
Chris@17
|
397 ['2017-01-01', 'P1D', 19, 0, 'every + 1d, from 2017-01-01 00:00:00.0 (included) recurring 20 time/s', '1) 2017-01-01%a17 more'],
|
Chris@12
|
398
|
Chris@17
|
399 ['2017-01-01 01:00:00', 'P1D', '2017-01-03 01:00:00', 0, 'every + 1d, from 2017-01-01 01:00:00.0 (included) to 2017-01-03 01:00:00.0', '1) 2017-01-01 01:00:00.0%a2) 2017-01-02 01:00:00.0'],
|
Chris@17
|
400 ['2017-01-01 01:00:00', 'P1D', 1, 0, 'every + 1d, from 2017-01-01 01:00:00.0 (included) recurring 2 time/s', '1) 2017-01-01 01:00:00.0%a2) 2017-01-02 01:00:00.0'],
|
Chris@12
|
401
|
Chris@17
|
402 ['2017-01-01', 'P1DT1H', '2017-01-03', 0, "every + 1d 01:00:00$ms, from 2017-01-01 00:00:00.0 (included) to 2017-01-03 00:00:00.0", '1) 2017-01-01 00:00:00.0%a2) 2017-01-02 01:00:00.0'],
|
Chris@17
|
403 ['2017-01-01', 'P1DT1H', 1, 0, "every + 1d 01:00:00$ms, from 2017-01-01 00:00:00.0 (included) recurring 2 time/s", '1) 2017-01-01 00:00:00.0%a2) 2017-01-02 01:00:00.0'],
|
Chris@12
|
404
|
Chris@17
|
405 ['2017-01-01', 'P1D', '2017-01-04', \DatePeriod::EXCLUDE_START_DATE, 'every + 1d, from 2017-01-01 00:00:00.0 (excluded) to 2017-01-04 00:00:00.0', '1) 2017-01-02%a2) 2017-01-03'],
|
Chris@17
|
406 ['2017-01-01', 'P1D', 2, \DatePeriod::EXCLUDE_START_DATE, 'every + 1d, from 2017-01-01 00:00:00.0 (excluded) recurring 2 time/s', '1) 2017-01-02%a2) 2017-01-03'],
|
Chris@17
|
407 ];
|
Chris@12
|
408
|
Chris@12
|
409 if (\PHP_VERSION_ID < 70107) {
|
Chris@12
|
410 array_walk($periods, function (&$i) { $i[5] = ''; });
|
Chris@12
|
411 }
|
Chris@12
|
412
|
Chris@12
|
413 return $periods;
|
Chris@12
|
414 }
|
Chris@12
|
415
|
Chris@12
|
416 private function createInterval($intervalSpec, $ms, $invert)
|
Chris@12
|
417 {
|
Chris@12
|
418 $interval = new \DateInterval($intervalSpec);
|
Chris@12
|
419 if (\PHP_VERSION_ID >= 70100 && isset($interval->f)) {
|
Chris@12
|
420 $interval->f = $ms;
|
Chris@12
|
421 }
|
Chris@12
|
422 $interval->invert = $invert;
|
Chris@12
|
423
|
Chris@12
|
424 return $interval;
|
Chris@12
|
425 }
|
Chris@12
|
426 }
|