[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/lib/tests/ -> date_test.php (source)

   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  }


Generated: Thu Aug 11 10:00:09 2016 Cross-referenced by PHPXref 0.7.1