def test_dictionary(self): notifications = [] def listener(longest_key): notifications.append(longest_key) d = StenoDictionary() self.assertEqual(d.longest_key, 0) d.add_longest_key_listener(listener) d[('S', )] = 'a' self.assertEqual(d.longest_key, 1) self.assertEqual(notifications, [1]) d[('S', 'S', 'S', 'S')] = 'b' self.assertEqual(d.longest_key, 4) self.assertEqual(notifications, [1, 4]) d[('S', 'S')] = 'c' self.assertEqual(d.longest_key, 4) self.assertEqual(d[('S', 'S')], 'c') self.assertEqual(notifications, [1, 4]) del d[('S', 'S', 'S', 'S')] self.assertEqual(d.longest_key, 2) self.assertEqual(notifications, [1, 4, 2]) del d[('S', )] self.assertEqual(d.longest_key, 2) self.assertEqual(notifications, [1, 4, 2]) d.clear() self.assertEqual(d.longest_key, 0) self.assertEqual(notifications, [1, 4, 2, 0]) d.remove_longest_key_listener(listener) d[('S', 'S')] = 'c' self.assertEqual(d.longest_key, 2) self.assertEqual(notifications, [1, 4, 2, 0]) self.assertEqual(StenoDictionary([('a', 'b')]).items(), [('a', 'b')]) self.assertEqual(StenoDictionary(a='b').items(), [('a', 'b')])
def test_dictionary(self): notifications = [] def listener(longest_key): notifications.append(longest_key) d = StenoDictionary() self.assertEqual(d.longest_key, 0) d.add_longest_key_listener(listener) d[('S',)] = 'a' self.assertEqual(d.longest_key, 1) self.assertEqual(notifications, [1]) d[('S', 'S', 'S', 'S')] = 'b' self.assertEqual(d.longest_key, 4) self.assertEqual(notifications, [1, 4]) d[('S', 'S')] = 'c' self.assertEqual(d.longest_key, 4) self.assertEqual(d[('S', 'S')], 'c') self.assertEqual(notifications, [1, 4]) del d[('S', 'S', 'S', 'S')] self.assertEqual(d.longest_key, 2) self.assertEqual(notifications, [1, 4, 2]) del d[('S',)] self.assertEqual(d.longest_key, 2) self.assertEqual(notifications, [1, 4, 2]) d.clear() self.assertEqual(d.longest_key, 0) self.assertEqual(notifications, [1, 4, 2, 0]) d.remove_longest_key_listener(listener) d[('S', 'S')] = 'c' self.assertEqual(d.longest_key, 2) self.assertEqual(notifications, [1, 4, 2, 0]) self.assertEqual(StenoDictionary([('a', 'b')]).items(), [('a', 'b')]) self.assertEqual(StenoDictionary(a='b').items(), [('a', 'b')])
def test_translator(self): # It's not clear that this test is needed anymore. There are separate # tests for _translate_stroke and test_translate_calls_translate_stroke # makes sure that translate calls it properly. But since I already wrote # this test I'm going to keep it. class Output(object): def __init__(self): self._output = [] def write(self, undo, do, prev): for t in undo: self._output.pop() for t in do: if t.english: self._output.append(t.english) else: self._output.append('/'.join(t.rtfcre)) def get(self): return ' '.join(self._output) def clear(self): del self._output[:] d = StenoDictionary() out = Output() t = Translator() t.set_dictionary(d) t.add_listener(out.write) t.translate(Stroke('S')) self.assertEqual(out.get(), 'S') t.translate(Stroke('T')) self.assertEqual(out.get(), 'S T') t.translate(Stroke('*', True)) self.assertEqual(out.get(), 'S') t.translate(Stroke('*', True)) self.assertEqual(out.get(), 'S') # Undo buffer ran out. t.set_min_undo_length(3) out.clear() t.translate(Stroke('S')) self.assertEqual(out.get(), 'S') t.translate(Stroke('T')) self.assertEqual(out.get(), 'S T') t.translate(Stroke('*', True)) self.assertEqual(out.get(), 'S') t.translate(Stroke('*', True)) self.assertEqual(out.get(), '') t.translate(Stroke('*', True)) self.assertEqual(out.get(), '') # Undo buffer ran out. out.clear() d[('S', )] = 't1' d[('T', )] = 't2' d[('S', 'T')] = 't3' t.translate(Stroke('S')) self.assertEqual(out.get(), 't1') t.translate(Stroke('T')) self.assertEqual(out.get(), 't3') t.translate(Stroke('T')) self.assertEqual(out.get(), 't3 t2') t.translate(Stroke('S')) self.assertEqual(out.get(), 't3 t2 t1') t.translate(Stroke('*', True)) self.assertEqual(out.get(), 't3 t2') t.translate(Stroke('*', True)) self.assertEqual(out.get(), 't3') t.translate(Stroke('*', True)) self.assertEqual(out.get(), 't1') t.translate(Stroke('*', True)) self.assertEqual(out.get(), '') t.translate(Stroke('S')) self.assertEqual(out.get(), 't1') t.translate(Stroke('T')) self.assertEqual(out.get(), 't3') t.translate(Stroke('T')) self.assertEqual(out.get(), 't3 t2') d[('S', 'T', 'T')] = 't4' d[('S', 'T', 'T', 'S')] = 't5' t.translate(Stroke('S')) self.assertEqual(out.get(), 't5') t.translate(Stroke('*', True)) self.assertEqual(out.get(), 't3 t2') t.translate(Stroke('*', True)) self.assertEqual(out.get(), 't3') t.translate(Stroke('T')) self.assertEqual(out.get(), 't4') t.translate(Stroke('S')) self.assertEqual(out.get(), 't5') t.translate(Stroke('S')) self.assertEqual(out.get(), 't5 t1') t.translate(Stroke('*', True)) self.assertEqual(out.get(), 't5') t.translate(Stroke('*', True)) self.assertEqual(out.get(), 't4') t.translate(Stroke('*', True)) self.assertEqual(out.get(), 't3') t.translate(Stroke('*', True)) self.assertEqual(out.get(), 't1') t.translate(Stroke('*', True)) self.assertEqual(out.get(), '') d.clear() t.translate(Stroke('S')) t.translate(Stroke('S')) t.translate(Stroke('S')) t.translate(Stroke('S')) t.translate(Stroke('*', True)) t.translate(Stroke('*', True)) t.translate(Stroke('*', True)) t.translate(Stroke('*', True)) self.assertEqual(out.get(), 'S') # Not enough undo to clear output. out.clear() t.remove_listener(out.write) t.translate(Stroke('S')) self.assertEqual(out.get(), '')
def test_translator(self): # It's not clear that this test is needed anymore. There are separate # tests for _translate_stroke and test_translate_calls_translate_stroke # makes sure that translate calls it properly. But since I already wrote # this test I'm going to keep it. class Output(object): def __init__(self): self._output = [] def write(self, undo, do, prev): for t in undo: self._output.pop() for t in do: if t.english: self._output.append(t.english) else: self._output.append('/'.join(t.rtfcre)) def get(self): return ' '.join(self._output) def clear(self): del self._output[:] d = StenoDictionary() out = Output() t = Translator() dc = StenoDictionaryCollection() dc.set_dicts([d]) t.set_dictionary(dc) t.add_listener(out.write) t.translate(stroke('S')) self.assertEqual(out.get(), 'S') t.translate(stroke('T')) self.assertEqual(out.get(), 'S T') t.translate(stroke('*')) self.assertEqual(out.get(), 'S') t.translate(stroke('*')) self.assertEqual(out.get(), 'S') # Undo buffer ran out. t.set_min_undo_length(3) out.clear() t.translate(stroke('S')) self.assertEqual(out.get(), 'S') t.translate(stroke('T')) self.assertEqual(out.get(), 'S T') t.translate(stroke('*')) self.assertEqual(out.get(), 'S') t.translate(stroke('*')) self.assertEqual(out.get(), '') t.translate(stroke('*')) self.assertEqual(out.get(), '') # Undo buffer ran out. out.clear() d[('S',)] = 't1' d[('T',)] = 't2' d[('S', 'T')] = 't3' t.translate(stroke('S')) self.assertEqual(out.get(), 't1') t.translate(stroke('T')) self.assertEqual(out.get(), 't3') t.translate(stroke('T')) self.assertEqual(out.get(), 't3 t2') t.translate(stroke('S')) self.assertEqual(out.get(), 't3 t2 t1') t.translate(stroke('*')) self.assertEqual(out.get(), 't3 t2') t.translate(stroke('*')) self.assertEqual(out.get(), 't3') t.translate(stroke('*')) self.assertEqual(out.get(), 't1') t.translate(stroke('*')) self.assertEqual(out.get(), '') t.translate(stroke('S')) self.assertEqual(out.get(), 't1') t.translate(stroke('T')) self.assertEqual(out.get(), 't3') t.translate(stroke('T')) self.assertEqual(out.get(), 't3 t2') d[('S', 'T', 'T')] = 't4' d[('S', 'T', 'T', 'S')] = 't5' t.translate(stroke('S')) self.assertEqual(out.get(), 't5') t.translate(stroke('*')) self.assertEqual(out.get(), 't3 t2') t.translate(stroke('*')) self.assertEqual(out.get(), 't3') t.translate(stroke('T')) self.assertEqual(out.get(), 't4') t.translate(stroke('S')) self.assertEqual(out.get(), 't5') t.translate(stroke('S')) self.assertEqual(out.get(), 't5 t1') t.translate(stroke('*')) self.assertEqual(out.get(), 't5') t.translate(stroke('*')) self.assertEqual(out.get(), 't4') t.translate(stroke('*')) self.assertEqual(out.get(), 't3') t.translate(stroke('*')) self.assertEqual(out.get(), 't1') t.translate(stroke('*')) self.assertEqual(out.get(), '') d.clear() s = stroke('S') t.translate(s) t.translate(s) t.translate(s) t.translate(s) s = stroke('*') t.translate(s) t.translate(s) t.translate(s) t.translate(s) self.assertEqual(out.get(), 'S') # Not enough undo to clear output. out.clear() t.remove_listener(out.write) t.translate(stroke('S')) self.assertEqual(out.get(), '')