Mercurial > hg > rc1
comparison vendor/sabre/vobject/tests/VObject/TimeZoneUtilTest.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 class TimezoneUtilTest extends \PHPUnit_Framework_TestCase { | |
6 | |
7 function setUp() { | |
8 | |
9 // clearning the tz cache | |
10 TimezoneUtil::$map = null; | |
11 | |
12 } | |
13 | |
14 /** | |
15 * @dataProvider getMapping | |
16 */ | |
17 function testCorrectTZ($timezoneName) { | |
18 | |
19 $tz = new \DateTimeZone($timezoneName); | |
20 $this->assertInstanceOf('DateTimeZone', $tz); | |
21 | |
22 } | |
23 | |
24 function getMapping() { | |
25 | |
26 TimeZoneUtil::loadTzMaps(); | |
27 | |
28 // PHPUNit requires an array of arrays | |
29 return array_map( | |
30 function($value) { | |
31 return array($value); | |
32 }, | |
33 TimeZoneUtil::$map | |
34 ); | |
35 | |
36 } | |
37 | |
38 function testExchangeMap() { | |
39 | |
40 $vobj = <<<HI | |
41 BEGIN:VCALENDAR | |
42 METHOD:REQUEST | |
43 VERSION:2.0 | |
44 BEGIN:VTIMEZONE | |
45 TZID:foo | |
46 X-MICROSOFT-CDO-TZID:2 | |
47 BEGIN:STANDARD | |
48 DTSTART:16010101T030000 | |
49 TZOFFSETFROM:+0200 | |
50 TZOFFSETTO:+0100 | |
51 RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=10;BYDAY=-1SU | |
52 END:STANDARD | |
53 BEGIN:DAYLIGHT | |
54 DTSTART:16010101T020000 | |
55 TZOFFSETFROM:+0100 | |
56 TZOFFSETTO:+0200 | |
57 RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=3;BYDAY=-1SU | |
58 END:DAYLIGHT | |
59 END:VTIMEZONE | |
60 BEGIN:VEVENT | |
61 DTSTAMP:20120416T092149Z | |
62 DTSTART;TZID="foo":20120418T1 | |
63 00000 | |
64 SUMMARY:Begin Unterhaltsreinigung | |
65 UID:040000008200E00074C5B7101A82E0080000000010DA091DC31BCD01000000000000000 | |
66 0100000008FECD2E607780649BE5A4C9EE6418CBC | |
67 000 | |
68 END:VEVENT | |
69 END:VCALENDAR | |
70 HI; | |
71 | |
72 $tz = TimeZoneUtil::getTimeZone('foo', Reader::read($vobj)); | |
73 $ex = new \DateTimeZone('Europe/Lisbon'); | |
74 | |
75 $this->assertEquals($ex->getName(), $tz->getName()); | |
76 | |
77 } | |
78 | |
79 function testWetherMicrosoftIsStillInsane() { | |
80 | |
81 $vobj = <<<HI | |
82 BEGIN:VCALENDAR | |
83 METHOD:REQUEST | |
84 VERSION:2.0 | |
85 BEGIN:VTIMEZONE | |
86 TZID:(GMT+01.00) Sarajevo/Warsaw/Zagreb | |
87 X-MICROSOFT-CDO-TZID:2 | |
88 BEGIN:STANDARD | |
89 DTSTART:16010101T030000 | |
90 TZOFFSETFROM:+0200 | |
91 TZOFFSETTO:+0100 | |
92 RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=10;BYDAY=-1SU | |
93 END:STANDARD | |
94 END:VTIMEZONE | |
95 END:VCALENDAR | |
96 HI; | |
97 | |
98 $tz = TimeZoneUtil::getTimeZone('(GMT+01.00) Sarajevo/Warsaw/Zagreb', Reader::read($vobj)); | |
99 $ex = new \DateTimeZone('Europe/Sarajevo'); | |
100 | |
101 $this->assertEquals($ex->getName(), $tz->getName()); | |
102 | |
103 } | |
104 | |
105 function testUnknownExchangeId() { | |
106 | |
107 $vobj = <<<HI | |
108 BEGIN:VCALENDAR | |
109 METHOD:REQUEST | |
110 VERSION:2.0 | |
111 BEGIN:VTIMEZONE | |
112 TZID:foo | |
113 X-MICROSOFT-CDO-TZID:2000 | |
114 BEGIN:STANDARD | |
115 DTSTART:16010101T030000 | |
116 TZOFFSETFROM:+0200 | |
117 TZOFFSETTO:+0100 | |
118 RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=10;BYDAY=-1SU | |
119 END:STANDARD | |
120 BEGIN:DAYLIGHT | |
121 DTSTART:16010101T020000 | |
122 TZOFFSETFROM:+0100 | |
123 TZOFFSETTO:+0200 | |
124 RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=3;BYDAY=-1SU | |
125 END:DAYLIGHT | |
126 END:VTIMEZONE | |
127 BEGIN:VEVENT | |
128 DTSTAMP:20120416T092149Z | |
129 DTSTART;TZID="foo":20120418T1 | |
130 00000 | |
131 SUMMARY:Begin Unterhaltsreinigung | |
132 UID:040000008200E00074C5B7101A82E0080000000010DA091DC31BCD01000000000000000 | |
133 0100000008FECD2E607780649BE5A4C9EE6418CBC | |
134 DTEND;TZID="Sarajevo, Skopje, Sofija, Vilnius, Warsaw, Zagreb":20120418T103 | |
135 000 | |
136 END:VEVENT | |
137 END:VCALENDAR | |
138 HI; | |
139 | |
140 $tz = TimeZoneUtil::getTimeZone('foo', Reader::read($vobj)); | |
141 $ex = new \DateTimeZone(date_default_timezone_get()); | |
142 $this->assertEquals($ex->getName(), $tz->getName()); | |
143 | |
144 } | |
145 | |
146 function testWindowsTimeZone() { | |
147 | |
148 $tz = TimeZoneUtil::getTimeZone('Eastern Standard Time'); | |
149 $ex = new \DateTimeZone('America/New_York'); | |
150 $this->assertEquals($ex->getName(), $tz->getName()); | |
151 | |
152 } | |
153 | |
154 /** | |
155 * @dataProvider getPHPTimeZoneIdentifiers | |
156 */ | |
157 function testTimeZoneIdentifiers($tzid) { | |
158 | |
159 $tz = TimeZoneUtil::getTimeZone($tzid); | |
160 $ex = new \DateTimeZone($tzid); | |
161 | |
162 $this->assertEquals($ex->getName(), $tz->getName()); | |
163 | |
164 } | |
165 | |
166 /** | |
167 * @dataProvider getPHPTimeZoneBCIdentifiers | |
168 */ | |
169 function testTimeZoneBCIdentifiers($tzid) { | |
170 | |
171 $tz = TimeZoneUtil::getTimeZone($tzid); | |
172 $ex = new \DateTimeZone($tzid); | |
173 | |
174 $this->assertEquals($ex->getName(), $tz->getName()); | |
175 | |
176 } | |
177 | |
178 function getPHPTimeZoneIdentifiers() { | |
179 | |
180 // PHPUNit requires an array of arrays | |
181 return array_map( | |
182 function($value) { | |
183 return array($value); | |
184 }, | |
185 \DateTimeZone::listIdentifiers() | |
186 ); | |
187 | |
188 } | |
189 | |
190 function getPHPTimeZoneBCIdentifiers() { | |
191 | |
192 // PHPUNit requires an array of arrays | |
193 return array_map( | |
194 function($value) { | |
195 return array($value); | |
196 }, | |
197 TimeZoneUtil::getIdentifiersBC() | |
198 ); | |
199 | |
200 } | |
201 | |
202 function testTimezoneOffset() { | |
203 | |
204 $tz = TimeZoneUtil::getTimeZone('GMT-0400', null, true); | |
205 | |
206 if (version_compare(PHP_VERSION, '5.5.10', '>=') && !defined('HHVM_VERSION')) { | |
207 $ex = new \DateTimeZone('-04:00'); | |
208 } else { | |
209 $ex = new \DateTimeZone('Etc/GMT-4'); | |
210 } | |
211 $this->assertEquals($ex->getName(), $tz->getName()); | |
212 | |
213 } | |
214 | |
215 /** | |
216 * @expectedException InvalidArgumentException | |
217 */ | |
218 function testTimezoneFail() { | |
219 | |
220 $tz = TimeZoneUtil::getTimeZone('FooBar', null, true); | |
221 | |
222 } | |
223 | |
224 function testFallBack() { | |
225 | |
226 $vobj = <<<HI | |
227 BEGIN:VCALENDAR | |
228 METHOD:REQUEST | |
229 VERSION:2.0 | |
230 BEGIN:VTIMEZONE | |
231 TZID:foo | |
232 BEGIN:STANDARD | |
233 DTSTART:16010101T030000 | |
234 TZOFFSETFROM:+0200 | |
235 TZOFFSETTO:+0100 | |
236 RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=10;BYDAY=-1SU | |
237 END:STANDARD | |
238 BEGIN:DAYLIGHT | |
239 DTSTART:16010101T020000 | |
240 TZOFFSETFROM:+0100 | |
241 TZOFFSETTO:+0200 | |
242 RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=3;BYDAY=-1SU | |
243 END:DAYLIGHT | |
244 END:VTIMEZONE | |
245 BEGIN:VEVENT | |
246 DTSTAMP:20120416T092149Z | |
247 DTSTART;TZID="foo":20120418T1 | |
248 00000 | |
249 SUMMARY:Begin Unterhaltsreinigung | |
250 UID:040000008200E00074C5B7101A82E0080000000010DA091DC31BCD01000000000000000 | |
251 0100000008FECD2E607780649BE5A4C9EE6418CBC | |
252 000 | |
253 END:VEVENT | |
254 END:VCALENDAR | |
255 HI; | |
256 | |
257 $tz = TimeZoneUtil::getTimeZone('foo', Reader::read($vobj)); | |
258 $ex = new \DateTimeZone(date_default_timezone_get()); | |
259 $this->assertEquals($ex->getName(), $tz->getName()); | |
260 | |
261 } | |
262 | |
263 function testLjubljanaBug() { | |
264 | |
265 $vobj = <<<HI | |
266 BEGIN:VCALENDAR | |
267 CALSCALE:GREGORIAN | |
268 PRODID:-//Ximian//NONSGML Evolution Calendar//EN | |
269 VERSION:2.0 | |
270 BEGIN:VTIMEZONE | |
271 TZID:/freeassociation.sourceforge.net/Tzfile/Europe/Ljubljana | |
272 X-LIC-LOCATION:Europe/Ljubljana | |
273 BEGIN:STANDARD | |
274 TZNAME:CET | |
275 DTSTART:19701028T030000 | |
276 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 | |
277 TZOFFSETFROM:+0200 | |
278 TZOFFSETTO:+0100 | |
279 END:STANDARD | |
280 BEGIN:DAYLIGHT | |
281 TZNAME:CEST | |
282 DTSTART:19700325T020000 | |
283 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3 | |
284 TZOFFSETFROM:+0100 | |
285 TZOFFSETTO:+0200 | |
286 END:DAYLIGHT | |
287 END:VTIMEZONE | |
288 BEGIN:VEVENT | |
289 UID:foo | |
290 DTSTART;TZID=/freeassociation.sourceforge.net/Tzfile/Europe/Ljubljana: | |
291 20121003T080000 | |
292 DTEND;TZID=/freeassociation.sourceforge.net/Tzfile/Europe/Ljubljana: | |
293 20121003T083000 | |
294 TRANSP:OPAQUE | |
295 SEQUENCE:2 | |
296 SUMMARY:testing | |
297 CREATED:20121002T172613Z | |
298 LAST-MODIFIED:20121002T172613Z | |
299 END:VEVENT | |
300 END:VCALENDAR | |
301 | |
302 HI; | |
303 | |
304 | |
305 $tz = TimeZoneUtil::getTimeZone('/freeassociation.sourceforge.net/Tzfile/Europe/Ljubljana', Reader::read($vobj)); | |
306 $ex = new \DateTimeZone('Europe/Ljubljana'); | |
307 $this->assertEquals($ex->getName(), $tz->getName()); | |
308 | |
309 } | |
310 | |
311 function testWeirdSystemVLICs() { | |
312 | |
313 $vobj = <<<HI | |
314 BEGIN:VCALENDAR | |
315 CALSCALE:GREGORIAN | |
316 PRODID:-//Ximian//NONSGML Evolution Calendar//EN | |
317 VERSION:2.0 | |
318 BEGIN:VTIMEZONE | |
319 TZID:/freeassociation.sourceforge.net/Tzfile/SystemV/EST5EDT | |
320 X-LIC-LOCATION:SystemV/EST5EDT | |
321 BEGIN:STANDARD | |
322 TZNAME:EST | |
323 DTSTART:19701104T020000 | |
324 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11 | |
325 TZOFFSETFROM:-0400 | |
326 TZOFFSETTO:-0500 | |
327 END:STANDARD | |
328 BEGIN:DAYLIGHT | |
329 TZNAME:EDT | |
330 DTSTART:19700311T020000 | |
331 RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3 | |
332 TZOFFSETFROM:-0500 | |
333 TZOFFSETTO:-0400 | |
334 END:DAYLIGHT | |
335 END:VTIMEZONE | |
336 BEGIN:VEVENT | |
337 UID:20121026T021107Z-6301-1000-1-0@chAir | |
338 DTSTAMP:20120905T172126Z | |
339 DTSTART;TZID=/freeassociation.sourceforge.net/Tzfile/SystemV/EST5EDT: | |
340 20121026T153000 | |
341 DTEND;TZID=/freeassociation.sourceforge.net/Tzfile/SystemV/EST5EDT: | |
342 20121026T160000 | |
343 TRANSP:OPAQUE | |
344 SEQUENCE:5 | |
345 SUMMARY:pick up Ibby | |
346 CLASS:PUBLIC | |
347 CREATED:20121026T021108Z | |
348 LAST-MODIFIED:20121026T021118Z | |
349 X-EVOLUTION-MOVE-CALENDAR:1 | |
350 END:VEVENT | |
351 END:VCALENDAR | |
352 HI; | |
353 | |
354 $tz = TimeZoneUtil::getTimeZone('/freeassociation.sourceforge.net/Tzfile/SystemV/EST5EDT', Reader::read($vobj), true); | |
355 $ex = new \DateTimeZone('America/New_York'); | |
356 $this->assertEquals($ex->getName(), $tz->getName()); | |
357 | |
358 } | |
359 | |
360 } |