mirror of
https://codeberg.org/streams/streams.git
synced 2024-09-26 21:32:44 +00:00
306 lines
6.9 KiB
PHP
306 lines
6.9 KiB
PHP
<?php
|
|
|
|
namespace Sabre\VObject;
|
|
|
|
class TimezoneUtilTest extends \PHPUnit_Framework_TestCase {
|
|
|
|
/**
|
|
* @dataProvider getMapping
|
|
*/
|
|
function testCorrectTZ($timezoneName) {
|
|
|
|
$tz = new \DateTimeZone($timezoneName);
|
|
|
|
}
|
|
|
|
function getMapping() {
|
|
|
|
// 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());
|
|
|
|
}
|
|
|
|
function testTimezoneOffset() {
|
|
|
|
$tz = TimeZoneUtil::getTimeZone('GMT-0400', null, true);
|
|
|
|
if (version_compare(PHP_VERSION, '5.5.10', '>=')) {
|
|
$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);
|
|
if (version_compare(PHP_VERSION, '5.5.10', '>=')) {
|
|
$ex = new \DateTimeZone('America/New_York');
|
|
} else {
|
|
$ex = new \DateTimeZone('EST5EDT');
|
|
}
|
|
$this->assertEquals($ex->getName(), $tz->getName());
|
|
|
|
}
|
|
|
|
}
|