| OLD | NEW |
| (Empty) | |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 (function() { |
| 6 function getFakePrefs() { |
| 7 return { |
| 8 cros: { |
| 9 system: { |
| 10 timezone: { |
| 11 key: 'cros.system.timezone', |
| 12 type: chrome.settingsPrivate.PrefType.STRING, |
| 13 value: 'Westeros/Kings_Landing', |
| 14 }, |
| 15 }, |
| 16 }, |
| 17 settings: { |
| 18 clock: { |
| 19 use_24hour_clock: { |
| 20 key: 'settings.clock.use_24hour_clock', |
| 21 type: chrome.settingsPrivate.PrefType.BOOLEAN, |
| 22 value: false, |
| 23 }, |
| 24 }, |
| 25 resolve_timezone_by_geolocation: { |
| 26 key: 'settings.resolve_timezone_by_geolocation', |
| 27 type: chrome.settingsPrivate.PrefType.BOOLEAN, |
| 28 value: true, |
| 29 }, |
| 30 }, |
| 31 }; |
| 32 } |
| 33 |
| 34 /** |
| 35 * Sets up fakes and creates the date time element. |
| 36 * @param {!Object} prefs |
| 37 * @param {boolean} hasPolicy |
| 38 * @param {boolean=} opt_autoDetectPolicyValue |
| 39 * @return {!SettingsDateTimePage} |
| 40 */ |
| 41 function initializeDateTime(prefs, hasPolicy, opt_autoDetectPolicyValue) { |
| 42 // Find the desired initial time zone by ID. |
| 43 var timeZone = assert(fakeTimeZones.find(function(timeZonePair) { |
| 44 return timeZonePair[0] == prefs.cros.system.timezone.value; |
| 45 })); |
| 46 |
| 47 var data = { |
| 48 timeZoneID: timeZone[0], |
| 49 timeZoneName: timeZone[1], |
| 50 controlledSettingPolicy: 'This setting is enforced by your administrator', |
| 51 }; |
| 52 |
| 53 if (hasPolicy) |
| 54 data.timeZoneAutoDetectValueFromPolicy = opt_autoDetectPolicyValue; |
| 55 |
| 56 window.loadTimeData = new LoadTimeData; |
| 57 loadTimeData.data = data; |
| 58 |
| 59 var dateTime = document.createElement('settings-date-time-page'); |
| 60 dateTime.prefs = prefs; |
| 61 CrSettingsPrefs.setInitialized(); |
| 62 |
| 63 document.body.appendChild(dateTime); |
| 64 return dateTime; |
| 65 } |
| 66 |
| 67 // CrOS sends time zones as [id, friendly name] pairs. |
| 68 var fakeTimeZones = [ |
| 69 ['Westeros/Highgarden', '(KNG-2:00) The Reach Time (Highgarden)'], |
| 70 ['Westeros/Winterfell', '(KNG-1:00) The North Time (Winterfell)'], |
| 71 ['Westeros/Kings_Landing', |
| 72 '(KNG+0:00) Westeros Standard Time (King\'s Landing)'], |
| 73 ['Westeros/TheEyrie', '(KNG+1:00) The Vale Time (The Eyrie)'], |
| 74 ['Westeros/Sunspear', '(KNG+2:00) Dorne Time (Sunspear)'], |
| 75 ['FreeCities/Pentos', '(KNG+6:00) Pentos Time (Pentos)'], |
| 76 ['FreeCities/Volantis', '(KNG+9:00) Volantis Time (Volantis)'], |
| 77 ['BayOfDragons/Daenerys', '(KNG+14:00) Daenerys Free Time (Meereen)'], |
| 78 ]; |
| 79 |
| 80 suite('settings-date-time-page', function() { |
| 81 var dateTime; |
| 82 |
| 83 // Track whether handler functions have been called. |
| 84 var dateTimePageReadyCalled; |
| 85 var getTimeZonesCalled; |
| 86 |
| 87 setup(function() { |
| 88 PolymerTest.clearBody(); |
| 89 CrSettingsPrefs.resetForTesting(); |
| 90 |
| 91 dateTimePageReadyCalled = false; |
| 92 getTimeZonesCalled = false; |
| 93 |
| 94 registerMessageCallback('dateTimePageReady', null, function() { |
| 95 assertFalse(dateTimePageReadyCalled); |
| 96 dateTimePageReadyCalled = true; |
| 97 }); |
| 98 |
| 99 registerMessageCallback('getTimeZones', null, function(callback) { |
| 100 assertFalse(getTimeZonesCalled); |
| 101 getTimeZonesCalled = true; |
| 102 cr.webUIResponse(callback, true, fakeTimeZones); |
| 103 }); |
| 104 }); |
| 105 |
| 106 suiteTeardown(function() { |
| 107 // TODO(michaelpg): Removes the element before exiting, because the |
| 108 // <paper-tooltip> in <cr-policy-pref-indicator> somehow causes warnings |
| 109 // and/or script errors in axs_testing.js. |
| 110 PolymerTest.clearBody(); |
| 111 }); |
| 112 |
| 113 function verifyAutoDetectSetting(autoDetect) { |
| 114 assertEquals(autoDetect, dateTime.$$('settings-dropdown-menu').disabled); |
| 115 assertEquals(autoDetect, dateTime.$.timeZoneAutoDetectCheckbox.checked); |
| 116 } |
| 117 |
| 118 function verifyPolicy(policy) { |
| 119 Polymer.dom.flush(); |
| 120 var indicator = dateTime.$$('cr-policy-pref-indicator'); |
| 121 |
| 122 if (policy) { |
| 123 assertTrue(!!indicator); |
| 124 assertGT(indicator.clientHeight, 0); |
| 125 } else { |
| 126 // Indicator should be missing or hidden. |
| 127 if (indicator) |
| 128 assertEquals(0, indicator.clientHeight); |
| 129 } |
| 130 |
| 131 assertEquals(policy, dateTime.$.timeZoneAutoDetectCheckbox.disabled); |
| 132 } |
| 133 |
| 134 function verifyTimeZonesPopulated(populated) { |
| 135 var dropdown = dateTime.$$('settings-dropdown-menu'); |
| 136 if (populated) |
| 137 assertEquals(fakeTimeZones.length, dropdown.menuOptions.length); |
| 138 else |
| 139 assertEquals(1, dropdown.menuOptions.length); |
| 140 } |
| 141 |
| 142 test('auto-detect on', function(done) { |
| 143 var prefs = getFakePrefs(); |
| 144 dateTime = initializeDateTime(prefs, false); |
| 145 |
| 146 assertTrue(dateTimePageReadyCalled); |
| 147 assertFalse(getTimeZonesCalled); |
| 148 |
| 149 verifyAutoDetectSetting(true); |
| 150 verifyTimeZonesPopulated(false); |
| 151 verifyPolicy(false); |
| 152 |
| 153 // Disable auto-detect. |
| 154 MockInteractions.tap(dateTime.$.timeZoneAutoDetectCheckbox); |
| 155 verifyAutoDetectSetting(false); |
| 156 assertTrue(getTimeZonesCalled); |
| 157 |
| 158 setTimeout(function() { |
| 159 verifyTimeZonesPopulated(true); |
| 160 done(); |
| 161 }); |
| 162 }); |
| 163 |
| 164 test('auto-detect off', function(done) { |
| 165 var prefs = getFakePrefs(); |
| 166 prefs.settings.resolve_timezone_by_geolocation.value = false; |
| 167 dateTime = initializeDateTime(prefs, false); |
| 168 |
| 169 assertTrue(dateTimePageReadyCalled); |
| 170 assertTrue(getTimeZonesCalled); |
| 171 |
| 172 verifyAutoDetectSetting(false); |
| 173 verifyPolicy(false); |
| 174 |
| 175 setTimeout(function() { |
| 176 verifyTimeZonesPopulated(true); |
| 177 |
| 178 // Enable auto-detect. |
| 179 MockInteractions.tap(dateTime.$.timeZoneAutoDetectCheckbox); |
| 180 verifyAutoDetectSetting(true); |
| 181 done(); |
| 182 }); |
| 183 }); |
| 184 |
| 185 test('auto-detect forced on', function(done) { |
| 186 var prefs = getFakePrefs(); |
| 187 prefs.settings.resolve_timezone_by_geolocation.value = false; |
| 188 dateTime = initializeDateTime(prefs, true, true); |
| 189 |
| 190 assertTrue(dateTimePageReadyCalled); |
| 191 assertFalse(getTimeZonesCalled); |
| 192 |
| 193 verifyAutoDetectSetting(true); |
| 194 verifyTimeZonesPopulated(false); |
| 195 verifyPolicy(true); |
| 196 |
| 197 // Cannot disable auto-detect. |
| 198 MockInteractions.tap(dateTime.$.timeZoneAutoDetectCheckbox); |
| 199 verifyAutoDetectSetting(true); |
| 200 assertFalse(getTimeZonesCalled); |
| 201 |
| 202 // Update the policy: force auto-detect off. |
| 203 cr.webUIListenerCallback('time-zone-auto-detect-policy', true, false); |
| 204 verifyAutoDetectSetting(false); |
| 205 verifyPolicy(true); |
| 206 |
| 207 assertTrue(getTimeZonesCalled); |
| 208 setTimeout(function() { |
| 209 verifyTimeZonesPopulated(true); |
| 210 done(); |
| 211 }); |
| 212 }); |
| 213 |
| 214 test('auto-detect forced off', function(done) { |
| 215 var prefs = getFakePrefs(); |
| 216 dateTime = initializeDateTime(prefs, true, false); |
| 217 |
| 218 assertTrue(dateTimePageReadyCalled); |
| 219 assertTrue(getTimeZonesCalled); |
| 220 |
| 221 verifyAutoDetectSetting(false); |
| 222 verifyPolicy(true); |
| 223 |
| 224 setTimeout(function() { |
| 225 verifyTimeZonesPopulated(true); |
| 226 |
| 227 // Remove the policy so user's preference takes effect. |
| 228 cr.webUIListenerCallback('time-zone-auto-detect-policy', false); |
| 229 verifyAutoDetectSetting(true); |
| 230 verifyPolicy(false); |
| 231 |
| 232 // User can disable auto-detect. |
| 233 MockInteractions.tap(dateTime.$.timeZoneAutoDetectCheckbox); |
| 234 verifyAutoDetectSetting(false); |
| 235 done(); |
| 236 }); |
| 237 }); |
| 238 }); |
| 239 })(); |
| OLD | NEW |