def test_changing_state(self): output = [] def listener(undo, do, prev): output.append((undo, do, prev)) d = StenoDictionary() d[('S', 'P')] = 'hi' dc = StenoDictionaryCollection() dc.set_dicts([d]) t = Translator() t.set_dictionary(dc) t.translate(stroke('T')) t.translate(stroke('S')) s = copy.deepcopy(t.get_state()) t.add_listener(listener) expected = [([Translation([stroke('S')], None)], [Translation([stroke('S'), stroke('P')], 'hi')], Translation([stroke('T')], None))] t.translate(stroke('P')) self.assertEqual(output, expected) del output[:] t.set_state(s) t.translate(stroke('P')) self.assertEqual(output, expected) del output[:] t.clear_state() t.translate(stroke('P')) self.assertEqual(output, [([], [Translation([stroke('P')], None)], None)]) del output[:] t.set_state(s) t.translate(stroke('P')) self.assertEqual(output, [([], [Translation([stroke('P')], None)], Translation([stroke('S'), stroke('P')], 'hi'))])
def test_listeners(self): output1 = [] def listener1(undo, do, prev): output1.append((undo, do, prev)) output2 = [] def listener2(undo, do, prev): output2.append((undo, do, prev)) t = Translator() s = Stroke('S') tr = Translation([s], StenoDictionary()) expected_output = [([], [tr], tr)] t.translate(s) t.add_listener(listener1) t.translate(s) self.assertEqual(output1, expected_output) del output1[:] t.add_listener(listener2) t.translate(s) self.assertEqual(output1, expected_output) self.assertEqual(output2, expected_output) del output1[:] del output2[:] t.add_listener(listener2) t.translate(s) self.assertEqual(output1, expected_output) self.assertEqual(output2, expected_output) del output1[:] del output2[:] t.remove_listener(listener1) t.translate(s) self.assertEqual(output1, []) self.assertEqual(output2, expected_output) del output1[:] del output2[:] t.remove_listener(listener2) t.translate(s) self.assertEqual(output1, []) self.assertEqual(output2, [])
def test_listeners(self): output1 = [] def listener1(undo, do, prev): output1.append((undo, do, prev)) output2 = [] def listener2(undo, do, prev): output2.append((undo, do, prev)) t = Translator() s = stroke('S') tr = Translation([s], None) expected_output = [([], [tr], tr)] t.translate(s) t.add_listener(listener1) t.translate(s) self.assertEqual(output1, expected_output) del output1[:] t.add_listener(listener2) t.translate(s) self.assertEqual(output1, expected_output) self.assertEqual(output2, expected_output) del output1[:] del output2[:] t.add_listener(listener2) t.translate(s) self.assertEqual(output1, expected_output) self.assertEqual(output2, expected_output) del output1[:] del output2[:] t.remove_listener(listener1) t.translate(s) self.assertEqual(output1, []) self.assertEqual(output2, expected_output) del output1[:] del output2[:] t.remove_listener(listener2) t.translate(s) self.assertEqual(output1, []) self.assertEqual(output2, [])
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(), '')