| 
									
										
										
										
											2018-06-19 19:12:52 -04:00
										 |  |  | "Test searchbase, coverage 98%." | 
					
						
							|  |  |  | # The only thing not covered is inconsequential -- | 
					
						
							|  |  |  | # testing skipping of suite when self.needwrapbutton is false. | 
					
						
							| 
									
										
										
										
											2014-06-30 20:00:03 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | import unittest | 
					
						
							|  |  |  | from test.support import requires | 
					
						
							| 
									
										
										
										
											2019-06-07 08:54:40 +03:00
										 |  |  | from tkinter import Text, Tk, Toplevel | 
					
						
							| 
									
										
										
										
											2019-01-02 22:04:06 -05:00
										 |  |  | from tkinter.ttk import Frame | 
					
						
							| 
									
										
										
										
											2016-05-28 13:22:31 -04:00
										 |  |  | from idlelib import searchengine as se | 
					
						
							|  |  |  | from idlelib import searchbase as sdb | 
					
						
							| 
									
										
										
										
											2014-06-30 20:00:03 -04:00
										 |  |  | from idlelib.idle_test.mock_idle import Func | 
					
						
							| 
									
										
										
										
											2015-05-15 23:55:21 -04:00
										 |  |  | ## from idlelib.idle_test.mock_tk import Var | 
					
						
							| 
									
										
										
										
											2014-06-30 20:00:03 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-15 23:55:21 -04:00
										 |  |  | # The ## imports above & following could help make some tests gui-free. | 
					
						
							| 
									
										
										
										
											2014-06-30 20:00:03 -04:00
										 |  |  | # However, they currently make radiobutton tests fail. | 
					
						
							|  |  |  | ##def setUpModule(): | 
					
						
							|  |  |  | ##    # Replace tk objects used to initialize se.SearchEngine. | 
					
						
							|  |  |  | ##    se.BooleanVar = Var | 
					
						
							|  |  |  | ##    se.StringVar = Var | 
					
						
							|  |  |  | ## | 
					
						
							|  |  |  | ##def tearDownModule(): | 
					
						
							|  |  |  | ##    se.BooleanVar = BooleanVar | 
					
						
							|  |  |  | ##    se.StringVar = StringVar | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-19 19:12:52 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-30 20:00:03 -04:00
										 |  |  | class SearchDialogBaseTest(unittest.TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def setUpClass(cls): | 
					
						
							|  |  |  |         requires('gui') | 
					
						
							|  |  |  |         cls.root = Tk() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def tearDownClass(cls): | 
					
						
							| 
									
										
										
										
											2019-05-31 04:26:35 -04:00
										 |  |  |         cls.root.update_idletasks() | 
					
						
							| 
									
										
										
										
											2014-06-30 20:00:03 -04:00
										 |  |  |         cls.root.destroy() | 
					
						
							|  |  |  |         del cls.root | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def setUp(self): | 
					
						
							|  |  |  |         self.engine = se.SearchEngine(self.root)  # None also seems to work | 
					
						
							|  |  |  |         self.dialog = sdb.SearchDialogBase(root=self.root, engine=self.engine) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def tearDown(self): | 
					
						
							|  |  |  |         self.dialog.close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_open_and_close(self): | 
					
						
							|  |  |  |         # open calls create_widgets, which needs default_command | 
					
						
							|  |  |  |         self.dialog.default_command = None | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-07 08:54:40 +03:00
										 |  |  |         toplevel = Toplevel(self.root) | 
					
						
							|  |  |  |         text = Text(toplevel) | 
					
						
							|  |  |  |         self.dialog.open(text) | 
					
						
							| 
									
										
										
										
											2014-06-30 20:00:03 -04:00
										 |  |  |         self.assertEqual(self.dialog.top.state(), 'normal') | 
					
						
							|  |  |  |         self.dialog.close() | 
					
						
							|  |  |  |         self.assertEqual(self.dialog.top.state(), 'withdrawn') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-07 08:54:40 +03:00
										 |  |  |         self.dialog.open(text, searchphrase="hello") | 
					
						
							| 
									
										
										
										
											2014-06-30 20:00:03 -04:00
										 |  |  |         self.assertEqual(self.dialog.ent.get(), 'hello') | 
					
						
							| 
									
										
										
										
											2019-06-16 16:33:56 -04:00
										 |  |  |         toplevel.update_idletasks() | 
					
						
							|  |  |  |         toplevel.destroy() | 
					
						
							| 
									
										
										
										
											2014-06-30 20:00:03 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_create_widgets(self): | 
					
						
							|  |  |  |         self.dialog.create_entries = Func() | 
					
						
							|  |  |  |         self.dialog.create_option_buttons = Func() | 
					
						
							|  |  |  |         self.dialog.create_other_buttons = Func() | 
					
						
							|  |  |  |         self.dialog.create_command_buttons = Func() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.dialog.default_command = None | 
					
						
							|  |  |  |         self.dialog.create_widgets() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.assertTrue(self.dialog.create_entries.called) | 
					
						
							|  |  |  |         self.assertTrue(self.dialog.create_option_buttons.called) | 
					
						
							|  |  |  |         self.assertTrue(self.dialog.create_other_buttons.called) | 
					
						
							|  |  |  |         self.assertTrue(self.dialog.create_command_buttons.called) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_make_entry(self): | 
					
						
							|  |  |  |         equal = self.assertEqual | 
					
						
							|  |  |  |         self.dialog.row = 0 | 
					
						
							| 
									
										
										
										
											2020-10-24 20:36:55 -07:00
										 |  |  |         self.dialog.frame = Frame(self.root) | 
					
						
							| 
									
										
										
										
											2014-07-13 17:27:26 -04:00
										 |  |  |         entry, label = self.dialog.make_entry("Test:", 'hello') | 
					
						
							| 
									
										
										
										
											2014-06-30 23:52:20 -04:00
										 |  |  |         equal(label['text'], 'Test:') | 
					
						
							| 
									
										
										
										
											2014-06-30 20:00:03 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |         self.assertIn(entry.get(), 'hello') | 
					
						
							|  |  |  |         egi = entry.grid_info() | 
					
						
							| 
									
										
										
										
											2014-07-11 00:37:14 -04:00
										 |  |  |         equal(int(egi['row']), 0) | 
					
						
							|  |  |  |         equal(int(egi['column']), 1) | 
					
						
							|  |  |  |         equal(int(egi['rowspan']), 1) | 
					
						
							|  |  |  |         equal(int(egi['columnspan']), 1) | 
					
						
							| 
									
										
										
										
											2014-06-30 20:00:03 -04:00
										 |  |  |         equal(self.dialog.row, 1) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_create_entries(self): | 
					
						
							| 
									
										
										
										
											2020-10-24 20:36:55 -07:00
										 |  |  |         self.dialog.frame = Frame(self.root) | 
					
						
							| 
									
										
										
										
											2014-06-30 20:00:03 -04:00
										 |  |  |         self.dialog.row = 0 | 
					
						
							|  |  |  |         self.engine.setpat('hello') | 
					
						
							|  |  |  |         self.dialog.create_entries() | 
					
						
							|  |  |  |         self.assertIn(self.dialog.ent.get(), 'hello') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_make_frame(self): | 
					
						
							|  |  |  |         self.dialog.row = 0 | 
					
						
							| 
									
										
										
										
											2020-10-24 20:36:55 -07:00
										 |  |  |         self.dialog.frame = Frame(self.root) | 
					
						
							| 
									
										
										
										
											2014-06-30 23:52:20 -04:00
										 |  |  |         frame, label = self.dialog.make_frame() | 
					
						
							| 
									
										
										
										
											2014-06-30 20:00:03 -04:00
										 |  |  |         self.assertEqual(label, '') | 
					
						
							| 
									
										
										
										
											2019-01-02 22:04:06 -05:00
										 |  |  |         self.assertEqual(str(type(frame)), "<class 'tkinter.ttk.Frame'>") | 
					
						
							|  |  |  |         # self.assertIsInstance(frame, Frame) fails when test is run by | 
					
						
							|  |  |  |         # test_idle not run from IDLE editor.  See issue 33987 PR. | 
					
						
							| 
									
										
										
										
											2014-06-30 20:00:03 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-30 23:52:20 -04:00
										 |  |  |         frame, label = self.dialog.make_frame('testlabel') | 
					
						
							|  |  |  |         self.assertEqual(label['text'], 'testlabel') | 
					
						
							| 
									
										
										
										
											2014-06-30 20:00:03 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-30 23:52:20 -04:00
										 |  |  |     def btn_test_setup(self, meth): | 
					
						
							| 
									
										
										
										
											2020-10-24 20:36:55 -07:00
										 |  |  |         self.dialog.frame = Frame(self.root) | 
					
						
							| 
									
										
										
										
											2014-06-30 23:52:20 -04:00
										 |  |  |         self.dialog.row = 0 | 
					
						
							|  |  |  |         return meth() | 
					
						
							| 
									
										
										
										
											2014-06-30 20:00:03 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_create_option_buttons(self): | 
					
						
							| 
									
										
										
										
											2014-06-30 23:52:20 -04:00
										 |  |  |         e = self.engine | 
					
						
							|  |  |  |         for state in (0, 1): | 
					
						
							|  |  |  |             for var in (e.revar, e.casevar, e.wordvar, e.wrapvar): | 
					
						
							|  |  |  |                 var.set(state) | 
					
						
							|  |  |  |             frame, options = self.btn_test_setup( | 
					
						
							|  |  |  |                     self.dialog.create_option_buttons) | 
					
						
							|  |  |  |             for spec, button in zip (options, frame.pack_slaves()): | 
					
						
							|  |  |  |                 var, label = spec | 
					
						
							|  |  |  |                 self.assertEqual(button['text'], label) | 
					
						
							|  |  |  |                 self.assertEqual(var.get(), state) | 
					
						
							| 
									
										
										
										
											2014-06-30 20:00:03 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_create_other_buttons(self): | 
					
						
							| 
									
										
										
										
											2014-06-30 23:52:20 -04:00
										 |  |  |         for state in (False, True): | 
					
						
							|  |  |  |             var = self.engine.backvar | 
					
						
							|  |  |  |             var.set(state) | 
					
						
							|  |  |  |             frame, others = self.btn_test_setup( | 
					
						
							|  |  |  |                 self.dialog.create_other_buttons) | 
					
						
							|  |  |  |             buttons = frame.pack_slaves() | 
					
						
							|  |  |  |             for spec, button in zip(others, buttons): | 
					
						
							|  |  |  |                 val, label = spec | 
					
						
							|  |  |  |                 self.assertEqual(button['text'], label) | 
					
						
							|  |  |  |                 if val == state: | 
					
						
							|  |  |  |                     # hit other button, then this one | 
					
						
							|  |  |  |                     # indexes depend on button order | 
					
						
							|  |  |  |                     self.assertEqual(var.get(), state) | 
					
						
							| 
									
										
										
										
											2014-06-30 20:00:03 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_make_button(self): | 
					
						
							| 
									
										
										
										
											2020-10-24 20:36:55 -07:00
										 |  |  |         self.dialog.frame = Frame(self.root) | 
					
						
							|  |  |  |         self.dialog.buttonframe = Frame(self.dialog.frame) | 
					
						
							| 
									
										
										
										
											2014-06-30 20:00:03 -04:00
										 |  |  |         btn = self.dialog.make_button('Test', self.dialog.close) | 
					
						
							| 
									
										
										
										
											2014-06-30 23:52:20 -04:00
										 |  |  |         self.assertEqual(btn['text'], 'Test') | 
					
						
							| 
									
										
										
										
											2014-06-30 20:00:03 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_create_command_buttons(self): | 
					
						
							| 
									
										
										
										
											2020-10-24 20:36:55 -07:00
										 |  |  |         self.dialog.frame = Frame(self.root) | 
					
						
							| 
									
										
										
										
											2014-06-30 20:00:03 -04:00
										 |  |  |         self.dialog.create_command_buttons() | 
					
						
							|  |  |  |         # Look for close button command in buttonframe | 
					
						
							|  |  |  |         closebuttoncommand = '' | 
					
						
							|  |  |  |         for child in self.dialog.buttonframe.winfo_children(): | 
					
						
							| 
									
										
										
										
											2019-05-31 04:26:35 -04:00
										 |  |  |             if child['text'] == 'Close': | 
					
						
							| 
									
										
										
										
											2014-06-30 23:52:20 -04:00
										 |  |  |                 closebuttoncommand = child['command'] | 
					
						
							| 
									
										
										
										
											2014-06-30 20:00:03 -04:00
										 |  |  |         self.assertIn('close', closebuttoncommand) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							|  |  |  |     unittest.main(verbosity=2, exit=2) |