# Copyright 2018 The Chromium OS 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 re from autotest_lib.client.common_lib import error from autotest_lib.client.common_lib.cros import chrome from autotest_lib.client.cros.enterprise import enterprise_policy_base from autotest_lib.client.cros.input_playback import input_playback from autotest_lib.client.cros.touch_playback_test_base import EventsPage class policy_KeyboardDefaultToFunctionKeys( enterprise_policy_base.EnterprisePolicyTest): version = 1 POLICY_NAME = 'KeyboardDefaultToFunctionKeys' TEST_CASES = { 'True': True, 'False': False, 'NotSet': None } def initialize(self, **kwargs): """ Emulate a keyboard and initialize enterprise policy base. """ super(policy_KeyboardDefaultToFunctionKeys, self).initialize(**kwargs) self.player = input_playback.InputPlayback() self.player.emulate(input_type='keyboard') self.player.find_connected_inputs() def cleanup(self): """ Close playback and policy base class. """ self.player.close() super(policy_KeyboardDefaultToFunctionKeys, self).cleanup() def _test_function_keys_default(self, policy_value): """ Test default function keys action. Search+function keys should perform the alternate action. @param policy_value: policy value for this case. @raises error.TestFail if keypress differs from expected value. """ # Get focus of the page self.player.blocking_playback_of_default_file( input_type='keyboard', filename='keyboard_enter') key_actions = ['BrowserForward', 'F2'] if policy_value: key_actions = reversed(key_actions) for action, keys in zip(key_actions, ['f2', 'search+f2']): self._events.clear_previous_events() self.player.blocking_playback_of_default_file( input_type='keyboard', filename='keyboard_' + keys) events_log = self._events.get_events_log() logging.info('Events log: ' + events_log) if not re.search('key=' + action, events_log): raise error.TestFail(('policy_value: %s - typed: %s, ' 'expected: %s') % (policy_value, keys, action)) def run_once(self, case): """ Setup and run the test configured for the specified test case. @param case: Name of the test case to run. """ case_value = self.TEST_CASES[case] self.setup_case(user_policies={self.POLICY_NAME: case_value}, init_network_controller=True) self._events = EventsPage(self.cr, self.bindir) self._test_function_keys_default(case_value)