blob: 085c4a349376a2d16729cfe931a4ce347fd90579 [file] [log] [blame]
# Copyright 2017 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 os
from autotest_lib.client.common_lib import error
from autotest_lib.client.cros.input_playback import input_playback
_KEYBOARD = 'keyboard'
_KEY_FILENAME = 'keyboard_%s'
class Keyboard(object):
"""An emulated keyboard device used for UI automation."""
def __init__(self):
"""Prepare an emulated keyboard device."""
self.dirname = os.path.dirname(__file__)
# Create an emulated keyboard device.
self.keyboard = input_playback.InputPlayback()
self.keyboard.emulate(input_type=_KEYBOARD)
self.keyboard.find_connected_inputs()
def press_key(self, key):
"""Replay the recorded key events if exists.
@param key: the target key name, e.g. f1, f2, tab or combination of keys
'alt+shift+i', 'ctrl+f5', etc.
"""
event_file = os.path.join(self.dirname, _KEY_FILENAME % key)
if not os.path.exists(event_file):
raise error.TestError('No such key file keyboard_%s in %s'
% (key, self.dirname))
self.keyboard.blocking_playback(filepath=event_file,
input_type=_KEYBOARD)
def playback(self, event_file):
"""Replay the specified key events file.
@param event_file: the filename of the key events
"""
self.keyboard.blocking_playback(filepath=event_file,
input_type=_KEYBOARD)
def close(self):
"""Clean up the files/handles created in the class."""
if self.keyboard:
self.keyboard.close()
self.keyboard = None
def __enter__(self):
"""Allow usage in 'with' statements."""
return self
def __exit__(self, exc_type, exc_val, exc_tb):
"""Release resources on completion of a 'with' statement."""
self.close()