| Index: client/site_tests/desktopui_ImeTest/desktopui_ImeTest.py
|
| diff --git a/client/site_tests/desktopui_ImeTest/desktopui_ImeTest.py b/client/site_tests/desktopui_ImeTest/desktopui_ImeTest.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..542ec2c0c0a6704e2de047b5eb5b87a79a34cf9b
|
| --- /dev/null
|
| +++ b/client/site_tests/desktopui_ImeTest/desktopui_ImeTest.py
|
| @@ -0,0 +1,147 @@
|
| +# Copyright (c) 2010 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, string, time, gtk
|
| +from autotest_lib.client.bin import site_ui_test, test
|
| +from autotest_lib.client.common_lib import error, site_ui, utils
|
| +
|
| +
|
| +class desktopui_ImeTest(site_ui_test.UITest):
|
| + version = 1
|
| + preserve_srcdir = True
|
| +
|
| + def setup(self):
|
| + # TODO: We shouldn't use ibusclient, we should talk to Chrome directly
|
| + self.job.setup_dep(['ibusclient'])
|
| +
|
| +
|
| + # TODO: Get rid of this function.
|
| + def run_ibusclient(self, options):
|
| + cmd = site_ui.xcommand_as('%s %s' % (self.exefile, options), 'chronos')
|
| + return utils.system_output(cmd, retain_output=True)
|
| +
|
| +
|
| + # TODO: Make this function talk to chrome directly
|
| + def preload_engines(self, engine_list):
|
| + engine_names = string.join(engine_list, " ")
|
| + out = self.run_ibusclient('preload_engines %s' % engine_names)
|
| + if not 'OK' in out:
|
| + raise error.TestFail('Failed to preload engines: %s' % engine_names)
|
| +
|
| + # ibus takes some time to preload the engines, and they can't be
|
| + # activated until they are done loading. Since we don't get notified
|
| + # when they are ready, we have to wait here to give them time.
|
| + time.sleep(2)
|
| +
|
| +
|
| + # TODO: Make this function talk to chrome directly
|
| + def activate_engine(self, engine_name):
|
| + out = self.run_ibusclient('activate_engine %s' % engine_name)
|
| + if not 'OK' in out:
|
| + raise error.TestFail('Failed to activate engine: %s' % engine_name)
|
| +
|
| +
|
| + # TODO: Make this function set the config value directly, instead of
|
| + # attempting to navigate the UI.
|
| + def toggle_ime_process(self):
|
| + # Before we try to activate the options menu, we need to wait for
|
| + # previous actions to complete. Most notably is that pressing F5
|
| + # immediately after login gets lost.
|
| + time.sleep(3)
|
| + ax = self.get_autox()
|
| +
|
| + # Open the config dialog.
|
| + ax.send_hotkey('F5')
|
| + time.sleep(2)
|
| +
|
| + # Select the "Languages and Input" button.
|
| + ax.send_text('\t\t\t\t\t\t\t\t\t\t\t ')
|
| +
|
| + # Select the "International keyboard" checkbox.
|
| + ax.send_text('\t\t\t\t\t\t ')
|
| +
|
| + # Close the window.
|
| + ax.send_hotkey('Ctrl+w')
|
| + time.sleep(1)
|
| +
|
| +
|
| + def get_current_text(self):
|
| + # Because there can be a slight delay between entering text and the
|
| + # output from the ime being received, we need to sleep here.
|
| + time.sleep(1)
|
| + ax = self.get_autox()
|
| +
|
| + # Select all the text so that it can be accessed via the clipboard.
|
| + ax.send_hotkey('Ctrl-a')
|
| + time.sleep(1)
|
| +
|
| + # The DISPLAY environment variable isn't set, so we have to manually get
|
| + # the proper display.
|
| + display = gtk.gdk.Display(":0.0")
|
| +
|
| + clip = gtk.Clipboard(display, "PRIMARY")
|
| + return clip.wait_for_text()
|
| +
|
| +
|
| + def test_ibus_start_process(self):
|
| + # Check that enabling the IME launches ibus.
|
| + self.toggle_ime_process()
|
| + success = False
|
| + start_time = time.time()
|
| + while time.time() - start_time < 10:
|
| + if os.system('pgrep ^ibus-daemon$') == 0:
|
| + success = True
|
| + break
|
| + time.sleep(1)
|
| + if not success:
|
| + raise error.TestFail('ibus-daemon did not start via config')
|
| +
|
| +
|
| + def test_ibus_stop_process(self):
|
| + # Check that disabling the IME stops ibus.
|
| + self.toggle_ime_process()
|
| + success = False
|
| + start_time = time.time()
|
| + while time.time() - start_time < 10:
|
| + if os.system('pgrep ^ibus-daemon$') != 0:
|
| + success = True
|
| + break
|
| + time.sleep(1)
|
| + if not success:
|
| + raise error.TestFail('ibus-daemon did not stop via config')
|
| +
|
| +
|
| + def test_engine(self, engine_name, input_string, expected_string):
|
| + self.preload_engines([engine_name])
|
| + self.activate_engine(engine_name)
|
| +
|
| + ax = self.get_autox()
|
| +
|
| + # Focus on the omnibox so that we can enter text.
|
| + ax.send_hotkey('Ctrl-l')
|
| +
|
| + ax.send_text(input_string)
|
| +
|
| + text = self.get_current_text()
|
| + if text != expected_string:
|
| + raise error.TestFail(
|
| + 'Engine %s failed: Got %s, expected %s' % (engine_name, text,
|
| + expected_string))
|
| +
|
| +
|
| + def run_once(self):
|
| + dep = 'ibusclient'
|
| + dep_dir = os.path.join(self.autodir, 'deps', dep)
|
| + self.job.install_pkg(dep, 'dep', dep_dir)
|
| +
|
| + self.exefile = os.path.join(self.autodir,
|
| + 'deps/ibusclient/ibusclient')
|
| +
|
| + self.test_ibus_start_process()
|
| + self.test_engine('mozc', 'nihongo \n',
|
| + '\xE6\x97\xA5\xE6\x9C\xAC\xE8\xAA\x9E')
|
| + self.test_engine('chewing', 'hol \n', '\xE6\x93\x8D')
|
| + self.test_engine('hangul', 'wl ', '\xEC\xA7\x80 ')
|
| + self.test_engine('pinyin', 'nihao ', '\xE4\xBD\xA0\xE5\xA5\xBD')
|
| + self.test_ibus_stop_process()
|
|
|