[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 <?php 2 // This file is part of Moodle - http://moodle.org/ 3 // 4 // Moodle is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // Moodle is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 16 17 /** 18 * Tests core_date class. 19 * 20 * @package core 21 * @copyright 2015 Totara Learning Solutions Ltd {@link http://www.totaralms.com/} 22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 * @author Petr Skoda <petr.skoda@totaralms.com> 24 */ 25 26 defined('MOODLE_INTERNAL') || die(); 27 28 /** 29 * Tests core_date class. 30 * 31 * @package core 32 * @copyright 2015 Totara Learning Solutions Ltd {@link http://www.totaralms.com/} 33 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 34 * @author Petr Skoda <petr.skoda@totaralms.com> 35 */ 36 class core_date_testcase extends advanced_testcase { 37 public function test_get_default_php_timezone() { 38 $this->resetAfterTest(); 39 40 $origtz = core_date::get_default_php_timezone(); 41 $this->assertNotEmpty($origtz); 42 43 $this->setTimezone('Pacific/Auckland', 'Europe/Prague'); 44 $this->assertSame('Europe/Prague', core_date::get_default_php_timezone()); 45 46 $this->setTimezone('Pacific/Auckland', 'UTC'); 47 $this->assertSame('UTC', core_date::get_default_php_timezone()); 48 49 $this->setTimezone('Pacific/Auckland', 'GMT'); 50 $this->assertSame('GMT', core_date::get_default_php_timezone()); 51 } 52 53 public function test_normalise_timezone() { 54 $this->resetAfterTest(); 55 56 $this->setTimezone('Pacific/Auckland'); 57 $this->assertSame('Pacific/Auckland', core_date::normalise_timezone('Pacific/Auckland')); 58 $this->assertSame('Pacific/Auckland', core_date::normalise_timezone('99')); 59 $this->assertSame('Pacific/Auckland', core_date::normalise_timezone(99)); 60 $this->assertSame('GMT', core_date::normalise_timezone('GMT')); 61 $this->assertSame('UTC', core_date::normalise_timezone('UTC')); 62 $this->assertSame('Pacific/Auckland', core_date::normalise_timezone('xxxxxxxx')); 63 $this->assertSame('Europe/Berlin', core_date::normalise_timezone('Central European Time')); 64 $this->assertSame('Etc/GMT', core_date::normalise_timezone('0')); 65 $this->assertSame('Etc/GMT', core_date::normalise_timezone('0.0')); 66 $this->assertSame('Etc/GMT-2', core_date::normalise_timezone(2)); 67 $this->assertSame('Etc/GMT-2', core_date::normalise_timezone('2.0')); 68 $this->assertSame('Etc/GMT+2', core_date::normalise_timezone(-2)); 69 $this->assertSame('Etc/GMT+2', core_date::normalise_timezone('-2.0')); 70 $this->assertSame('Etc/GMT+4', core_date::normalise_timezone(-4)); 71 $this->assertSame('Etc/GMT-2', core_date::normalise_timezone('UTC+2')); 72 $this->assertSame('Etc/GMT+2', core_date::normalise_timezone('UTC-2')); 73 $this->assertSame('Etc/GMT-2', core_date::normalise_timezone('GMT+2')); 74 $this->assertSame('Etc/GMT+2', core_date::normalise_timezone('GMT-2')); 75 $this->assertSame('Etc/GMT+12', core_date::normalise_timezone(-12)); 76 $this->assertSame('Pacific/Auckland', core_date::normalise_timezone(-13)); 77 $this->assertSame('Pacific/Auckland', core_date::normalise_timezone(-14)); 78 $this->assertSame('Etc/GMT-12', core_date::normalise_timezone(12)); 79 $this->assertSame('Etc/GMT-13', core_date::normalise_timezone(13)); 80 $this->assertSame('Etc/GMT-14', core_date::normalise_timezone(14)); 81 82 $this->assertSame('Asia/Kabul', core_date::normalise_timezone(4.5)); 83 $this->assertSame('Asia/Kolkata', core_date::normalise_timezone(5.5)); 84 $this->assertSame('Asia/Rangoon', core_date::normalise_timezone(6.5)); 85 $this->assertSame('Australia/Darwin', core_date::normalise_timezone('9.5')); 86 87 $this->setTimezone('99', 'Pacific/Auckland'); 88 $this->assertSame('Pacific/Auckland', core_date::normalise_timezone('Pacific/Auckland')); 89 $this->assertSame('Pacific/Auckland', core_date::normalise_timezone('99')); 90 $this->assertSame('Pacific/Auckland', core_date::normalise_timezone(99)); 91 $this->assertSame('GMT', core_date::normalise_timezone('GMT')); 92 $this->assertSame('UTC', core_date::normalise_timezone('UTC')); 93 $this->assertSame('Pacific/Auckland', core_date::normalise_timezone('xxxxxxxx')); 94 $this->assertSame('Europe/Berlin', core_date::normalise_timezone('Central European Time')); 95 $this->assertSame('Etc/GMT', core_date::normalise_timezone('0')); 96 $this->assertSame('Etc/GMT', core_date::normalise_timezone('0.0')); 97 $this->assertSame('Etc/GMT-2', core_date::normalise_timezone(2)); 98 $this->assertSame('Etc/GMT-2', core_date::normalise_timezone('2.0')); 99 $this->assertSame('Etc/GMT+2', core_date::normalise_timezone(-2)); 100 $this->assertSame('Etc/GMT+2', core_date::normalise_timezone('-2.0')); 101 $this->assertSame('Etc/GMT-2', core_date::normalise_timezone('UTC+2')); 102 $this->assertSame('Etc/GMT+2', core_date::normalise_timezone('UTC-2')); 103 $this->assertSame('Etc/GMT-2', core_date::normalise_timezone('GMT+2')); 104 $this->assertSame('Etc/GMT+2', core_date::normalise_timezone('GMT-2')); 105 $this->assertSame('Etc/GMT+12', core_date::normalise_timezone(-12)); 106 $this->assertSame('Pacific/Auckland', core_date::normalise_timezone(-13)); 107 $this->assertSame('Pacific/Auckland', core_date::normalise_timezone(-14)); 108 $this->assertSame('Etc/GMT-12', core_date::normalise_timezone(12)); 109 $this->assertSame('Etc/GMT-13', core_date::normalise_timezone(13)); 110 $this->assertSame('Etc/GMT-14', core_date::normalise_timezone(14)); 111 112 $this->setTimezone('Pacific/Auckland', 'Pacific/Auckland'); 113 $tz = new DateTimeZone('Pacific/Auckland'); 114 $this->assertSame('Pacific/Auckland', core_date::normalise_timezone($tz)); 115 } 116 117 public function test_windows_conversion() { 118 $file = __DIR__ . '/fixtures/timezonewindows.xml'; 119 120 $contents = file_get_contents($file); 121 preg_match_all('/<mapZone other="([^"]+)" territory="001" type="([^"]+)"\/>/', $contents, $matches, PREG_SET_ORDER); 122 123 $this->assertCount(104, $matches); // NOTE: If the file contents change edit the core_date class and update this. 124 125 foreach ($matches as $match) { 126 $result = core_date::normalise_timezone($match[1]); 127 if ($result == $match[2]) { 128 $this->assertSame($match[2], $result); 129 } else { 130 $data = new DateTime('now', new DateTimeZone($match[2])); 131 $expectedoffset = $data->getOffset(); 132 $data = new DateTime('now', new DateTimeZone($result)); 133 $resultoffset = $data->getOffset(); 134 $this->assertSame($expectedoffset, $resultoffset, "$match[1] is expected to be converted to $match[2] not $result"); 135 } 136 } 137 } 138 139 /** 140 * Sanity test for PHP stuff. 141 */ 142 public function test_php_gmt_offsets() { 143 $this->resetAfterTest(); 144 145 $this->setTimezone('Pacific/Auckland', 'Pacific/Auckland'); 146 147 for ($i = -12; $i < 0; $i++) { 148 $date = new DateTime('now', new DateTimeZone("Etc/GMT{$i}")); 149 $this->assertSame(- $i * 60 * 60, $date->getOffset()); 150 $date = new DateTime('now', new DateTimeZone(core_date::normalise_timezone("GMT{$i}"))); 151 $this->assertSame($i * 60 * 60, $date->getOffset()); 152 $date = new DateTime('now', new DateTimeZone(core_date::normalise_timezone("UTC{$i}"))); 153 $this->assertSame($i * 60 * 60, $date->getOffset()); 154 } 155 156 $date = new DateTime('now', new DateTimeZone('Etc/GMT')); 157 $this->assertSame(0, $date->getOffset()); 158 159 for ($i = 1; $i <= 12; $i++) { 160 $date = new DateTime('now', new DateTimeZone("Etc/GMT+{$i}")); 161 $this->assertSame(- $i * 60 * 60, $date->getOffset()); 162 $date = new DateTime('now', new DateTimeZone(core_date::normalise_timezone("GMT+{$i}"))); 163 $this->assertSame($i * 60 * 60, $date->getOffset()); 164 $date = new DateTime('now', new DateTimeZone(core_date::normalise_timezone("UTC+{$i}"))); 165 $this->assertSame($i * 60 * 60, $date->getOffset()); 166 } 167 } 168 169 public function test_get_localised_timezone() { 170 $this->resetAfterTest(); 171 172 $this->setTimezone('Pacific/Auckland', 'Pacific/Auckland'); 173 174 $result = core_date::get_localised_timezone('Pacific/Auckland'); 175 $this->assertSame('Pacific/Auckland', $result); 176 177 $result = core_date::get_localised_timezone('99'); 178 $this->assertSame('Server timezone (Pacific/Auckland)', $result); 179 180 $result = core_date::get_localised_timezone(99); 181 $this->assertSame('Server timezone (Pacific/Auckland)', $result); 182 183 $result = core_date::get_localised_timezone('Etc/GMT-1'); 184 $this->assertSame('UTC+1', $result); 185 186 $result = core_date::get_localised_timezone('Etc/GMT+2'); 187 $this->assertSame('UTC-2', $result); 188 189 $result = core_date::get_localised_timezone('GMT'); 190 $this->assertSame('UTC', $result); 191 192 $result = core_date::get_localised_timezone('Etc/GMT'); 193 $this->assertSame('UTC', $result); 194 } 195 196 public function test_get_list_of_timezones() { 197 $this->resetAfterTest(); 198 199 $this->setTimezone('Pacific/Auckland', 'Pacific/Auckland'); 200 201 $phpzones = DateTimeZone::listIdentifiers(); 202 203 $zones = core_date::get_list_of_timezones(); 204 $this->assertSame(count($phpzones), count($zones)); 205 foreach ($zones as $zone => $zonename) { 206 $this->assertSame($zone, $zonename); // The same in English! 207 $this->assertContains($zone, $phpzones); // No extras expected. 208 } 209 210 $this->assertSame($zones, core_date::get_list_of_timezones(null, false)); 211 212 $nnzones = core_date::get_list_of_timezones(null, true); 213 $last = $nnzones['99']; 214 $this->assertSame('Server timezone (Pacific/Auckland)', $last); 215 unset($nnzones['99']); 216 $this->assertSame($zones, $nnzones); 217 218 $nnzones = core_date::get_list_of_timezones('99', false); 219 $last = $nnzones['99']; 220 $this->assertSame('Server timezone (Pacific/Auckland)', $last); 221 unset($nnzones['99']); 222 $this->assertSame($zones, $nnzones); 223 224 $xxzones = core_date::get_list_of_timezones('xx', false); 225 $xx = $xxzones['xx']; 226 $this->assertSame('Invalid timezone "xx"', $xx); 227 unset($xxzones['xx']); 228 $this->assertSame($zones, $xxzones); 229 230 $xxzones = core_date::get_list_of_timezones('1', false); 231 $xx = $xxzones['1']; 232 $this->assertSame('Invalid timezone "UTC+1.0"', $xx); 233 unset($xxzones['1']); 234 $this->assertSame($zones, $xxzones); 235 236 $xxzones = core_date::get_list_of_timezones('-1.5', false); 237 $xx = $xxzones['-1.5']; 238 $this->assertSame('Invalid timezone "UTC-1.5"', $xx); 239 unset($xxzones['-1.5']); 240 $this->assertSame($zones, $xxzones); 241 242 } 243 244 public function test_get_server_timezone() { 245 global $CFG; 246 $this->resetAfterTest(); 247 248 $this->setTimezone('Pacific/Auckland', 'Pacific/Auckland'); 249 $this->assertSame('Pacific/Auckland', core_date::get_server_timezone()); 250 251 $this->setTimezone('Pacific/Auckland', 'Europe/Prague'); 252 $this->assertSame('Pacific/Auckland', core_date::get_server_timezone()); 253 254 $this->setTimezone('99', 'Pacific/Auckland'); 255 $this->assertSame('Pacific/Auckland', core_date::get_server_timezone()); 256 257 $this->setTimezone(99, 'Pacific/Auckland'); 258 $this->assertSame('Pacific/Auckland', core_date::get_server_timezone()); 259 260 $this->setTimezone('Pacific/Auckland', 'Pacific/Auckland'); 261 unset($CFG->timezone); 262 $this->assertSame('Pacific/Auckland', core_date::get_server_timezone()); 263 264 // Admin should fix the settings. 265 $this->setTimezone('xxx/zzzz', 'Europe/Prague'); 266 $this->assertSame('Europe/Prague', core_date::get_server_timezone()); 267 } 268 269 public function test_get_server_timezone_object() { 270 $this->resetAfterTest(); 271 272 $zones = core_date::get_list_of_timezones(); 273 foreach ($zones as $zone) { 274 $this->setTimezone($zone, 'Pacific/Auckland'); 275 $tz = core_date::get_server_timezone_object(); 276 $this->assertInstanceOf('DateTimeZone', $tz); 277 $this->assertSame($zone, $tz->getName()); 278 } 279 } 280 281 public function test_set_default_server_timezone() { 282 global $CFG; 283 $this->resetAfterTest(); 284 285 $this->setTimezone('Europe/Prague', 'Pacific/Auckland'); 286 unset($CFG->timezone); 287 date_default_timezone_set('UTC'); 288 core_date::set_default_server_timezone(); 289 $this->assertSame('Pacific/Auckland', date_default_timezone_get()); 290 291 $this->setTimezone('', 'Pacific/Auckland'); 292 date_default_timezone_set('UTC'); 293 core_date::set_default_server_timezone(); 294 $this->assertSame('Pacific/Auckland', date_default_timezone_get()); 295 296 $this->setTimezone('99', 'Pacific/Auckland'); 297 date_default_timezone_set('UTC'); 298 core_date::set_default_server_timezone(); 299 $this->assertSame('Pacific/Auckland', date_default_timezone_get()); 300 301 $this->setTimezone(99, 'Pacific/Auckland'); 302 date_default_timezone_set('UTC'); 303 core_date::set_default_server_timezone(); 304 $this->assertSame('Pacific/Auckland', date_default_timezone_get()); 305 306 $this->setTimezone('Europe/Prague', 'Pacific/Auckland'); 307 $CFG->timezone = 'UTC'; 308 core_date::set_default_server_timezone(); 309 $this->assertSame('UTC', date_default_timezone_get()); 310 311 $this->setTimezone('Europe/Prague', 'Pacific/Auckland'); 312 $CFG->timezone = 'Australia/Perth'; 313 core_date::set_default_server_timezone(); 314 $this->assertSame('Australia/Perth', date_default_timezone_get()); 315 316 $this->setTimezone('0', 'Pacific/Auckland'); 317 date_default_timezone_set('UTC'); 318 core_date::set_default_server_timezone(); 319 $this->assertSame('Etc/GMT', date_default_timezone_get()); 320 321 $this->setTimezone('1', 'Pacific/Auckland'); 322 date_default_timezone_set('UTC'); 323 core_date::set_default_server_timezone(); 324 $this->assertSame('Etc/GMT-1', date_default_timezone_get()); 325 326 $this->setTimezone(1, 'Pacific/Auckland'); 327 date_default_timezone_set('UTC'); 328 core_date::set_default_server_timezone(); 329 $this->assertSame('Etc/GMT-1', date_default_timezone_get()); 330 331 $this->setTimezone('1.0', 'Pacific/Auckland'); 332 date_default_timezone_set('UTC'); 333 core_date::set_default_server_timezone(); 334 $this->assertSame('Etc/GMT-1', date_default_timezone_get()); 335 } 336 337 public function legacyUserTimezoneProvider() { 338 return [ 339 ['', 'Australia/Perth'], // Fallback on default timezone. 340 ['-13.0', 'Australia/Perth'], // Fallback on default timezone. 341 ['-12.5', 'Etc/GMT+12'], 342 ['-12.0', 'Etc/GMT+12'], 343 ['-11.5', 'Etc/GMT+11'], 344 ['-11.0', 'Etc/GMT+11'], 345 ['-10.5', 'Etc/GMT+10'], 346 ['-10.0', 'Etc/GMT+10'], 347 ['-9.5', 'Etc/GMT+9'], 348 ['-9.0', 'Etc/GMT+9'], 349 ['-8.5', 'Etc/GMT+8'], 350 ['-8.0', 'Etc/GMT+8'], 351 ['-7.5', 'Etc/GMT+7'], 352 ['-7.0', 'Etc/GMT+7'], 353 ['-6.5', 'Etc/GMT+6'], 354 ['-6.0', 'Etc/GMT+6'], 355 ['-5.5', 'Etc/GMT+5'], 356 ['-5.0', 'Etc/GMT+5'], 357 ['-4.5', 'Etc/GMT+4'], 358 ['-4.0', 'Etc/GMT+4'], 359 ['-3.5', 'Etc/GMT+3'], 360 ['-3.0', 'Etc/GMT+3'], 361 ['-2.5', 'Etc/GMT+2'], 362 ['-2.0', 'Etc/GMT+2'], 363 ['-1.5', 'Etc/GMT+1'], 364 ['-1.0', 'Etc/GMT+1'], 365 ['-0.5', 'Etc/GMT'], 366 ['0', 'Etc/GMT'], 367 ['0.0', 'Etc/GMT'], 368 ['0.5', 'Etc/GMT'], 369 ['1.0', 'Etc/GMT-1'], 370 ['1.5', 'Etc/GMT-1'], 371 ['2.0', 'Etc/GMT-2'], 372 ['2.5', 'Etc/GMT-2'], 373 ['3.0', 'Etc/GMT-3'], 374 ['3.5', 'Etc/GMT-3'], 375 ['4.0', 'Etc/GMT-4'], 376 ['4.5', 'Asia/Kabul'], 377 ['5.0', 'Etc/GMT-5'], 378 ['5.5', 'Asia/Kolkata'], 379 ['6.0', 'Etc/GMT-6'], 380 ['6.5', 'Asia/Rangoon'], 381 ['7.0', 'Etc/GMT-7'], 382 ['7.5', 'Etc/GMT-7'], 383 ['8.0', 'Etc/GMT-8'], 384 ['8.5', 'Etc/GMT-8'], 385 ['9.0', 'Etc/GMT-9'], 386 ['9.5', 'Australia/Darwin'], 387 ['10.0', 'Etc/GMT-10'], 388 ['10.5', 'Etc/GMT-10'], 389 ['11.0', 'Etc/GMT-11'], 390 ['11.5', 'Etc/GMT-11'], 391 ['12.0', 'Etc/GMT-12'], 392 ['12.5', 'Etc/GMT-12'], 393 ['13.0', 'Etc/GMT-13'], 394 ]; 395 } 396 397 /** 398 * @dataProvider legacyUserTimezoneProvider 399 * @param string $tz The legacy timezone. 400 * @param string $expected The expected converted timezone. 401 */ 402 public function test_get_legacy_user_timezone($tz, $expected) { 403 $this->setTimezone('Australia/Perth', 'Australia/Perth'); 404 $this->assertEquals($expected, core_date::get_user_timezone($tz)); 405 } 406 407 public function test_get_user_timezone() { 408 global $CFG, $USER; 409 $this->resetAfterTest(); 410 411 // Null parameter. 412 413 $this->setTimezone('Europe/Prague', 'Pacific/Auckland'); 414 $USER->timezone = 'Pacific/Auckland'; 415 $CFG->forcetimezone = '99'; 416 $this->assertSame('Pacific/Auckland', core_date::get_user_timezone(null)); 417 $this->assertSame('Pacific/Auckland', core_date::get_user_timezone()); 418 419 $this->setTimezone('Europe/Prague', 'Pacific/Auckland'); 420 $USER->timezone = 'Pacific/Auckland'; 421 $CFG->forcetimezone = 'Europe/Berlin'; 422 $this->assertSame('Europe/Berlin', core_date::get_user_timezone(null)); 423 $this->assertSame('Europe/Berlin', core_date::get_user_timezone()); 424 425 $this->setTimezone('Europe/Prague', 'Pacific/Auckland'); 426 $USER->timezone = 'Pacific/Auckland'; 427 $CFG->forcetimezone = 'xxx/yyy'; 428 $this->assertSame('Europe/Prague', core_date::get_user_timezone(null)); 429 $this->assertSame('Europe/Prague', core_date::get_user_timezone()); 430 431 $this->setTimezone('Europe/Prague', 'Pacific/Auckland'); 432 $USER->timezone = 'abc/def'; 433 $CFG->forcetimezone = '99'; 434 $this->assertSame('Europe/Prague', core_date::get_user_timezone(null)); 435 $this->assertSame('Europe/Prague', core_date::get_user_timezone()); 436 437 $this->setTimezone('xxx/yyy', 'Europe/London'); 438 $USER->timezone = 'abc/def'; 439 $CFG->forcetimezone = 'Europe/Berlin'; 440 $this->assertSame('Europe/Berlin', core_date::get_user_timezone(null)); 441 $this->assertSame('Europe/Berlin', core_date::get_user_timezone()); 442 443 $this->setTimezone('xxx/yyy', 'Europe/London'); 444 $USER->timezone = 'abc/def'; 445 $CFG->forcetimezone = 99; 446 $this->assertSame('Europe/London', core_date::get_user_timezone(null)); 447 $this->assertSame('Europe/London', core_date::get_user_timezone()); 448 449 // User object parameter. 450 $admin = get_admin(); 451 452 $this->setTimezone('Europe/London'); 453 $USER->timezone = 'Pacific/Auckland'; 454 $CFG->forcetimezone = '99'; 455 $admin->timezone = 'Australia/Perth'; 456 $this->assertSame('Australia/Perth', core_date::get_user_timezone($admin)); 457 458 $this->setTimezone('Europe/Prague'); 459 $USER->timezone = 'Pacific/Auckland'; 460 $CFG->forcetimezone = '99'; 461 $admin->timezone = '99'; 462 $this->assertSame('Europe/Prague', core_date::get_user_timezone($admin)); 463 464 $this->setTimezone('99', 'Europe/London'); 465 $USER->timezone = 'Pacific/Auckland'; 466 $CFG->forcetimezone = '99'; 467 $admin->timezone = '99'; 468 $this->assertSame('Europe/London', core_date::get_user_timezone($admin)); 469 470 $this->setTimezone('Europe/Prague'); 471 $USER->timezone = 'Pacific/Auckland'; 472 $CFG->forcetimezone = '99'; 473 $admin->timezone = 'xx/zz'; 474 $this->assertSame('Europe/Prague', core_date::get_user_timezone($admin)); 475 476 $this->setTimezone('Europe/Prague'); 477 $USER->timezone = 'Pacific/Auckland'; 478 $CFG->forcetimezone = '99'; 479 unset($admin->timezone); 480 $this->assertSame('Europe/Prague', core_date::get_user_timezone($admin)); 481 482 $this->setTimezone('Europe/Prague'); 483 $USER->timezone = 'Pacific/Auckland'; 484 $CFG->forcetimezone = 'Europe/Berlin'; 485 $admin->timezone = 'Australia/Perth'; 486 $this->assertSame('Europe/Berlin', core_date::get_user_timezone($admin)); 487 488 // Other scalar parameter. 489 490 $this->setTimezone('Europe/Prague'); 491 $CFG->forcetimezone = '99'; 492 493 $USER->timezone = 'Pacific/Auckland'; 494 $this->assertSame('Pacific/Auckland', core_date::get_user_timezone('99')); 495 $this->assertSame('Etc/GMT-1', core_date::get_user_timezone('1')); 496 $this->assertSame('Etc/GMT+1', core_date::get_user_timezone(-1)); 497 $this->assertSame('Europe/London', core_date::get_user_timezone('Europe/London')); 498 $USER->timezone = '99'; 499 $this->assertSame('Europe/Prague', core_date::get_user_timezone('99')); 500 $this->assertSame('Europe/London', core_date::get_user_timezone('Europe/London')); 501 $this->assertSame('Europe/Prague', core_date::get_user_timezone('xxx/zzz')); 502 $USER->timezone = 'xxz/zzz'; 503 $this->assertSame('Europe/Prague', core_date::get_user_timezone('99')); 504 505 $this->setTimezone('99', 'Europe/Prague'); 506 $CFG->forcetimezone = '99'; 507 508 $USER->timezone = 'Pacific/Auckland'; 509 $this->assertSame('Pacific/Auckland', core_date::get_user_timezone('99')); 510 $this->assertSame('Europe/London', core_date::get_user_timezone('Europe/London')); 511 $USER->timezone = '99'; 512 $this->assertSame('Europe/Prague', core_date::get_user_timezone('99')); 513 $this->assertSame('Europe/London', core_date::get_user_timezone('Europe/London')); 514 $this->assertSame('Europe/Prague', core_date::get_user_timezone('xxx/zzz')); 515 $USER->timezone = 99; 516 $this->assertSame('Europe/London', core_date::get_user_timezone('Europe/London')); 517 $this->assertSame('Europe/Prague', core_date::get_user_timezone('xxx/zzz')); 518 $USER->timezone = 'xxz/zzz'; 519 $this->assertSame('Europe/Prague', core_date::get_user_timezone('99')); 520 521 $this->setTimezone('xxx', 'Europe/Prague'); 522 $CFG->forcetimezone = '99'; 523 $USER->timezone = 'xxx'; 524 $this->assertSame('Europe/Prague', core_date::get_user_timezone('99')); 525 $this->assertSame('Europe/Prague', core_date::get_user_timezone(99)); 526 $this->assertSame('Etc/GMT-1', core_date::get_user_timezone(1)); 527 528 $this->setTimezone('Europe/Prague'); 529 $CFG->forcetimezone = 'Pacific/Auckland'; 530 $USER->timezone = 'Europe/London'; 531 $this->assertSame('Pacific/Auckland', core_date::get_user_timezone(99)); 532 $this->assertSame('Europe/Berlin', core_date::get_user_timezone('Europe/Berlin')); 533 534 // TZ object param. 535 536 $this->setTimezone('UTC'); 537 $USER->timezone = 'Europe/London'; 538 $CFG->forcetimezone = 99; 539 $tz = new DateTimeZone('Pacific/Auckland'); 540 $this->assertSame('Pacific/Auckland', core_date::get_user_timezone($tz)); 541 } 542 543 public function test_get_user_timezone_object() { 544 global $CFG, $USER; 545 $this->resetAfterTest(); 546 547 $this->setTimezone('Pacific/Auckland'); 548 $CFG->forcetimezone = '99'; 549 550 $zones = core_date::get_list_of_timezones(); 551 foreach ($zones as $zone) { 552 $USER->timezone = $zone; 553 $tz = core_date::get_user_timezone_object(); 554 $this->assertInstanceOf('DateTimeZone', $tz); 555 $this->assertSame($zone, $tz->getName()); 556 } 557 } 558 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Thu Aug 11 10:00:09 2016 | Cross-referenced by PHPXref 0.7.1 |