Mercurial > hg > rc1
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 } |