普通文本  |  96行  |  3.25 KB

#!/usr/bin/env python
# Copyright (c) 2012 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.

import logging
import sys

import pyauto_functional  # Must be imported before pyauto
import pyauto

sys.path.append('/usr/local')  # To make autotest libs importable.
from autotest.cros import cros_ui
from autotest.cros import ownership


class ChromeosTime(pyauto.PyUITest):
  """Tests for the ChromeOS status area clock and timezone settings."""

  def setUp(self):
    cros_ui.fake_ownership()
    pyauto.PyUITest.setUp(self)
    self._initial_timezone = self.GetTimeInfo()['timezone']

  def tearDown(self):
    self.SetTimezone(self._initial_timezone)
    pyauto.PyUITest.tearDown(self)
    ownership.clear_ownership()

  def testTimeInfo(self):
    """Print the the display time, date, and timezone."""
    logging.debug(self.GetTimeInfo())

  def testSetTimezone(self):
    """Sanity test to make sure setting the timezone works."""
    self.SetTimezone('America/Los_Angeles')
    pacific_time = self.GetTimeInfo()['display_time']
    self.SetTimezone('America/New_York')
    eastern_time = self.GetTimeInfo()['display_time']

    self.assertNotEqual(pacific_time, eastern_time,
                        'Time zone changed but display time did not.')

  def _IsTimezoneEditable(self):
    """Check if the timezone is editable.

    It will navigate to the system settings page and verify that the
    timezone settings drop down is not disabled.

    Returns:
      True, if timezone dropdown is enabled
      False, otherwise
    """
    self.NavigateToURL('chrome://settings-frame')
    ret = self.ExecuteJavascript("""
        var disabled = true;
        var timezone = document.getElementById('timezone-select');
        if (timezone)
          disabled = timezone.disabled;
        domAutomationController.send(disabled.toString());
    """)
    return ret == 'false'

  def testTimezoneIsEditable(self):
    """Test that the timezone is always editable."""
    # This test only makes sense if we are not running as the owner.
    self.assertFalse(self.GetLoginInfo()['is_owner'])
    editable = self._IsTimezoneEditable()
    self.assertTrue(editable, msg='Timezone is not editable when not owner.')

  def _SetTimezoneInUI(self, timezone):
    self.NavigateToURL('chrome://settings-frame/settings')
    self.ExecuteJavascript("""
        var selectElement = document.getElementById('timezone-select');
        selectElement.value = "%s";
        var event = document.createEvent("HTMLEvents");
        event.initEvent("change", true, true);
        selectElement.dispatchEvent(event);
        domAutomationController.send("");
    """ % timezone)

  def testSetTimezoneUI(self):
    """Test that the timezone UI changes internal settings.

    Set the Timezone on the settings page. Check the internal timezone
    afterwards. Timezones should be always editable."""

    for timezone in ['America/Barbados', 'Europe/Helsinki']:
      self._SetTimezoneInUI(timezone)
      self.assertTrue(self.WaitUntil(lambda: self.GetTimeInfo()['timezone'],
                                     expect_retval=timezone),
                      'Timezone not changed as expected.');

if __name__ == '__main__':
  pyauto_functional.Main()