1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 | Lib/idlelib/idle_test/test_idlehistory.py
import unittest from test.test_support import requires import Tkinter as tk from Tkinter import Text as tkText from idlelib.idle_test.mock_tk import Text as mkText from idlelib.IdleHistory import History from idlelib.configHandler import idleConf line1 = 'a = 7' line2 = 'b = a' class StoreTest(unittest.TestCase): '''Tests History.__init__ and History.store with mock Text''' @classmethod def setUpClass(cls): cls.text = mkText() cls.history = History(cls.text) def tearDown(self): self.text.delete('1.0', 'end') self.history.history = [] def test_init(self): self.assertIs(self.history.text, self.text) self.assertEqual(self.history.history, []) self.assertIsNone(self.history.prefix) self.assertIsNone(self.history.pointer) self.assertEqual(self.history.cyclic, idleConf.GetOption("main", "History", "cyclic", 1, "bool")) def test_store_short(self): self.history.store('a') self.assertEqual(self.history.history, []) self.history.store(' a ') self.assertEqual(self.history.history, []) def test_store_dup(self): self.history.store(line1) self.assertEqual(self.history.history, [line1]) self.history.store(line2) self.assertEqual(self.history.history, [line1, line2]) self.history.store(line1) self.assertEqual(self.history.history, [line2, line1]) def test_store_reset(self): self.history.prefix = line1 self.history.pointer = 0 self.history.store(line2) self.assertIsNone(self.history.prefix) self.assertIsNone(self.history.pointer) class TextWrapper: def __init__(self, master): self.text = tkText(master=master) self._bell = False def __getattr__(self, name): return getattr(self.text, name) def bell(self): self._bell = True class FetchTest(unittest.TestCase): '''Test History.fetch with wrapped tk.Text. ''' @classmethod def setUpClass(cls): requires('gui') cls.root = tk.Tk() def setUp(self): self.text = text = TextWrapper(self.root) text.insert('1.0', ">>> ") text.mark_set('iomark', '1.4') text.mark_gravity('iomark', 'left') self.history = History(text) self.history.history = [line1, line2] @classmethod def tearDownClass(cls): cls.root.destroy() del cls.root def fetch_test(self, reverse, line, prefix, index, bell=False): # Perform one fetch as invoked by Alt-N or Alt-P # Test the result. The line test is the most important. # The last two are diagnostic of fetch internals. History = self.history History.fetch(reverse) Equal = self.assertEqual Equal(self.text.get('iomark', 'end-1c'), line) Equal(self.text._bell, bell) if bell: self.text._bell = False Equal(History.prefix, prefix) Equal(History.pointer, index) Equal(self.text.compare("insert", '==', "end-1c"), 1) def test_fetch_prev_cyclic(self): prefix = '' test = self.fetch_test test(True, line2, prefix, 1) test(True, line1, prefix, 0) test(True, prefix, None, None, bell=True) def test_fetch_next_cyclic(self): prefix = '' test = self.fetch_test test(False, line1, prefix, 0) test(False, line2, prefix, 1) test(False, prefix, None, None, bell=True) # Prefix 'a' tests skip line2, which starts with 'b' def test_fetch_prev_prefix(self): prefix = 'a' self.text.insert('iomark', prefix) self.fetch_test(True, line1, prefix, 0) self.fetch_test(True, prefix, None, None, bell=True) def test_fetch_next_prefix(self): prefix = 'a' self.text.insert('iomark', prefix) self.fetch_test(False, line1, prefix, 0) self.fetch_test(False, prefix, None, None, bell=True) def test_fetch_prev_noncyclic(self): prefix = '' self.history.cyclic = False test = self.fetch_test test(True, line2, prefix, 1) test(True, line1, prefix, 0) test(True, line1, prefix, 0, bell=True) def test_fetch_next_noncyclic(self): prefix = '' self.history.cyclic = False test = self.fetch_test test(False, prefix, None, None, bell=True) test(True, line2, prefix, 1) test(False, prefix, None, None, bell=True) test(False, prefix, None, None, bell=True) def test_fetch_cursor_move(self): # Move cursor after fetch self.history.fetch(reverse=True) # initialization self.text.mark_set('insert', 'iomark') self.fetch_test(True, line2, None, None, bell=True) def test_fetch_edit(self): # Edit after fetch self.history.fetch(reverse=True) # initialization self.text.delete('iomark', 'insert', ) self.text.insert('iomark', 'a =') self.fetch_test(True, line1, 'a =', 0) # prefix is reset def test_history_prev_next(self): # Minimally test functions bound to events self.history.history_prev('dummy event') self.assertEqual(self.history.pointer, 1) self.history.history_next('dummy event') self.assertEqual(self.history.pointer, None) if __name__ == '__main__': unittest.main(verbosity=2, exit=2) |