Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2237)

Unified Diff: chrome/test/data/webui/settings/date_time_page_tests.js

Issue 2438443005: MD Settings: Date and Time page, part 2/3 (Closed)
Patch Set: rebase Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/test/data/webui/settings/cr_settings_browsertest.js ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/data/webui/settings/date_time_page_tests.js
diff --git a/chrome/test/data/webui/settings/date_time_page_tests.js b/chrome/test/data/webui/settings/date_time_page_tests.js
new file mode 100644
index 0000000000000000000000000000000000000000..c1eb83cf319886d51e104ec701eb4962990e4cb1
--- /dev/null
+++ b/chrome/test/data/webui/settings/date_time_page_tests.js
@@ -0,0 +1,239 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+(function() {
+ function getFakePrefs() {
+ return {
+ cros: {
+ system: {
+ timezone: {
+ key: 'cros.system.timezone',
+ type: chrome.settingsPrivate.PrefType.STRING,
+ value: 'Westeros/Kings_Landing',
+ },
+ },
+ },
+ settings: {
+ clock: {
+ use_24hour_clock: {
+ key: 'settings.clock.use_24hour_clock',
+ type: chrome.settingsPrivate.PrefType.BOOLEAN,
+ value: false,
+ },
+ },
+ resolve_timezone_by_geolocation: {
+ key: 'settings.resolve_timezone_by_geolocation',
+ type: chrome.settingsPrivate.PrefType.BOOLEAN,
+ value: true,
+ },
+ },
+ };
+ }
+
+ /**
+ * Sets up fakes and creates the date time element.
+ * @param {!Object} prefs
+ * @param {boolean} hasPolicy
+ * @param {boolean=} opt_autoDetectPolicyValue
+ * @return {!SettingsDateTimePage}
+ */
+ function initializeDateTime(prefs, hasPolicy, opt_autoDetectPolicyValue) {
+ // Find the desired initial time zone by ID.
+ var timeZone = assert(fakeTimeZones.find(function(timeZonePair) {
+ return timeZonePair[0] == prefs.cros.system.timezone.value;
+ }));
+
+ var data = {
+ timeZoneID: timeZone[0],
+ timeZoneName: timeZone[1],
+ controlledSettingPolicy: 'This setting is enforced by your administrator',
+ };
+
+ if (hasPolicy)
+ data.timeZoneAutoDetectValueFromPolicy = opt_autoDetectPolicyValue;
+
+ window.loadTimeData = new LoadTimeData;
+ loadTimeData.data = data;
+
+ var dateTime = document.createElement('settings-date-time-page');
+ dateTime.prefs = prefs;
+ CrSettingsPrefs.setInitialized();
+
+ document.body.appendChild(dateTime);
+ return dateTime;
+ }
+
+ // CrOS sends time zones as [id, friendly name] pairs.
+ var fakeTimeZones = [
+ ['Westeros/Highgarden', '(KNG-2:00) The Reach Time (Highgarden)'],
+ ['Westeros/Winterfell', '(KNG-1:00) The North Time (Winterfell)'],
+ ['Westeros/Kings_Landing',
+ '(KNG+0:00) Westeros Standard Time (King\'s Landing)'],
+ ['Westeros/TheEyrie', '(KNG+1:00) The Vale Time (The Eyrie)'],
+ ['Westeros/Sunspear', '(KNG+2:00) Dorne Time (Sunspear)'],
+ ['FreeCities/Pentos', '(KNG+6:00) Pentos Time (Pentos)'],
+ ['FreeCities/Volantis', '(KNG+9:00) Volantis Time (Volantis)'],
+ ['BayOfDragons/Daenerys', '(KNG+14:00) Daenerys Free Time (Meereen)'],
+ ];
+
+ suite('settings-date-time-page', function() {
+ var dateTime;
+
+ // Track whether handler functions have been called.
+ var dateTimePageReadyCalled;
+ var getTimeZonesCalled;
+
+ setup(function() {
+ PolymerTest.clearBody();
+ CrSettingsPrefs.resetForTesting();
+
+ dateTimePageReadyCalled = false;
+ getTimeZonesCalled = false;
+
+ registerMessageCallback('dateTimePageReady', null, function() {
+ assertFalse(dateTimePageReadyCalled);
+ dateTimePageReadyCalled = true;
+ });
+
+ registerMessageCallback('getTimeZones', null, function(callback) {
+ assertFalse(getTimeZonesCalled);
+ getTimeZonesCalled = true;
+ cr.webUIResponse(callback, true, fakeTimeZones);
+ });
+ });
+
+ suiteTeardown(function() {
+ // TODO(michaelpg): Removes the element before exiting, because the
+ // <paper-tooltip> in <cr-policy-pref-indicator> somehow causes warnings
+ // and/or script errors in axs_testing.js.
+ PolymerTest.clearBody();
+ });
+
+ function verifyAutoDetectSetting(autoDetect) {
+ assertEquals(autoDetect, dateTime.$$('settings-dropdown-menu').disabled);
+ assertEquals(autoDetect, dateTime.$.timeZoneAutoDetectCheckbox.checked);
+ }
+
+ function verifyPolicy(policy) {
+ Polymer.dom.flush();
+ var indicator = dateTime.$$('cr-policy-pref-indicator');
+
+ if (policy) {
+ assertTrue(!!indicator);
+ assertGT(indicator.clientHeight, 0);
+ } else {
+ // Indicator should be missing or hidden.
+ if (indicator)
+ assertEquals(0, indicator.clientHeight);
+ }
+
+ assertEquals(policy, dateTime.$.timeZoneAutoDetectCheckbox.disabled);
+ }
+
+ function verifyTimeZonesPopulated(populated) {
+ var dropdown = dateTime.$$('settings-dropdown-menu');
+ if (populated)
+ assertEquals(fakeTimeZones.length, dropdown.menuOptions.length);
+ else
+ assertEquals(1, dropdown.menuOptions.length);
+ }
+
+ test('auto-detect on', function(done) {
+ var prefs = getFakePrefs();
+ dateTime = initializeDateTime(prefs, false);
+
+ assertTrue(dateTimePageReadyCalled);
+ assertFalse(getTimeZonesCalled);
+
+ verifyAutoDetectSetting(true);
+ verifyTimeZonesPopulated(false);
+ verifyPolicy(false);
+
+ // Disable auto-detect.
+ MockInteractions.tap(dateTime.$.timeZoneAutoDetectCheckbox);
+ verifyAutoDetectSetting(false);
+ assertTrue(getTimeZonesCalled);
+
+ setTimeout(function() {
+ verifyTimeZonesPopulated(true);
+ done();
+ });
+ });
+
+ test('auto-detect off', function(done) {
+ var prefs = getFakePrefs();
+ prefs.settings.resolve_timezone_by_geolocation.value = false;
+ dateTime = initializeDateTime(prefs, false);
+
+ assertTrue(dateTimePageReadyCalled);
+ assertTrue(getTimeZonesCalled);
+
+ verifyAutoDetectSetting(false);
+ verifyPolicy(false);
+
+ setTimeout(function() {
+ verifyTimeZonesPopulated(true);
+
+ // Enable auto-detect.
+ MockInteractions.tap(dateTime.$.timeZoneAutoDetectCheckbox);
+ verifyAutoDetectSetting(true);
+ done();
+ });
+ });
+
+ test('auto-detect forced on', function(done) {
+ var prefs = getFakePrefs();
+ prefs.settings.resolve_timezone_by_geolocation.value = false;
+ dateTime = initializeDateTime(prefs, true, true);
+
+ assertTrue(dateTimePageReadyCalled);
+ assertFalse(getTimeZonesCalled);
+
+ verifyAutoDetectSetting(true);
+ verifyTimeZonesPopulated(false);
+ verifyPolicy(true);
+
+ // Cannot disable auto-detect.
+ MockInteractions.tap(dateTime.$.timeZoneAutoDetectCheckbox);
+ verifyAutoDetectSetting(true);
+ assertFalse(getTimeZonesCalled);
+
+ // Update the policy: force auto-detect off.
+ cr.webUIListenerCallback('time-zone-auto-detect-policy', true, false);
+ verifyAutoDetectSetting(false);
+ verifyPolicy(true);
+
+ assertTrue(getTimeZonesCalled);
+ setTimeout(function() {
+ verifyTimeZonesPopulated(true);
+ done();
+ });
+ });
+
+ test('auto-detect forced off', function(done) {
+ var prefs = getFakePrefs();
+ dateTime = initializeDateTime(prefs, true, false);
+
+ assertTrue(dateTimePageReadyCalled);
+ assertTrue(getTimeZonesCalled);
+
+ verifyAutoDetectSetting(false);
+ verifyPolicy(true);
+
+ setTimeout(function() {
+ verifyTimeZonesPopulated(true);
+
+ // Remove the policy so user's preference takes effect.
+ cr.webUIListenerCallback('time-zone-auto-detect-policy', false);
+ verifyAutoDetectSetting(true);
+ verifyPolicy(false);
+
+ // User can disable auto-detect.
+ MockInteractions.tap(dateTime.$.timeZoneAutoDetectCheckbox);
+ verifyAutoDetectSetting(false);
+ done();
+ });
+ });
+ });
+})();
« no previous file with comments | « chrome/test/data/webui/settings/cr_settings_browsertest.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698