| # 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) |