Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(257)

Side by Side Diff: client/site_tests/desktopui_IBusTest/desktopui_IBusTest.py

Issue 3352010: Fix ibus autotest by having it launch ibus-daemon itself. (Closed) Base URL: ssh://gitrw.chromium.org/autotest.git
Patch Set: Code review fixes Created 10 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 1 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import logging, os, re, string, time 5 import logging, os, re, string, time
6 from autotest_lib.client.bin import site_ui_test, test 6 from autotest_lib.client.bin import site_ui_test, test
7 from autotest_lib.client.common_lib import error, site_ui, utils 7 from autotest_lib.client.common_lib import error, site_ui, utils
8 8
9 def wait_for_ibus_daemon_or_die(timeout=10):
10 # Wait until ibus-daemon starts. ibus-daemon starts after a user
11 # logs in (see src/platform/init for details), hence it's not
12 # guaranteed that ibus-daemon is running when the test starts.
13 start_time = time.time()
14 while time.time() - start_time < timeout:
15 if os.system('pgrep ^ibus-daemon$') == 0: # Returns 0 on success.
16 return
17 time.sleep(1)
18 raise error.TestFail('ibus-daemon is not running')
19
20
21 class desktopui_IBusTest(site_ui_test.UITest): 9 class desktopui_IBusTest(site_ui_test.UITest):
22 version = 1 10 version = 1
23 preserve_srcdir = True 11 preserve_srcdir = True
24 12
25 def setup(self): 13 def setup(self):
14 self._ibus_job = None
15 self._candidate_window_job = None
26 self.job.setup_dep(['ibusclient']) 16 self.job.setup_dep(['ibusclient'])
27 17
28 18
29 def run_ibusclient(self, options): 19 def run_ibusclient(self, options):
30 cmd = site_ui.xcommand_as('%s %s' % (self.exefile, options), 'chronos') 20 cmd = site_ui.xcommand_as('%s %s' % (self.exefile, options), 'chronos')
31 return utils.system_output(cmd, retain_output=True) 21 return utils.system_output(cmd, retain_output=True)
32 22
33 23
34 def test_reachable(self): 24 def test_reachable(self):
35 out = self.run_ibusclient('check_reachable') 25 out = self.run_ibusclient('check_reachable')
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 out = self.run_ibusclient('unset_config') 60 out = self.run_ibusclient('unset_config')
71 if not 'OK' in out: 61 if not 'OK' in out:
72 raise error.TestFail('Failed to unset %s value from ' 62 raise error.TestFail('Failed to unset %s value from '
73 'the ibus config service' % type_name) 63 'the ibus config service' % type_name)
74 # TODO(yusukes): Add a get_config test here to make sure the value is 64 # TODO(yusukes): Add a get_config test here to make sure the value is
75 # actually removed. See also http://crosbug.com/2801/. 65 # actually removed. See also http://crosbug.com/2801/.
76 66
77 67
78 def test_check_unused_ibus_values(self): 68 def test_check_unused_ibus_values(self):
79 engine_list = ['hangul', 'pinyin', 'mozc', 'chewing'] 69 engine_list = ['hangul', 'pinyin', 'mozc', 'chewing']
80 expected_unread = set([# TODO: Uncomment these when mozc loads config 70 expected_unread = set(['engine/PinyinCorrectPinyin_UEN_UN',
71 'engine/PinyinFuzzyPinyin_Z_ZH',
72 'engine/PinyinFuzzyPinyin_CH_C',
73 'engine/PinyinFuzzyPinyin_S_SH',
74 'engine/PinyinFuzzyPinyin_EN_ENG',
75 'engine/PinyinFuzzyPinyin_AN_ANG',
76 'engine/PinyinFuzzyPinyin_IANG_IAN',
77 'engine/PinyinSpecialPhrases',
78 'engine/PinyinFuzzyPinyin_UAN_UANG',
79 'engine/PinyinFuzzyPinyin_IN_ING',
80 'engine/PinyinFuzzyPinyin_G_K',
81 'engine/PinyinCorrectPinyin_UEI_UI',
82 'engine/PinyinCorrectPinyin_UE_VE',
83 'engine/PinyinFuzzyPinyin_F_H',
84 'engine/PinyinFuzzyPinyin_SH_S',
85 'engine/PinyinIncompletePinyin',
86 'engine/PinyinFuzzyPinyin_L_R',
87 'engine/PinyinFuzzyPinyin_K_G',
88 'engine/PinyinFuzzyPinyin_ANG_AN',
89 'engine/PinyinFuzzyPinyin_C_CH',
90 'engine/PinyinCorrectPinyin_MG_NG',
91 'engine/PinyinLookupTableOrientation',
92 'engine/PinyinFuzzyPinyin_L_N',
93 'engine/PinyinFuzzyPinyin_ING_IN',
94 'engine/PinyinFuzzyPinyin_IAN_IANG',
95 'engine/PinyinFuzzyPinyin_N_L',
96 'engine/PinyinCorrectPinyin_IOU_IU',
97 'engine/PinyinFuzzyPinyin_ENG_EN',
98 'engine/PinyinCorrectPinyin_VE_UE',
99 'engine/PinyinCorrectPinyin_V_U',
100 'engine/PinyinFuzzyPinyin_UANG_UAN',
101 'engine/PinyinDoublePinyinShowRaw',
102 'engine/PinyinFuzzyPinyin_H_F',
103 'engine/PinyinFuzzyPinyin_ZH_Z',
104 'engine/PinyinFuzzyPinyin_R_L',
105
106 # TODO: Uncomment these when mozc loads config
81 # values from ibus. 107 # values from ibus.
82 'engine/Mozchistory_learning_level', 108 'engine/Mozchistory_learning_level',
83 'engine/Mozcincognito_mode', 109 'engine/Mozcincognito_mode',
84 'engine/Mozcnumpad_character_form', 110 'engine/Mozcnumpad_character_form',
85 'engine/Mozcpreedit_method', 111 'engine/Mozcpreedit_method',
86 'engine/Mozcpunctuation_method', 112 'engine/Mozcpunctuation_method',
87 'engine/Mozcsession_keymap', 113 'engine/Mozcsession_keymap',
88 'engine/Mozcshift_key_mode_switch', 114 'engine/Mozcshift_key_mode_switch',
89 'engine/Mozcspace_character_form', 115 'engine/Mozcspace_character_form',
90 'engine/Mozcsuggestions_size', 116 'engine/Mozcsuggestions_size',
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 173
148 # These preferences are actually read, but 174 # These preferences are actually read, but
149 # ibus-daemon reads them before chrome 175 # ibus-daemon reads them before chrome
150 # connects, so they show up as a false 176 # connects, so they show up as a false
151 # failure. 177 # failure.
152 'general/hotkeynext_engine_in_menu', 178 'general/hotkeynext_engine_in_menu',
153 'general/hotkeyprevious_engine', 179 'general/hotkeyprevious_engine',
154 'generalglobal_engine', 180 'generalglobal_engine',
155 181
156 # We don't set these prefernces. 182 # We don't set these prefernces.
157 'general/hotkeynext_engine',
158 'general/hotkeyprev_engine',
159 'general/hotkeytrigger', 183 'general/hotkeytrigger',
160 'generalembed_preedit_text', 184 'generalembed_preedit_text',
161 'generalenable_by_default', 185 'generalenable_by_default',
162 'generalpreload_engines', 186 'generalpreload_engines',
163 'generaluse_global_engine', 187 'generaluse_global_engine',
164 'generaluse_system_keyboard_layout']) 188 'generaluse_system_keyboard_layout'])
165 189
166 self.preload_engines(engine_list) 190 self.preload_engines(engine_list)
167 191
192 # ibus takes some time to preload the engines, and they can't be
193 # activated until they are done loading. Since we don't get notified
194 # when they are ready, we have to wait here to give them time.
195 time.sleep(2)
196
168 # Send a ctrl+l to enter a text field. 197 # Send a ctrl+l to enter a text field.
169 ax = self.get_autox() 198 ax = self.get_autox()
170 ax.send_hotkey('Ctrl-l') 199 ax.send_hotkey('Ctrl-l')
171 200
172 for engine_name in engine_list: 201 for engine_name in engine_list:
173 self.activate_engine(engine_name) 202 self.activate_engine(engine_name)
174 203
175 out = self.run_ibusclient('get_unused') 204 out = self.run_ibusclient('get_unused')
176 match = re.match(r"Unread:(.*)Unwritten:(.*)", out, re.DOTALL) 205 match = re.match(r"Unread:(.*)Unwritten:(.*)", out, re.DOTALL)
177 if not match: 206 if not match:
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 raise error.TestFail('Failed to preload engines: %s' % engine_names) 242 raise error.TestFail('Failed to preload engines: %s' % engine_names)
214 243
215 244
216 def activate_engine(self, engine_name): 245 def activate_engine(self, engine_name):
217 out = self.run_ibusclient('activate_engine %s' % engine_name) 246 out = self.run_ibusclient('activate_engine %s' % engine_name)
218 if not 'OK' in out: 247 if not 'OK' in out:
219 raise error.TestFail('Failed to activate engine: %s' % engine_name) 248 raise error.TestFail('Failed to activate engine: %s' % engine_name)
220 249
221 250
222 def run_once(self): 251 def run_once(self):
223 wait_for_ibus_daemon_or_die() 252 self.start_ibus_daemon_or_die()
224 dep = 'ibusclient' 253 dep = 'ibusclient'
225 dep_dir = os.path.join(self.autodir, 'deps', dep) 254 dep_dir = os.path.join(self.autodir, 'deps', dep)
226 self.job.install_pkg(dep, 'dep', dep_dir) 255 self.job.install_pkg(dep, 'dep', dep_dir)
227 256
228 self.exefile = os.path.join(self.autodir, 257 self.exefile = os.path.join(self.autodir,
229 'deps/ibusclient/ibusclient') 258 'deps/ibusclient/ibusclient')
230 self.test_reachable() 259 self.test_reachable()
231 self.test_supported_engines() 260 self.test_supported_engines()
232 for type_name in ['boolean', 'int', 'double', 'string', 'boolean_list', 261 for type_name in ['boolean', 'int', 'double', 'string', 'boolean_list',
233 'int_list', 'double_list', 'string_list']: 262 'int_list', 'double_list', 'string_list']:
234 self.test_config(type_name) 263 self.test_config(type_name)
235 264
236 self.test_check_unused_ibus_values() 265 self.test_check_unused_ibus_values()
266 self._ibus_job = None
267 self._candidate_window_job = None
268 utils.system_output("kill -9 `pgrep ^ibus-daemon$`")
269
270
271 def start_ibus_daemon_or_die(self, timeout=10):
272 self._ibus_job = utils.BgJob(
273 "su chronos -c '%s'" %
274 "/usr/bin/ibus-daemon --panel=disable --cache=none --restart")
275 time.sleep(2)
276 self._candidate_window_job = utils.BgJob(
277 "su chronos -c '/opt/google/chrome/candidate_window'")
278 start_time = time.time()
279 while time.time() - start_time < timeout:
280 if os.system('pgrep ^ibus-daemon$') == 0:
281 return
282 time.sleep(1)
283 raise error.TestFail('ibus-daemon is not running')
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698