15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/usr/bin/env python 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved. 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file. 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import logging 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import sys 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import pyauto_functional # Must be imported before pyauto 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import pyauto 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)sys.path.append('/usr/local') # To make autotest libs importable. 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from autotest.cros import cros_ui 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from autotest.cros import ownership 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChromeosTime(pyauto.PyUITest): 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Tests for the ChromeOS status area clock and timezone settings.""" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def setUp(self): 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cros_ui.fake_ownership() 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pyauto.PyUITest.setUp(self) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._initial_timezone = self.GetTimeInfo()['timezone'] 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def tearDown(self): 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.SetTimezone(self._initial_timezone) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pyauto.PyUITest.tearDown(self) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ownership.clear_ownership() 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testTimeInfo(self): 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Print the the display time, date, and timezone.""" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logging.debug(self.GetTimeInfo()) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testSetTimezone(self): 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Sanity test to make sure setting the timezone works.""" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.SetTimezone('America/Los_Angeles') 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pacific_time = self.GetTimeInfo()['display_time'] 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.SetTimezone('America/New_York') 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eastern_time = self.GetTimeInfo()['display_time'] 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertNotEqual(pacific_time, eastern_time, 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'Time zone changed but display time did not.') 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def _IsTimezoneEditable(self): 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Check if the timezone is editable. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) It will navigate to the system settings page and verify that the 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) timezone settings drop down is not disabled. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Returns: 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) True, if timezone dropdown is enabled 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) False, otherwise 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.NavigateToURL('chrome://settings-frame') 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = self.ExecuteJavascript(""" 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var disabled = true; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var timezone = document.getElementById('timezone-select'); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (timezone) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) disabled = timezone.disabled; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) domAutomationController.send(disabled.toString()); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ret == 'false' 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testTimezoneIsEditable(self): 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Test that the timezone is always editable.""" 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # This test only makes sense if we are not running as the owner. 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertFalse(self.GetLoginInfo()['is_owner']) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) editable = self._IsTimezoneEditable() 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue(editable, msg='Timezone is not editable when not owner.') 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def _SetTimezoneInUI(self, timezone): 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.NavigateToURL('chrome://settings-frame/settings') 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.ExecuteJavascript(""" 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var selectElement = document.getElementById('timezone-select'); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selectElement.value = "%s"; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var event = document.createEvent("HTMLEvents"); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event.initEvent("change", true, true); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selectElement.dispatchEvent(event); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) domAutomationController.send(""); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ % timezone) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testSetTimezoneUI(self): 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Test that the timezone UI changes internal settings. 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Set the Timezone on the settings page. Check the internal timezone 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) afterwards. Timezones should be always editable.""" 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for timezone in ['America/Barbados', 'Europe/Helsinki']: 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._SetTimezoneInUI(timezone) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertTrue(self.WaitUntil(lambda: self.GetTimeInfo()['timezone'], 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expect_retval=timezone), 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'Timezone not changed as expected.'); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if __name__ == '__main__': 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pyauto_functional.Main() 96