aboutsummaryrefslogtreecommitdiff
path: root/contexts/data/lib/closure-library/closure/goog/locale/timezonedetection_test.html
blob: c68af291fa7c6c78b5cb207cf719de23d0939656 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<!DOCTYPE html>
<html>
<!--
Copyright 2008 The Closure Library Authors. All Rights Reserved.

Use of this source code is governed by the Apache License, Version 2.0.
See the COPYING file for details.
-->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>Closure Unit Tests - goog.locale.timeZoneDetection</title>
  <script src='../base.js'>
  </script>
  <script>
  goog.require('goog.locale.TimeZoneFingerprint');
  goog.require('goog.locale.timeZoneDetection');
  goog.require('goog.testing.jsunit');
  </script>
</head>
<body>
<script>

  /**
   * Mock date class with simplified properties of Date class for testing.
   * @constructor
   */
  function MockDate() {
    /**
     * Time zone offset. For time zones with daylight saving, the different
     * offsets are represented as array of offsets.
     * @type {Array.<number>}
     * @private
     */
    this.timezoneOffset_ = [];
    /**
     * Counter storing the index of next offset value to be returned from the
     * array of offset values. 
     * @type {number}
     * @private
     */
    this.offsetArrayCounter_ = 0;
  }

  /**
   * Does nothing because setting the time to calculate offset is not needed
   * in the mock class.
   * @param {number} ms Ignored.
   */
  MockDate.prototype.setTime = function(ms) {
    // Do nothing.
  };

  /**
   * Sets the time zone offset.
   * @param {Array.<number>} offset Time zone offset.
   */
  MockDate.prototype.setTimezoneOffset = function(offset) {
    this.timezoneOffset_ = offset;
  };

  /**
   * Returns consecutive offsets from array of time zone offsets on each call.
   * @return {number} Time zone offset.
   */
  MockDate.prototype.getTimezoneOffset = function() {
    return this.timezoneOffset_.length > 1 ?
        this.timezoneOffset_[this.offsetArrayCounter_++] :
        this.timezoneOffset_[0];
  };

  function testGetFingerprint() {
    var mockDate = new MockDate();
    mockDate.setTimezoneOffset([-480]);
    var fingerprint = goog.locale.timeZoneDetection.getFingerprint(mockDate);
    assertEquals(32, fingerprint);

    mockDate = new MockDate();
    mockDate.setTimezoneOffset(
        [480, 420, 420, 480, 480, 420, 420, 420, 420, 420, 420, 420, 420]);
    fingerprint = goog.locale.timeZoneDetection.getFingerprint(mockDate);
    assertEquals(1294772902, fingerprint);
  }

  function testDetectTimeZone() {
    var mockDate = new MockDate();
    mockDate.setTimezoneOffset([-480]);
    var timeZoneId =
        goog.locale.timeZoneDetection.detectTimeZone(undefined, mockDate);
    assertEquals('Asia/Hong_Kong', timeZoneId);

    mockDate = new MockDate();
    mockDate.setTimezoneOffset(
        [480, 420, 420, 480, 480, 420, 420, 420, 420, 420, 420, 420, 420]);
    timeZoneId = goog.locale.timeZoneDetection.detectTimeZone('US', mockDate);
    assertEquals('America/Los_Angeles', timeZoneId);

    mockDate = new MockDate();
    mockDate.setTimezoneOffset(
        [480, 420, 420, 480, 480, 420, 420, 420, 420, 420, 420, 420, 420]);
    timeZoneId = goog.locale.timeZoneDetection.detectTimeZone('CA', mockDate);
    assertEquals('America/Dawson', timeZoneId);
  }

  function testGetTimeZoneList() {
    var mockDate = new MockDate();
    mockDate.setTimezoneOffset(
        [480, 420, 420, 480, 480, 420, 420, 420, 420, 420, 420, 420, 420]);
    var timeZoneList =
         goog.locale.timeZoneDetection.getTimeZoneList(undefined, mockDate);
    assertEquals('America/Los_Angeles', timeZoneList[0]);
    assertEquals('America/Whitehorse', timeZoneList[4]);
    assertEquals(5, timeZoneList.length);

    mockDate = new MockDate();
    mockDate.setTimezoneOffset([-480]);
    timeZoneList =
        goog.locale.timeZoneDetection.getTimeZoneList(undefined, mockDate);
    assertEquals('Asia/Hong_Kong', timeZoneList[0]);
    assertEquals('Asia/Chongqing', timeZoneList[7]);
    assertEquals(16, timeZoneList.length);

    timeZoneList =
        goog.locale.timeZoneDetection.getTimeZoneList('AU', mockDate);
    assertEquals(1, timeZoneList.length);
    assertEquals('Australia/Perth', timeZoneList[0]);
  }

</script>
</body>
</html>