Mercurial > hg > rc1
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 } |
