comparison vendor/sabre/vobject/tests/VObject/DateTimeParserTest.php @ 7:430dbd5346f7

vendor sabre as distributed
author Charlie Root
date Sat, 13 Jan 2018 09:06:10 -0500
parents
children
comparison
equal deleted inserted replaced
6:cec75ba50afc 7:430dbd5346f7
1 <?php
2
3 namespace Sabre\VObject;
4
5 use DateTime;
6 use DateTimeZone;
7 use DateInterval;
8
9 class DateTimeParserTest extends \PHPUnit_Framework_TestCase {
10
11 function testParseICalendarDuration() {
12
13 $this->assertEquals('+1 weeks', DateTimeParser::parseDuration('P1W',true));
14 $this->assertEquals('+5 days', DateTimeParser::parseDuration('P5D',true));
15 $this->assertEquals('+5 days 3 hours 50 minutes 12 seconds', DateTimeParser::parseDuration('P5DT3H50M12S',true));
16 $this->assertEquals('-1 weeks 50 minutes', DateTimeParser::parseDuration('-P1WT50M',true));
17 $this->assertEquals('+50 days 3 hours 2 seconds', DateTimeParser::parseDuration('+P50DT3H2S',true));
18 $this->assertEquals('+0 seconds', DateTimeParser::parseDuration('+PT0S',true));
19 $this->assertEquals(new DateInterval('PT0S'), DateTimeParser::parseDuration('PT0S'));
20
21 }
22
23 function testParseICalendarDurationDateInterval() {
24
25 $expected = new DateInterval('P7D');
26 $this->assertEquals($expected, DateTimeParser::parseDuration('P1W'));
27 $this->assertEquals($expected, DateTimeParser::parse('P1W'));
28
29 $expected = new DateInterval('PT3M');
30 $expected->invert = true;
31 $this->assertEquals($expected, DateTimeParser::parseDuration('-PT3M'));
32
33 }
34
35 /**
36 * @expectedException LogicException
37 */
38 function testParseICalendarDurationFail() {
39
40 DateTimeParser::parseDuration('P1X',true);
41
42 }
43
44 function testParseICalendarDateTime() {
45
46 $dateTime = DateTimeParser::parseDateTime('20100316T141405');
47
48 $compare = new DateTime('2010-03-16 14:14:05',new DateTimeZone('UTC'));
49
50 $this->assertEquals($compare, $dateTime);
51
52 }
53
54 /**
55 * @depends testParseICalendarDateTime
56 * @expectedException LogicException
57 */
58 function testParseICalendarDateTimeBadFormat() {
59
60 $dateTime = DateTimeParser::parseDateTime('20100316T141405 ');
61
62 }
63
64 /**
65 * @depends testParseICalendarDateTime
66 */
67 function testParseICalendarDateTimeUTC() {
68
69 $dateTime = DateTimeParser::parseDateTime('20100316T141405Z');
70
71 $compare = new DateTime('2010-03-16 14:14:05',new DateTimeZone('UTC'));
72 $this->assertEquals($compare, $dateTime);
73
74 }
75
76 /**
77 * @depends testParseICalendarDateTime
78 */
79 function testParseICalendarDateTimeUTC2() {
80
81 $dateTime = DateTimeParser::parseDateTime('20101211T160000Z');
82
83 $compare = new DateTime('2010-12-11 16:00:00',new DateTimeZone('UTC'));
84 $this->assertEquals($compare, $dateTime);
85
86 }
87
88 /**
89 * @depends testParseICalendarDateTime
90 */
91 function testParseICalendarDateTimeCustomTimeZone() {
92
93 $dateTime = DateTimeParser::parseDateTime('20100316T141405', new DateTimeZone('Europe/Amsterdam'));
94
95 $compare = new DateTime('2010-03-16 14:14:05',new DateTimeZone('Europe/Amsterdam'));
96 $this->assertEquals($compare, $dateTime);
97
98 }
99
100 function testParseICalendarDate() {
101
102 $dateTime = DateTimeParser::parseDate('20100316');
103
104 $expected = new DateTime('2010-03-16 00:00:00',new DateTimeZone('UTC'));
105
106 $this->assertEquals($expected, $dateTime);
107
108 $dateTime = DateTimeParser::parse('20100316');
109 $this->assertEquals($expected, $dateTime);
110
111 }
112
113 /**
114 * TCheck if a date with year > 4000 will not throw an exception. iOS seems to use 45001231 in yearly recurring events
115 */
116 function testParseICalendarDateGreaterThan4000() {
117
118 $dateTime = DateTimeParser::parseDate('45001231');
119
120 $expected = new DateTime('4500-12-31 00:00:00',new DateTimeZone('UTC'));
121
122 $this->assertEquals($expected, $dateTime);
123
124 $dateTime = DateTimeParser::parse('45001231');
125 $this->assertEquals($expected, $dateTime);
126
127 }
128
129 /**
130 * Check if a datetime with year > 4000 will not throw an exception. iOS seems to use 45001231T235959 in yearly recurring events
131 */
132 function testParseICalendarDateTimeGreaterThan4000() {
133
134 $dateTime = DateTimeParser::parseDateTime('45001231T235959');
135
136 $expected = new DateTime('4500-12-31 23:59:59',new DateTimeZone('UTC'));
137
138 $this->assertEquals($expected, $dateTime);
139
140 $dateTime = DateTimeParser::parse('45001231T235959');
141 $this->assertEquals($expected, $dateTime);
142
143 }
144
145 /**
146 * @depends testParseICalendarDate
147 * @expectedException LogicException
148 */
149 function testParseICalendarDateBadFormat() {
150
151 $dateTime = DateTimeParser::parseDate('20100316T141405');
152
153 }
154
155 /**
156 * @dataProvider vcardDates
157 */
158 function testVCardDate($input, $output) {
159
160 $this->assertEquals(
161 $output,
162 DateTimeParser::parseVCardDateTime($input)
163 );
164
165 }
166
167 /**
168 * @dataProvider vcardDates
169 * @expectedException \InvalidArgumentException
170 */
171 function testBadVCardDate() {
172
173 DateTimeParser::parseVCardDateTime('1985---01');
174
175 }
176
177 /**
178 * @dataProvider vcardDates
179 * @expectedException \InvalidArgumentException
180 */
181 function testBadVCardTime() {
182
183 DateTimeParser::parseVCardTime('23:12:166');
184
185 }
186
187 function vcardDates() {
188
189 return array(
190 array(
191 "19961022T140000",
192 array(
193 "year" => 1996,
194 "month" => 10,
195 "date" => 22,
196 "hour" => 14,
197 "minute" => 00,
198 "second" => 00,
199 "timezone" => null
200 ),
201 ),
202 array(
203 "--1022T1400",
204 array(
205 "year" => null,
206 "month" => 10,
207 "date" => 22,
208 "hour" => 14,
209 "minute" => 00,
210 "second" => null,
211 "timezone" => null
212 ),
213 ),
214 array(
215 "---22T14",
216 array(
217 "year" => null,
218 "month" => null,
219 "date" => 22,
220 "hour" => 14,
221 "minute" => null,
222 "second" => null,
223 "timezone" => null
224 ),
225 ),
226 array(
227 "19850412",
228 array(
229 "year" => 1985,
230 "month" => 4,
231 "date" => 12,
232 "hour" => null,
233 "minute" => null,
234 "second" => null,
235 "timezone" => null
236 ),
237 ),
238 array(
239 "1985-04",
240 array(
241 "year" => 1985,
242 "month" => 04,
243 "date" => null,
244 "hour" => null,
245 "minute" => null,
246 "second" => null,
247 "timezone" => null
248 ),
249 ),
250 array(
251 "1985",
252 array(
253 "year" => 1985,
254 "month" => null,
255 "date" => null,
256 "hour" => null,
257 "minute" => null,
258 "second" => null,
259 "timezone" => null
260 ),
261 ),
262 array(
263 "--0412",
264 array(
265 "year" => null,
266 "month" => 4,
267 "date" => 12,
268 "hour" => null,
269 "minute" => null,
270 "second" => null,
271 "timezone" => null
272 ),
273 ),
274 array(
275 "---12",
276 array(
277 "year" => null,
278 "month" => null,
279 "date" => 12,
280 "hour" => null,
281 "minute" => null,
282 "second" => null,
283 "timezone" => null
284 ),
285 ),
286 array(
287 "T102200",
288 array(
289 "year" => null,
290 "month" => null,
291 "date" => null,
292 "hour" => 10,
293 "minute" => 22,
294 "second" => 0,
295 "timezone" => null
296 ),
297 ),
298 array(
299 "T1022",
300 array(
301 "year" => null,
302 "month" => null,
303 "date" => null,
304 "hour" => 10,
305 "minute" => 22,
306 "second" => null,
307 "timezone" => null
308 ),
309 ),
310 array(
311 "T10",
312 array(
313 "year" => null,
314 "month" => null,
315 "date" => null,
316 "hour" => 10,
317 "minute" => null,
318 "second" => null,
319 "timezone" => null
320 ),
321 ),
322 array(
323 "T-2200",
324 array(
325 "year" => null,
326 "month" => null,
327 "date" => null,
328 "hour" => null,
329 "minute" => 22,
330 "second" => 00,
331 "timezone" => null
332 ),
333 ),
334 array(
335 "T--00",
336 array(
337 "year" => null,
338 "month" => null,
339 "date" => null,
340 "hour" => null,
341 "minute" => null,
342 "second" => 00,
343 "timezone" => null
344 ),
345 ),
346 array(
347 "T102200Z",
348 array(
349 "year" => null,
350 "month" => null,
351 "date" => null,
352 "hour" => 10,
353 "minute" => 22,
354 "second" => 00,
355 "timezone" => 'Z'
356 ),
357 ),
358 array(
359 "T102200-0800",
360 array(
361 "year" => null,
362 "month" => null,
363 "date" => null,
364 "hour" => 10,
365 "minute" => 22,
366 "second" => 00,
367 "timezone" => '-0800'
368 ),
369 ),
370
371 // extended format
372 array(
373 "2012-11-29T15:10:53Z",
374 array(
375 "year" => 2012,
376 "month" => 11,
377 "date" => 29,
378 "hour" => 15,
379 "minute" => 10,
380 "second" => 53,
381 "timezone" => 'Z'
382 ),
383 ),
384 );
385
386 }
387
388
389 }