diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/sabre/vobject/tests/VObject/TimeZoneUtilTest.php	Sat Jan 13 09:06:10 2018 -0500
@@ -0,0 +1,360 @@
+<?php
+
+namespace Sabre\VObject;
+
+class TimezoneUtilTest extends \PHPUnit_Framework_TestCase {
+
+    function setUp() {
+
+        // clearning the tz cache
+        TimezoneUtil::$map = null;
+
+    }
+
+    /**
+     * @dataProvider getMapping
+     */
+    function testCorrectTZ($timezoneName) {
+
+        $tz = new \DateTimeZone($timezoneName);
+        $this->assertInstanceOf('DateTimeZone', $tz);
+
+    }
+
+    function getMapping() {
+
+        TimeZoneUtil::loadTzMaps();
+
+        // PHPUNit requires an array of arrays
+        return array_map(
+            function($value) {
+                return array($value);
+            },
+            TimeZoneUtil::$map
+        );
+
+    }
+
+    function testExchangeMap() {
+
+        $vobj = <<<HI
+BEGIN:VCALENDAR
+METHOD:REQUEST
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:foo
+X-MICROSOFT-CDO-TZID:2
+BEGIN:STANDARD
+DTSTART:16010101T030000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:16010101T020000
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VEVENT
+DTSTAMP:20120416T092149Z
+DTSTART;TZID="foo":20120418T1
+ 00000
+SUMMARY:Begin Unterhaltsreinigung
+UID:040000008200E00074C5B7101A82E0080000000010DA091DC31BCD01000000000000000
+ 0100000008FECD2E607780649BE5A4C9EE6418CBC
+ 000
+END:VEVENT
+END:VCALENDAR
+HI;
+
+        $tz = TimeZoneUtil::getTimeZone('foo', Reader::read($vobj));
+        $ex = new \DateTimeZone('Europe/Lisbon');
+
+        $this->assertEquals($ex->getName(), $tz->getName());
+
+    }
+
+    function testWetherMicrosoftIsStillInsane() {
+
+        $vobj = <<<HI
+BEGIN:VCALENDAR
+METHOD:REQUEST
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:(GMT+01.00) Sarajevo/Warsaw/Zagreb
+X-MICROSOFT-CDO-TZID:2
+BEGIN:STANDARD
+DTSTART:16010101T030000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
+HI;
+
+        $tz = TimeZoneUtil::getTimeZone('(GMT+01.00) Sarajevo/Warsaw/Zagreb', Reader::read($vobj));
+        $ex = new \DateTimeZone('Europe/Sarajevo');
+
+        $this->assertEquals($ex->getName(), $tz->getName());
+
+    }
+
+    function testUnknownExchangeId() {
+
+        $vobj = <<<HI
+BEGIN:VCALENDAR
+METHOD:REQUEST
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:foo
+X-MICROSOFT-CDO-TZID:2000
+BEGIN:STANDARD
+DTSTART:16010101T030000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:16010101T020000
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VEVENT
+DTSTAMP:20120416T092149Z
+DTSTART;TZID="foo":20120418T1
+ 00000
+SUMMARY:Begin Unterhaltsreinigung
+UID:040000008200E00074C5B7101A82E0080000000010DA091DC31BCD01000000000000000
+ 0100000008FECD2E607780649BE5A4C9EE6418CBC
+DTEND;TZID="Sarajevo, Skopje, Sofija, Vilnius, Warsaw, Zagreb":20120418T103
+ 000
+END:VEVENT
+END:VCALENDAR
+HI;
+
+        $tz = TimeZoneUtil::getTimeZone('foo', Reader::read($vobj));
+        $ex = new \DateTimeZone(date_default_timezone_get());
+        $this->assertEquals($ex->getName(), $tz->getName());
+
+    }
+
+    function testWindowsTimeZone() {
+
+        $tz = TimeZoneUtil::getTimeZone('Eastern Standard Time');
+        $ex = new \DateTimeZone('America/New_York');
+        $this->assertEquals($ex->getName(), $tz->getName());
+
+    }
+
+    /**
+     * @dataProvider getPHPTimeZoneIdentifiers
+     */
+    function testTimeZoneIdentifiers($tzid) {
+
+        $tz = TimeZoneUtil::getTimeZone($tzid);
+        $ex = new \DateTimeZone($tzid);
+
+        $this->assertEquals($ex->getName(), $tz->getName());
+
+    }
+
+    /**
+     * @dataProvider getPHPTimeZoneBCIdentifiers
+     */
+    function testTimeZoneBCIdentifiers($tzid) {
+
+        $tz = TimeZoneUtil::getTimeZone($tzid);
+        $ex = new \DateTimeZone($tzid);
+
+        $this->assertEquals($ex->getName(), $tz->getName());
+
+    }
+
+    function getPHPTimeZoneIdentifiers() {
+
+        // PHPUNit requires an array of arrays
+        return array_map(
+            function($value) {
+                return array($value);
+            },
+            \DateTimeZone::listIdentifiers()
+        );
+
+    }
+
+    function getPHPTimeZoneBCIdentifiers() {
+
+        // PHPUNit requires an array of arrays
+        return array_map(
+            function($value) {
+                return array($value);
+            },
+            TimeZoneUtil::getIdentifiersBC()
+        );
+
+    }
+
+    function testTimezoneOffset() {
+
+        $tz = TimeZoneUtil::getTimeZone('GMT-0400', null, true);
+
+        if (version_compare(PHP_VERSION, '5.5.10', '>=') && !defined('HHVM_VERSION')) {
+            $ex = new \DateTimeZone('-04:00');
+        } else {
+            $ex = new \DateTimeZone('Etc/GMT-4');
+        }
+        $this->assertEquals($ex->getName(), $tz->getName());
+
+    }
+
+    /**
+     * @expectedException InvalidArgumentException
+     */
+    function testTimezoneFail() {
+
+        $tz = TimeZoneUtil::getTimeZone('FooBar', null, true);
+
+    }
+
+    function testFallBack() {
+
+        $vobj = <<<HI
+BEGIN:VCALENDAR
+METHOD:REQUEST
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:foo
+BEGIN:STANDARD
+DTSTART:16010101T030000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:16010101T020000
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VEVENT
+DTSTAMP:20120416T092149Z
+DTSTART;TZID="foo":20120418T1
+ 00000
+SUMMARY:Begin Unterhaltsreinigung
+UID:040000008200E00074C5B7101A82E0080000000010DA091DC31BCD01000000000000000
+ 0100000008FECD2E607780649BE5A4C9EE6418CBC
+ 000
+END:VEVENT
+END:VCALENDAR
+HI;
+
+        $tz = TimeZoneUtil::getTimeZone('foo', Reader::read($vobj));
+        $ex = new \DateTimeZone(date_default_timezone_get());
+        $this->assertEquals($ex->getName(), $tz->getName());
+
+    }
+
+    function testLjubljanaBug() {
+
+        $vobj = <<<HI
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//Ximian//NONSGML Evolution Calendar//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:/freeassociation.sourceforge.net/Tzfile/Europe/Ljubljana
+X-LIC-LOCATION:Europe/Ljubljana
+BEGIN:STANDARD
+TZNAME:CET
+DTSTART:19701028T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+TZNAME:CEST
+DTSTART:19700325T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:foo
+DTSTART;TZID=/freeassociation.sourceforge.net/Tzfile/Europe/Ljubljana:
+ 20121003T080000
+DTEND;TZID=/freeassociation.sourceforge.net/Tzfile/Europe/Ljubljana:
+ 20121003T083000
+TRANSP:OPAQUE
+SEQUENCE:2
+SUMMARY:testing
+CREATED:20121002T172613Z
+LAST-MODIFIED:20121002T172613Z
+END:VEVENT
+END:VCALENDAR
+
+HI;
+
+
+        $tz = TimeZoneUtil::getTimeZone('/freeassociation.sourceforge.net/Tzfile/Europe/Ljubljana', Reader::read($vobj));
+        $ex = new \DateTimeZone('Europe/Ljubljana');
+        $this->assertEquals($ex->getName(), $tz->getName());
+
+    }
+
+    function testWeirdSystemVLICs() {
+
+$vobj = <<<HI
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+PRODID:-//Ximian//NONSGML Evolution Calendar//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:/freeassociation.sourceforge.net/Tzfile/SystemV/EST5EDT
+X-LIC-LOCATION:SystemV/EST5EDT
+BEGIN:STANDARD
+TZNAME:EST
+DTSTART:19701104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+TZNAME:EDT
+DTSTART:19700311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VEVENT
+UID:20121026T021107Z-6301-1000-1-0@chAir
+DTSTAMP:20120905T172126Z
+DTSTART;TZID=/freeassociation.sourceforge.net/Tzfile/SystemV/EST5EDT:
+ 20121026T153000
+DTEND;TZID=/freeassociation.sourceforge.net/Tzfile/SystemV/EST5EDT:
+ 20121026T160000
+TRANSP:OPAQUE
+SEQUENCE:5
+SUMMARY:pick up Ibby
+CLASS:PUBLIC
+CREATED:20121026T021108Z
+LAST-MODIFIED:20121026T021118Z
+X-EVOLUTION-MOVE-CALENDAR:1
+END:VEVENT
+END:VCALENDAR
+HI;
+
+        $tz = TimeZoneUtil::getTimeZone('/freeassociation.sourceforge.net/Tzfile/SystemV/EST5EDT', Reader::read($vobj), true);
+        $ex = new \DateTimeZone('America/New_York');
+        $this->assertEquals($ex->getName(), $tz->getName());
+
+    }
+
+}