3
from lib.phrase import *
5
class PhraseTest(unittest.TestCase):
8
# Set up global settings
10
WORD_CHARS_REGEX_OPTION : re.compile('[\w]', re.UNICODE),
11
IMMEDIATE_OPTION : False,
12
IGNORE_CASE_OPTION : False,
13
MATCH_CASE_OPTION : False,
14
BACKSPACE_OPTION : True,
15
OMIT_TRIGGER_OPTION : False,
16
TRIGGER_INSIDE_OPTION : False
19
self.defaultPhrase = Phrase("xp@", "expansion@autokey.com")
20
self.defaultPhrase.set_abbreviation("xp@")
21
self.defaultPhrase.set_modes([PhraseMode.ABBREVIATION])
22
self.defaultFolder = PhraseFolder("Folder")
23
self.defaultFolder.add_phrase(self.defaultPhrase)
25
def testImmediateOption(self):
27
# Test default setting (false)
28
self.assertEqual(self.defaultPhrase.check_input("xp@", ""), False)
29
self.assertEqual(self.defaultPhrase.calculate_input("xp@ "), 4)
32
phrase = Phrase("xp@", "expansion@autokey.com")
33
phrase.immediate = True
34
phrase.set_abbreviation("xp@")
35
phrase.set_modes([PhraseMode.ABBREVIATION])
36
self.defaultFolder.add_phrase(phrase)
38
self.assertEqual(phrase.check_input("xp@", ""), True)
39
result = phrase.build_phrase("xp@")
40
self.assertEqual(result.string, "expansion@autokey.com")
41
self.assertEqual(result.backspaces, 3)
42
self.assertEqual(phrase.calculate_input("xp@"), 3)
45
def testIgnoreCaseOption(self):
47
# Test default setting (false)
48
self.assertEqual(self.defaultPhrase.check_input("XP@ ", ""), False)
51
phrase = Phrase("xp@", "expansion@autokey.com")
52
phrase.ignoreCase = True
53
phrase.set_abbreviation("xp@")
54
phrase.set_modes([PhraseMode.ABBREVIATION])
55
self.defaultFolder.add_phrase(phrase)
56
self.assertEqual(phrase.check_input("XP@ ", ""), True)
58
result = phrase.build_phrase("XP@ ")
59
self.assertEqual(result.string, "expansion@autokey.com ")
61
def testMatchCaseOption(self):
62
phrase = Phrase("xp@", "expansion@autokey.com")
63
phrase.ignoreCase = True
64
phrase.matchCase = True
65
phrase.set_abbreviation("xp@")
66
phrase.set_modes([PhraseMode.ABBREVIATION])
67
self.defaultFolder.add_phrase(phrase)
69
result = phrase.build_phrase("asdf XP@ ")
70
self.assertEqual(result.string, "EXPANSION@AUTOKEY.COM ")
72
result = phrase.build_phrase("ASDF Xp@ ")
73
self.assertEqual(result.string, "Expansion@autokey.com ")
75
result = phrase.build_phrase("Asdf xp@ ")
76
self.assertEqual(result.string, "expansion@autokey.com ")
78
def testBackspaceOption(self):
79
# Test default setting (true)
80
result = self.defaultPhrase.build_phrase("xp@ ")
81
self.assertEqual(result.backspaces, 4)
84
phrase = Phrase("xp@", "expansion@autokey.com")
85
phrase.backspace = False
86
phrase.set_abbreviation("xp@")
87
phrase.set_modes([PhraseMode.ABBREVIATION])
88
self.defaultFolder.add_phrase(phrase)
90
result = phrase.build_phrase("xp@ ")
91
self.assertEqual(result.backspaces, 1)
93
def testOmitTriggerOption(self):
94
# Test default setting (false)
95
result = self.defaultPhrase.build_phrase("xp@\n")
96
self.assertEqual(result.string, "expansion@autokey.com\n")
99
phrase = Phrase("xp@", "expansion@autokey.com")
100
phrase.omitTrigger = True
101
phrase.set_abbreviation("xp@")
102
phrase.set_modes([PhraseMode.ABBREVIATION])
103
self.defaultFolder.add_phrase(phrase)
105
result = phrase.build_phrase("xp@.")
106
self.assertEqual(result.string, "expansion@autokey.com")
107
self.assertEqual(result.backspaces, 4)
109
def testTriggerInsideOption(self):
110
# Test default setting (false)
111
self.assertEqual(self.defaultPhrase.check_input("asdfxp@\n", ""), False)
113
# when separated by a non-word char, should still trigger
114
self.assertEqual(self.defaultPhrase.check_input("asdf.xp@ ", ""), True)
117
phrase = Phrase("xp@", "expansion@autokey.com")
118
phrase.triggerInside = True
119
phrase.set_abbreviation("xp@")
120
phrase.set_modes([PhraseMode.ABBREVIATION])
121
self.defaultFolder.add_phrase(phrase)
122
self.assertEqual(phrase.check_input("asdfxp@.", ""), True)
124
result = phrase.build_phrase("asdfxp@.")
125
self.assertEqual(result.string, "expansion@autokey.com.")
128
#Test with omit trigger false
129
phrase = Phrase("Positioning Phrase", "[udc]$(cursor )[/udc]")
130
phrase.set_abbreviation("udc")
131
phrase.set_modes([PhraseMode.ABBREVIATION])
132
self.defaultFolder.add_phrase(phrase)
134
result = phrase.build_phrase("udc ")
135
phrase.parsePositionTokens(result)
136
self.assertEqual(result.lefts, 7)
138
#Test with omit trigger true
139
phrase.omitTrigger = True
140
result = phrase.build_phrase("udc ")
141
phrase.parsePositionTokens(result)
142
self.assertEqual(result.lefts, 6)
144
#Test with immediate true
145
phrase.omitTrigger = False
146
phrase.immediate = True
147
result = phrase.build_phrase("udc")
148
phrase.parsePositionTokens(result)
149
self.assertEqual(result.lefts, 6)
151
def testLeftsWithSpecialKey(self):
152
phrase = Phrase("Positioning Phrase", "[udc]$(cursor )[/udc]<f1>")
153
phrase.set_abbreviation("udc")
154
phrase.set_modes([PhraseMode.ABBREVIATION])
155
self.defaultFolder.add_phrase(phrase)
157
result = phrase.build_phrase("udc ")
158
phrase.parsePositionTokens(result)
159
self.assertEqual(result.lefts, 7)
161
def testMultipleAbbrs(self):
162
phrase = Phrase("Some abbr", "Some abbr")
163
phrase.set_abbreviation("sdf")
164
phrase.set_modes([PhraseMode.ABBREVIATION])
165
self.defaultFolder.add_phrase(phrase)
166
input = "fgh xp@asdf sdf "
168
# Abbreviation should not trigger
169
self.assertEqual(self.defaultPhrase.check_input(input, ""), False)
171
self.assertEqual(phrase.check_input(input, ""), True)
174
phrase1 = Phrase("abbr1", "Some abbr")
175
phrase2 = Phrase("abbr2", "Some abbr")
176
self.defaultFolder.add_phrase(phrase1)
177
self.defaultFolder.add_phrase(phrase2)
179
phrases = [phrase1, phrase2]
181
phrase1.usageCount = 0
182
phrase2.usageCount = 1
184
phrases.sort(reverse=True)
186
self.assertEqual(phrases[0].description, "abbr2")
187
self.assertEqual(phrases[1].description, "abbr1")
189
def testNoneMode(self):
190
phrase = Phrase("Test Phrase", "Testing")
191
folder = PhraseFolder("Folder")
192
folder.set_abbreviation("asdf")
193
folder.set_modes([PhraseMode.ABBREVIATION])
194
folder.add_phrase(phrase)
195
result = phrase.build_phrase("asdf ")
197
self.assertEqual(result.backspaces, 5)
198
self.assertEqual(result.string, "Testing")
199
self.assertEqual(phrase.calculate_input("asdf "), 5)
200
self.assertEqual(phrase.should_prompt("asdf "), False)
202
def testWindowName(self):
203
phrase = Phrase("Some abbr", "Some abbr")
204
phrase.set_window_titles(".*Eclipse.*")
205
phrase.set_abbreviation("sdf")
206
phrase.set_modes([PhraseMode.ABBREVIATION])
207
self.defaultFolder.add_phrase(phrase)
208
self.assertEqual(phrase.check_input("sdf ", "blah - Eclipse Platform"), True)
211
class PredictivePhraseTest(unittest.TestCase):
214
self.phrase = Phrase("blah", "This is a test phrase")
215
self.phrase.set_modes([PhraseMode.PREDICTIVE])
216
folder = PhraseFolder("Folder")
217
folder.add_phrase(self.phrase)
219
def testPredict(self):
220
self.assertEqual(self.phrase.check_input("This ", ""), True)
221
self.assertEqual(self.phrase.check_input("This", ""), False)
222
self.assertEqual(self.phrase.check_input("This i", ""), False)
223
self.assertEqual(self.phrase.check_input("I don't have a problem. This ", ""), True)
225
def testBuildPhrase(self):
226
result = self.phrase.build_phrase("This ")
227
self.assertEqual(result.backspaces, 0)
228
self.assertEqual(result.string, "is a test phrase")
230
def testCalcInput(self):
231
self.assertEqual(self.phrase.calculate_input("This "), 5)
233
def testShouldPrompt(self):
234
self.assertEqual(self.phrase.should_prompt("This "), True)
236
class HotkeyPhrasetest(unittest.TestCase):
239
self.phrase = Phrase("blah", "This is a test phrase")
240
self.phrase.set_modes([PhraseMode.HOTKEY])
241
self.phrase.set_hotkey(["A", "B"], "n")
242
folder = PhraseFolder("Folder")
243
folder.add_phrase(self.phrase)
245
def testHotkey(self):
246
result = self.phrase.check_hotkey(["A", "B"], "n", "")
247
self.assertEqual(result, True)
249
result = self.phrase.check_hotkey(["B"], "n", "")
250
self.assertEqual(result, False)
252
result = self.phrase.check_hotkey(["A", "B"], "a", "")
253
self.assertEqual(result, False)
255
def testBuildPhrase(self):
256
result = self.phrase.build_phrase("")
257
self.assertEqual(result.string, "This is a test phrase")
259
def testCalcInput(self):
260
self.assertEqual(self.phrase.calculate_input(''), 3)
262
class PhraseFolderTest(unittest.TestCase):
265
self.folder = PhraseFolder("Folder")
266
self.folder.set_abbreviation("sdf")
267
self.folder.set_modes([PhraseMode.ABBREVIATION])
269
def testCheckInput(self):
270
self.assertEqual(self.folder.check_input("sdf ", ""), True)
272
class E2ETest(unittest.TestCase):
275
self.topFolder = PhraseFolder("Top Folder")
276
self.topFolder.set_abbreviation("top1")
277
self.topFolder.set_modes([PhraseMode.ABBREVIATION])
279
self.bottomFolder = PhraseFolder("Bottom Folder")
280
self.bottomFolder.set_abbreviation("bottom1")
281
self.bottomFolder.set_modes([PhraseMode.ABBREVIATION])
282
self.topFolder.add_folder(self.bottomFolder)
284
self.phrase = Phrase("blah", "The Phrase")
285
self.phrase.set_abbreviation("asdf")
286
self.phrase.set_hotkey(["A"], "n")
287
self.phrase.set_modes([PhraseMode.ABBREVIATION, PhraseMode.HOTKEY, PhraseMode.PREDICTIVE])
288
self.bottomFolder.add_phrase(self.phrase)
290
def testCheckInput(self):
291
self.assertEqual(self.topFolder.check_input("top1 ", ""), True)
292
self.assertEqual(self.bottomFolder.check_input("bottom1 ", ""), True)
293
self.assertEqual(self.phrase.check_input("asdf ", ""), True)
294
self.assertEqual(self.phrase.check_input("The P", ""), True)
295
self.assertEqual(self.phrase.check_hotkey(["A"], "n", ""), True)
297
def testBuildPhraseDirect(self):
298
result = self.phrase.build_phrase("asdf ")
299
self.assertEqual(result.string, "The Phrase ")
300
self.assertEqual(result.backspaces, 5)
302
result = self.phrase.build_phrase("The P")
303
self.assertEqual(result.string, "hrase")
304
self.assertEqual(result.backspaces, 0)
306
result = self.phrase.build_phrase("")
307
self.assertEqual(result.string, "The Phrase")
308
self.assertEqual(result.backspaces, 0)
310
def testBackspacesIndirect(self):
311
result = self.phrase.build_phrase("top1 ")
312
self.assertEqual(result.backspaces, 5)
314
result = self.phrase.build_phrase("bottom1 ")
315
self.assertEqual(result.backspaces, 8)