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 }