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() cls.root.withdraw() 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)
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
README.txt | File | 5.36 KB | 0644 |
|
__init__.py | File | 650 B | 0644 |
|
__init__.pyc | File | 941 B | 0644 |
|
__init__.pyo | File | 941 B | 0644 |
|
htest.py | File | 13.46 KB | 0644 |
|
htest.pyc | File | 12.36 KB | 0644 |
|
htest.pyo | File | 12.36 KB | 0644 |
|
mock_idle.py | File | 1.56 KB | 0644 |
|
mock_idle.pyc | File | 2.94 KB | 0644 |
|
mock_idle.pyo | File | 2.94 KB | 0644 |
|
mock_tk.py | File | 11.3 KB | 0644 |
|
mock_tk.pyc | File | 12.42 KB | 0644 |
|
mock_tk.pyo | File | 12.42 KB | 0644 |
|
test_autocomplete.py | File | 4.81 KB | 0644 |
|
test_autocomplete.pyc | File | 5.98 KB | 0644 |
|
test_autocomplete.pyo | File | 5.98 KB | 0644 |
|
test_autoexpand.py | File | 4.03 KB | 0644 |
|
test_autoexpand.pyc | File | 4.85 KB | 0644 |
|
test_autoexpand.pyo | File | 4.85 KB | 0644 |
|
test_calltips.py | File | 6.97 KB | 0644 |
|
test_calltips.pyc | File | 12.47 KB | 0644 |
|
test_calltips.pyo | File | 12.47 KB | 0644 |
|
test_config_name.py | File | 2.41 KB | 0644 |
|
test_config_name.pyc | File | 4.08 KB | 0644 |
|
test_config_name.pyo | File | 4.08 KB | 0644 |
|
test_configdialog.py | File | 782 B | 0644 |
|
test_configdialog.pyc | File | 1.68 KB | 0644 |
|
test_configdialog.pyo | File | 1.68 KB | 0644 |
|
test_delegator.py | File | 1.26 KB | 0644 |
|
test_delegator.pyc | File | 1.33 KB | 0644 |
|
test_delegator.pyo | File | 1.33 KB | 0644 |
|
test_editmenu.py | File | 3.09 KB | 0644 |
|
test_editmenu.pyc | File | 4.46 KB | 0644 |
|
test_editmenu.pyo | File | 4.46 KB | 0644 |
|
test_formatparagraph.py | File | 14.01 KB | 0644 |
|
test_formatparagraph.pyc | File | 14.36 KB | 0644 |
|
test_formatparagraph.pyo | File | 14.36 KB | 0644 |
|
test_grep.py | File | 2.7 KB | 0644 |
|
test_grep.pyc | File | 3.81 KB | 0644 |
|
test_grep.pyo | File | 3.81 KB | 0644 |
|
test_helpabout.py | File | 1.57 KB | 0644 |
|
test_helpabout.pyc | File | 2.38 KB | 0644 |
|
test_helpabout.pyo | File | 2.38 KB | 0644 |
|
test_hyperparser.py | File | 5.55 KB | 0644 |
|
test_hyperparser.pyc | File | 6.78 KB | 0644 |
|
test_hyperparser.pyo | File | 6.78 KB | 0644 |
|
test_idlehistory.py | File | 5.37 KB | 0644 |
|
test_idlehistory.pyc | File | 8.28 KB | 0644 |
|
test_idlehistory.pyo | File | 8.28 KB | 0644 |
|
test_io.py | File | 9.28 KB | 0644 |
|
test_io.pyc | File | 11.67 KB | 0644 |
|
test_io.pyo | File | 11.67 KB | 0644 |
|
test_parenmatch.py | File | 3.73 KB | 0644 |
|
test_parenmatch.pyc | File | 5.53 KB | 0644 |
|
test_parenmatch.pyo | File | 5.53 KB | 0644 |
|
test_pathbrowser.py | File | 940 B | 0644 |
|
test_pathbrowser.pyc | File | 1.5 KB | 0644 |
|
test_pathbrowser.pyo | File | 1.5 KB | 0644 |
|
test_rstrip.py | File | 1.58 KB | 0644 |
|
test_rstrip.pyc | File | 1.78 KB | 0644 |
|
test_rstrip.pyo | File | 1.78 KB | 0644 |
|
test_searchdialogbase.py | File | 5.73 KB | 0644 |
|
test_searchdialogbase.pyc | File | 6.87 KB | 0644 |
|
test_searchdialogbase.pyo | File | 6.87 KB | 0644 |
|
test_searchengine.py | File | 11.22 KB | 0644 |
|
test_searchengine.pyc | File | 12.81 KB | 0644 |
|
test_searchengine.pyo | File | 12.81 KB | 0644 |
|
test_text.py | File | 6.59 KB | 0644 |
|
test_text.pyc | File | 8.2 KB | 0644 |
|
test_text.pyo | File | 8.2 KB | 0644 |
|
test_textview.py | File | 2.74 KB | 0644 |
|
test_textview.pyc | File | 4.6 KB | 0644 |
|
test_textview.pyo | File | 4.6 KB | 0644 |
|
test_warning.py | File | 2.69 KB | 0644 |
|
test_warning.pyc | File | 3.31 KB | 0644 |
|
test_warning.pyo | File | 3.31 KB | 0644 |
|
test_widgetredir.py | File | 4.08 KB | 0644 |
|
test_widgetredir.pyc | File | 6.49 KB | 0644 |
|
test_widgetredir.pyo | File | 6.49 KB | 0644 |
|