4
from gi.repository import IBus
6
from ibus_cangjie.engine import *
9
class CangjieTestCase(unittest.TestCase):
11
self.engine = EngineCangjie()
16
def test_single_key(self):
17
self.engine.do_process_key_event(IBus.a, 0, 0)
19
self.assertEqual(len(self.engine._mock_auxiliary_text), 1)
21
def test_single_key_space_single_char(self):
22
self.engine.do_process_key_event(IBus.d, 0, 0)
23
self.engine.do_process_key_event(IBus.space, 0, 0)
25
self.assertEqual(len(self.engine._mock_auxiliary_text), 0)
26
self.assertEqual(len(self.engine._mock_committed_text), 1)
28
def test_single_key_space_two_candidates(self):
29
self.engine.do_process_key_event(IBus.a, 0, 0)
30
self.engine.do_process_key_event(IBus.space, 0, 0)
32
self.assertEqual(len(self.engine._mock_auxiliary_text), 1)
33
self.assertEqual(len(self.engine._mock_committed_text), 0)
34
self.assertEqual(self.engine.lookuptable.get_number_of_candidates(), 2)
36
def test_two_candidates_space(self):
37
self.engine.do_process_key_event(IBus.a, 0, 0)
38
self.engine.do_process_key_event(IBus.space, 0, 0)
40
# Keep track of the first candidate, check later if it was committed
41
expected = self.engine.lookuptable.get_candidate(0).text
43
self.engine.do_process_key_event(IBus.space, 0, 0)
45
self.assertEqual(len(self.engine._mock_auxiliary_text), 0)
46
self.assertEqual(len(self.engine._mock_committed_text), 1)
47
self.assertEqual(self.engine.lookuptable.get_number_of_candidates(), 0)
48
self.assertEqual(self.engine._mock_committed_text, expected)
50
def test_two_candidates_continue_input(self):
51
self.engine.do_process_key_event(IBus.a, 0, 0)
52
self.engine.do_process_key_event(IBus.space, 0, 0)
54
# Keep track of the first candidate, check later if it was committed
55
expected = self.engine.lookuptable.get_candidate(0).text
57
self.engine.do_process_key_event(IBus.a, 0, 0)
59
self.assertEqual(len(self.engine._mock_auxiliary_text), 1)
60
self.assertEqual(len(self.engine._mock_committed_text), 1)
61
self.assertEqual(self.engine.lookuptable.get_number_of_candidates(), 0)
62
self.assertEqual(self.engine._mock_committed_text, expected)
64
def test_max_input(self):
66
self.engine.do_process_key_event(IBus.a, 0, 0)
67
self.engine.do_process_key_event(IBus.a, 0, 0)
68
self.engine.do_process_key_event(IBus.a, 0, 0)
69
self.engine.do_process_key_event(IBus.a, 0, 0)
70
self.engine.do_process_key_event(IBus.a, 0, 0)
72
# Try adding one more and get the error bell
73
self.engine.do_process_key_event(IBus.a, 0, 0)
74
self.assertEqual(len(self.engine._mock_auxiliary_text), 5)
75
self.assertEqual(len(self.engine._mock_committed_text), 0)
76
self.assertEqual(self.engine.lookuptable.get_number_of_candidates(), 0)
78
if os.environ["IBUS_CANGJIE_TESTS_HAVE_PYCANBERRA"] == "true":
79
self.assertEqual(len(self.engine.canberra._mock_played_events), 1)
82
self.engine.do_process_key_event(IBus.a, 0, 0)
83
self.assertEqual(len(self.engine._mock_auxiliary_text), 5)
84
self.assertEqual(len(self.engine._mock_committed_text), 0)
85
self.assertEqual(self.engine.lookuptable.get_number_of_candidates(), 0)
87
if os.environ["IBUS_CANGJIE_TESTS_HAVE_PYCANBERRA"] == "true":
88
self.assertEqual(len(self.engine.canberra._mock_played_events), 2)
90
def test_inexistent_combination(self):
91
self.engine.do_process_key_event(IBus.z, 0, 0)
92
self.engine.do_process_key_event(IBus.z, 0, 0)
93
self.engine.do_process_key_event(IBus.z, 0, 0)
94
self.engine.do_process_key_event(IBus.z, 0, 0)
95
self.engine.do_process_key_event(IBus.z, 0, 0)
96
self.engine.do_process_key_event(IBus.space, 0, 0)
98
self.assertEqual(len(self.engine._mock_auxiliary_text), 5)
99
self.assertEqual(len(self.engine._mock_committed_text), 0)
100
self.assertEqual(self.engine.lookuptable.get_number_of_candidates(), 0)
102
if os.environ["IBUS_CANGJIE_TESTS_HAVE_PYCANBERRA"] == "true":
103
self.assertEqual(len(self.engine.canberra._mock_played_events), 1)
105
def test_wildcard(self):
106
self.engine.do_process_key_event(IBus.d, 0, 0)
107
self.engine.do_process_key_event(IBus.asterisk, 0, 0)
108
self.engine.do_process_key_event(IBus.d, 0, 0)
110
self.assertEqual(len(self.engine._mock_auxiliary_text), 3)
111
self.assertEqual(len(self.engine._mock_committed_text), 0)
112
self.assertEqual(self.engine.lookuptable.get_number_of_candidates(), 0)
114
self.engine.do_process_key_event(IBus.space, 0, 0)
116
self.assertEqual(len(self.engine._mock_auxiliary_text), 3)
117
self.assertEqual(len(self.engine._mock_committed_text), 0)
118
self.assertTrue(self.engine.lookuptable.get_number_of_candidates() > 1)
120
def test_wildcard_first(self):
121
self.engine.do_process_key_event(IBus.asterisk, 0, 0)
123
self.assertEqual(len(self.engine._mock_auxiliary_text), 0)
124
self.assertEqual(len(self.engine._mock_committed_text), 1)
125
self.assertEqual(self.engine.lookuptable.get_number_of_candidates(), 0)
127
def test_wildcard_last(self):
128
self.engine.do_process_key_event(IBus.d, 0, 0)
129
self.engine.do_process_key_event(IBus.asterisk, 0, 0)
131
self.engine.do_process_key_event(IBus.space, 0, 0)
133
self.assertEqual(len(self.engine._mock_auxiliary_text), 2)
134
self.assertEqual(len(self.engine._mock_committed_text), 0)
135
self.assertEqual(self.engine.lookuptable.get_number_of_candidates(), 0)
137
if os.environ["IBUS_CANGJIE_TESTS_HAVE_PYCANBERRA"] == "true":
138
self.assertEqual(len(self.engine.canberra._mock_played_events), 1)
140
def test_backspace(self):
141
self.engine.do_process_key_event(IBus.a, 0, 0)
142
self.engine.do_process_key_event(IBus.BackSpace, 0, 0)
144
self.assertEqual(len(self.engine._mock_auxiliary_text), 0)
145
self.assertEqual(len(self.engine._mock_committed_text), 0)
146
self.assertEqual(self.engine.lookuptable.get_number_of_candidates(), 0)
148
def test_backspace_on_multiple_keys(self):
149
self.engine.do_process_key_event(IBus.a, 0, 0)
150
self.engine.do_process_key_event(IBus.a, 0, 0)
151
self.engine.do_process_key_event(IBus.BackSpace, 0, 0)
153
self.assertEqual(len(self.engine._mock_auxiliary_text), 1)
154
self.assertEqual(len(self.engine._mock_committed_text), 0)
155
self.assertEqual(self.engine.lookuptable.get_number_of_candidates(), 0)
157
def test_backspace_on_candidates(self):
158
self.engine.do_process_key_event(IBus.a, 0, 0)
159
self.engine.do_process_key_event(IBus.space, 0, 0)
160
self.engine.do_process_key_event(IBus.BackSpace, 0, 0)
162
self.assertEqual(len(self.engine._mock_auxiliary_text), 0)
163
self.assertEqual(len(self.engine._mock_committed_text), 0)
164
self.assertEqual(self.engine.lookuptable.get_number_of_candidates(), 0)
166
def test_backspace_on_multiple_keys_and_candidates(self):
167
self.engine.do_process_key_event(IBus.d, 0, 0)
168
self.engine.do_process_key_event(IBus.asterisk, 0, 0)
169
self.engine.do_process_key_event(IBus.d, 0, 0)
170
self.engine.do_process_key_event(IBus.space, 0, 0)
172
self.engine.do_process_key_event(IBus.BackSpace, 0, 0)
174
self.assertEqual(len(self.engine._mock_auxiliary_text), 2)
175
self.assertEqual(len(self.engine._mock_committed_text), 0)
176
self.assertEqual(self.engine.lookuptable.get_number_of_candidates(), 0)
178
def test_escape(self):
179
self.engine.do_process_key_event(IBus.d, 0, 0)
180
self.engine.do_process_key_event(IBus.d, 0, 0)
182
self.engine.do_process_key_event(IBus.Escape, 0, 0)
184
self.assertEqual(len(self.engine._mock_auxiliary_text), 0)
185
self.assertEqual(len(self.engine._mock_committed_text), 0)
186
self.assertEqual(self.engine.lookuptable.get_number_of_candidates(), 0)
188
def test_escape_on_candidates(self):
189
self.engine.do_process_key_event(IBus.d, 0, 0)
190
self.engine.do_process_key_event(IBus.asterisk, 0, 0)
191
self.engine.do_process_key_event(IBus.d, 0, 0)
192
self.engine.do_process_key_event(IBus.space, 0, 0)
194
self.engine.do_process_key_event(IBus.Escape, 0, 0)
196
self.assertEqual(len(self.engine._mock_auxiliary_text), 0)
197
self.assertEqual(len(self.engine._mock_committed_text), 0)
198
self.assertEqual(self.engine.lookuptable.get_number_of_candidates(), 0)
200
def test_autoclear_on_error(self):
201
# First make an error on purpose
202
self.engine.do_process_key_event(IBus.z, 0, 0)
203
self.engine.do_process_key_event(IBus.z, 0, 0)
204
self.engine.do_process_key_event(IBus.space, 0, 0)
205
self.assertEqual(len(self.engine._mock_auxiliary_text), 2)
207
if os.environ["IBUS_CANGJIE_TESTS_HAVE_PYCANBERRA"] == "true":
208
self.assertEqual(len(self.engine.canberra._mock_played_events), 1)
210
# Now go on inputting
211
self.engine.do_process_key_event(IBus.z, 0, 0)
212
self.assertEqual(len(self.engine._mock_auxiliary_text), 1)
213
self.assertEqual(len(self.engine._mock_committed_text), 0)
214
self.assertEqual(self.engine.lookuptable.get_number_of_candidates(), 0)
216
def test_autoclear_on_error_max_input(self):
217
# First make an error on purpose
218
self.engine.do_process_key_event(IBus.z, 0, 0)
219
self.engine.do_process_key_event(IBus.z, 0, 0)
220
self.engine.do_process_key_event(IBus.z, 0, 0)
221
self.engine.do_process_key_event(IBus.z, 0, 0)
222
self.engine.do_process_key_event(IBus.z, 0, 0)
223
self.engine.do_process_key_event(IBus.space, 0, 0)
224
self.assertEqual(len(self.engine._mock_auxiliary_text), 5)
226
if os.environ["IBUS_CANGJIE_TESTS_HAVE_PYCANBERRA"] == "true":
227
self.assertEqual(len(self.engine.canberra._mock_played_events), 1)
229
# Now go on inputting
230
self.engine.do_process_key_event(IBus.z, 0, 0)
231
self.assertEqual(len(self.engine._mock_auxiliary_text), 1)
232
self.assertEqual(len(self.engine._mock_committed_text), 0)
233
self.assertEqual(self.engine.lookuptable.get_number_of_candidates(), 0)