Mercurial > hg > rc1
view vendor/sabre/vobject/tests/VObject/TimeZoneUtilTest.php @ 41:d2414df68d78
Updated by Alex S Grebenschikov (www.poralix.com)
to make it compatible with RoundCube 1.3.0
author | Charlie Root |
---|---|
date | Fri, 24 Jan 2025 14:20:15 -0500 |
parents | 430dbd5346f7 |
children |
line wrap: on
line source
<?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()); } }