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