def test_dictionary(): d = StenoDictionary() assert len(d) == 0 assert not d d['S'] = 'a' assert 'S' in d assert len(d) == 1 assert d d['S/S/S/S'] = 'b' assert len(d) == 2 d['S/S'] = 'c' assert d['S/S'] == 'c' assert len(d) == 3 del d['S/S/S/S'] assert len(d) == 2 del d['S'] assert 'S' not in d assert len(d) == 1 assert d.reverse_lookup('c') == ['S/S'] assert d.casereverse_lookup('c') == ['c'] d.clear() assert len(d) == 0 assert not d assert d.reverse_lookup('c') == [] assert d.casereverse_lookup('c') == [] d['S/S'] = 'c'
def test_dictionary(): notifications = [] def listener(longest_key): notifications.append(longest_key) d = StenoDictionary() assert d.longest_key == 0 assert len(d) == 0 assert not d d.add_longest_key_listener(listener) d[('S', )] = 'a' assert d.longest_key == 1 assert ('S', ) in d assert notifications == [1] assert len(d) == 1 assert d d[('S', 'S', 'S', 'S')] = 'b' assert d.longest_key == 4 assert notifications == [1, 4] assert len(d) == 2 d[('S', 'S')] = 'c' assert d.longest_key == 4 assert d[('S', 'S')] == 'c' assert notifications == [1, 4] assert len(d) == 3 del d[('S', 'S', 'S', 'S')] assert d.longest_key == 2 assert notifications == [1, 4, 2] assert len(d) == 2 del d[('S', )] assert d.longest_key == 2 assert ('S', ) not in d assert notifications == [1, 4, 2] assert len(d) == 1 assert d.reverse_lookup('c') == [('S', 'S')] assert d.casereverse_lookup('c') == ['c'] d.clear() assert d.longest_key == 0 assert notifications == [1, 4, 2, 0] assert len(d) == 0 assert not d assert d.reverse_lookup('c') == [] assert d.casereverse_lookup('c') == [] d.remove_longest_key_listener(listener) d[('S', 'S')] = 'c' assert d.longest_key == 2 assert notifications == [1, 4, 2, 0]
def test_dictionary_update(): d = StenoDictionary() d.update([(('S-G', ), 'something'), (('SPH-G', ), 'something'), (('TPHOG', ), 'nothing')]) assert d[('S-G', )] == 'something' assert d[('SPH-G', )] == 'something' assert d[('TPHOG', )] == 'nothing' assert d.reverse_lookup('something') == [('S-G', ), ('SPH-G', )] assert d.reverse_lookup('nothing') == [('TPHOG', )] d.update([(('S-G', ), 'string')]) assert d[('S-G', )] == 'string' assert d.reverse_lookup('something') == [('SPH-G', )] assert d.reverse_lookup('string') == [('S-G', )] d.clear() d.update([(('EFG', ), 'everything'), (('EFG', ), 'everything???')]) assert d[('EFG', )] == 'everything???' assert d.reverse_lookup('everything') == [] assert d.reverse_lookup('everything???') == [('EFG', )]
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]) self.assertEqual(d.reverse_lookup('c'), [('S', 'S')]) self.assertEqual(d.casereverse_lookup('c'), ['c']) d.clear() self.assertEqual(d.longest_key, 0) self.assertEqual(notifications, [1, 4, 2, 0]) self.assertEqual(d.reverse_lookup('c'), []) self.assertEqual(d.casereverse_lookup('c'), []) d.remove_longest_key_listener(listener) d[('S', 'S')] = 'c' self.assertEqual(d.longest_key, 2) self.assertEqual(notifications, [1, 4, 2, 0])
def test_dictionary(): notifications = [] def listener(longest_key): notifications.append(longest_key) d = StenoDictionary() assert d.longest_key == 0 d.add_longest_key_listener(listener) d[('S', )] = 'a' assert d.longest_key == 1 assert notifications == [1] d[('S', 'S', 'S', 'S')] = 'b' assert d.longest_key == 4 assert notifications == [1, 4] d[('S', 'S')] = 'c' assert d.longest_key == 4 assert d[('S', 'S')] == 'c' assert notifications == [1, 4] del d[('S', 'S', 'S', 'S')] assert d.longest_key == 2 assert notifications == [1, 4, 2] del d[('S', )] assert d.longest_key == 2 assert notifications == [1, 4, 2] assert d.reverse_lookup('c') == {('S', 'S')} assert d.casereverse_lookup('c') == {'c'} d.clear() assert d.longest_key == 0 assert notifications == [1, 4, 2, 0] assert d.reverse_lookup('c') == set() assert d.casereverse_lookup('c') == set() d.remove_longest_key_listener(listener) d[('S', 'S')] = 'c' assert d.longest_key == 2 assert notifications == [1, 4, 2, 0]
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]) self.assertEqual(d.reverse_lookup('c'), [('S', 'S')]) self.assertEqual(d.casereverse_lookup('c'), ['c']) d.clear() self.assertEqual(d.longest_key, 0) self.assertEqual(notifications, [1, 4, 2, 0]) self.assertEqual(d.reverse_lookup('c'), []) self.assertEqual(d.casereverse_lookup('c'), []) d.remove_longest_key_listener(listener) d[('S', 'S')] = 'c' self.assertEqual(d.longest_key, 2) self.assertEqual(notifications, [1, 4, 2, 0])
def test_dictionary(): notifications = [] def listener(longest_key): notifications.append(longest_key) d = StenoDictionary() assert d.longest_key == 0 d.add_longest_key_listener(listener) d[('S',)] = 'a' assert d.longest_key == 1 assert notifications == [1] d[('S', 'S', 'S', 'S')] = 'b' assert d.longest_key == 4 assert notifications == [1, 4] d[('S', 'S')] = 'c' assert d.longest_key == 4 assert d[('S', 'S')] == 'c' assert notifications == [1, 4] del d[('S', 'S', 'S', 'S')] assert d.longest_key == 2 assert notifications == [1, 4, 2] del d[('S',)] assert d.longest_key == 2 assert notifications == [1, 4, 2] assert d.reverse_lookup('c') == [('S', 'S')] assert d.casereverse_lookup('c') == ['c'] d.clear() assert d.longest_key == 0 assert notifications == [1, 4, 2, 0] assert d.reverse_lookup('c') == [] assert d.casereverse_lookup('c') == [] d.remove_longest_key_listener(listener) d[('S', 'S')] = 'c' assert d.longest_key == 2 assert notifications == [1, 4, 2, 0]
def test_translator(): # 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: 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([d]) t.set_dictionary(dc) t.add_listener(out.write) t.translate(stroke('S')) assert out.get() == 'S' t.translate(stroke('T')) assert out.get() == 'S T' t.translate(stroke('*')) assert out.get() == 'S' t.translate(stroke('*')) # Undo buffer ran out assert out.get() == 'S ' + BACK_STRING t.set_min_undo_length(3) out.clear() t.translate(stroke('S')) assert out.get() == 'S' t.translate(stroke('T')) assert out.get() == 'S T' t.translate(stroke('*')) assert out.get() == 'S' t.translate(stroke('*')) assert out.get() == '' out.clear() d[('S',)] = 't1' d[('T',)] = 't2' d[('S', 'T')] = 't3' t.translate(stroke('S')) assert out.get() == 't1' t.translate(stroke('T')) assert out.get() == 't3' t.translate(stroke('T')) assert out.get() == 't3 t2' t.translate(stroke('S')) assert out.get() == 't3 t2 t1' t.translate(stroke('*')) assert out.get() == 't3 t2' t.translate(stroke('*')) assert out.get() == 't3' t.translate(stroke('*')) assert out.get() == 't1' t.translate(stroke('*')) assert out.get() == '' t.translate(stroke('S')) assert out.get() == 't1' t.translate(stroke('T')) assert out.get() == 't3' t.translate(stroke('T')) assert out.get() == 't3 t2' d[('S', 'T', 'T')] = 't4' d[('S', 'T', 'T', 'S')] = 't5' t.translate(stroke('S')) assert out.get() == 't5' t.translate(stroke('*')) assert out.get() == 't3 t2' t.translate(stroke('*')) assert out.get() == 't3' t.translate(stroke('T')) assert out.get() == 't4' t.translate(stroke('S')) assert out.get() == 't5' t.translate(stroke('S')) assert out.get() == 't5 t1' t.translate(stroke('*')) assert out.get() == 't5' t.translate(stroke('*')) assert out.get() == 't4' t.translate(stroke('*')) assert out.get() == 't3' t.translate(stroke('*')) assert out.get() == 't1' t.translate(stroke('*')) assert 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) # Not enough undo to clear output. assert out.get() == 'S ' + BACK_STRING out.clear() t.remove_listener(out.write) t.translate(stroke('S')) assert out.get() == ''
def test_translator(): # 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: 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([d]) t.set_dictionary(dc) t.add_listener(out.write) t.translate(stroke('S')) assert out.get() == 'S' t.translate(stroke('T')) assert out.get() == 'S T' t.translate(stroke('*')) assert out.get() == 'S' t.translate(stroke('*')) # Undo buffer ran out assert out.get() == 'S ' + BACK_STRING t.set_min_undo_length(3) out.clear() t.translate(stroke('S')) assert out.get() == 'S' t.translate(stroke('T')) assert out.get() == 'S T' t.translate(stroke('*')) assert out.get() == 'S' t.translate(stroke('*')) assert out.get() == '' out.clear() d[('S', )] = 't1' d[('T', )] = 't2' d[('S', 'T')] = 't3' t.translate(stroke('S')) assert out.get() == 't1' t.translate(stroke('T')) assert out.get() == 't3' t.translate(stroke('T')) assert out.get() == 't3 t2' t.translate(stroke('S')) assert out.get() == 't3 t2 t1' t.translate(stroke('*')) assert out.get() == 't3 t2' t.translate(stroke('*')) assert out.get() == 't3' t.translate(stroke('*')) assert out.get() == 't1' t.translate(stroke('*')) assert out.get() == '' t.translate(stroke('S')) assert out.get() == 't1' t.translate(stroke('T')) assert out.get() == 't3' t.translate(stroke('T')) assert out.get() == 't3 t2' d[('S', 'T', 'T')] = 't4' d[('S', 'T', 'T', 'S')] = 't5' t.translate(stroke('S')) assert out.get() == 't5' t.translate(stroke('*')) assert out.get() == 't3 t2' t.translate(stroke('*')) assert out.get() == 't3' t.translate(stroke('T')) assert out.get() == 't4' t.translate(stroke('S')) assert out.get() == 't5' t.translate(stroke('S')) assert out.get() == 't5 t1' t.translate(stroke('*')) assert out.get() == 't5' t.translate(stroke('*')) assert out.get() == 't4' t.translate(stroke('*')) assert out.get() == 't3' t.translate(stroke('*')) assert out.get() == 't1' t.translate(stroke('*')) assert 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) # Not enough undo to clear output. assert out.get() == 'S ' + BACK_STRING out.clear() t.remove_listener(out.write) t.translate(stroke('S')) assert out.get() == ''