| 
									
										
										
										
											2016-06-10 18:19:21 -04:00
										 |  |  | ''' Test idlelib.config_key.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-10 15:15:25 -04:00
										 |  |  | Coverage: 56% from creating and closing dialog. | 
					
						
							| 
									
										
										
										
											2016-06-10 18:19:21 -04:00
										 |  |  | '''
 | 
					
						
							|  |  |  | from idlelib import config_key | 
					
						
							|  |  |  | from test.support import requires | 
					
						
							| 
									
										
										
										
											2017-06-26 00:55:48 -04:00
										 |  |  | import sys | 
					
						
							| 
									
										
										
										
											2016-06-10 18:19:21 -04:00
										 |  |  | import unittest | 
					
						
							| 
									
										
										
										
											2017-03-27 16:05:26 +02:00
										 |  |  | from tkinter import Tk | 
					
						
							| 
									
										
										
										
											2017-06-26 00:55:48 -04:00
										 |  |  | from idlelib.idle_test.mock_idle import Func | 
					
						
							|  |  |  | from idlelib.idle_test.mock_tk import Var, Mbox_func | 
					
						
							| 
									
										
										
										
											2016-06-10 18:19:21 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-26 00:55:48 -04:00
										 |  |  | class ValidationTest(unittest.TestCase): | 
					
						
							|  |  |  |     "Test validation methods: OK, KeysOK, bind_ok." | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     class Validator(config_key.GetKeysDialog): | 
					
						
							|  |  |  |         def __init__(self, *args, **kwargs): | 
					
						
							|  |  |  |             config_key.GetKeysDialog.__init__(self, *args, **kwargs) | 
					
						
							|  |  |  |             class listKeysFinal: | 
					
						
							|  |  |  |                 get = Func() | 
					
						
							|  |  |  |             self.listKeysFinal = listKeysFinal | 
					
						
							|  |  |  |         GetModifiers = Func() | 
					
						
							|  |  |  |         showerror = Mbox_func() | 
					
						
							| 
									
										
										
										
											2016-06-10 18:19:21 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def setUpClass(cls): | 
					
						
							| 
									
										
										
										
											2017-06-26 00:55:48 -04:00
										 |  |  |         requires('gui') | 
					
						
							| 
									
										
										
										
											2016-06-10 18:19:21 -04:00
										 |  |  |         cls.root = Tk() | 
					
						
							| 
									
										
										
										
											2016-08-31 21:09:02 -04:00
										 |  |  |         cls.root.withdraw() | 
					
						
							| 
									
										
										
										
											2017-06-27 01:23:55 -04:00
										 |  |  |         keylist = [['<Key-F12>'], ['<Control-Key-x>', '<Control-Key-X>']] | 
					
						
							| 
									
										
										
										
											2017-06-26 00:55:48 -04:00
										 |  |  |         cls.dialog = cls.Validator( | 
					
						
							| 
									
										
										
										
											2017-06-27 01:23:55 -04:00
										 |  |  |             cls.root, 'Title', '<<Test>>', keylist, _utest=True) | 
					
						
							| 
									
										
										
										
											2016-06-10 18:19:21 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def tearDownClass(cls): | 
					
						
							| 
									
										
										
										
											2017-06-26 00:55:48 -04:00
										 |  |  |         cls.dialog.Cancel() | 
					
						
							|  |  |  |         cls.root.update_idletasks() | 
					
						
							| 
									
										
										
										
											2016-06-10 18:19:21 -04:00
										 |  |  |         cls.root.destroy() | 
					
						
							| 
									
										
										
										
											2017-06-26 00:55:48 -04:00
										 |  |  |         del cls.dialog, cls.root | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def setUp(self): | 
					
						
							|  |  |  |         self.dialog.showerror.message = '' | 
					
						
							|  |  |  |     # A test that needs a particular final key value should set it. | 
					
						
							|  |  |  |     # A test that sets a non-blank modifier list should reset it to []. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_ok_empty(self): | 
					
						
							|  |  |  |         self.dialog.keyString.set(' ') | 
					
						
							|  |  |  |         self.dialog.OK() | 
					
						
							|  |  |  |         self.assertEqual(self.dialog.result, '') | 
					
						
							|  |  |  |         self.assertEqual(self.dialog.showerror.message, 'No key specified.') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_ok_good(self): | 
					
						
							|  |  |  |         self.dialog.keyString.set('<Key-F11>') | 
					
						
							|  |  |  |         self.dialog.listKeysFinal.get.result = 'F11' | 
					
						
							|  |  |  |         self.dialog.OK() | 
					
						
							|  |  |  |         self.assertEqual(self.dialog.result, '<Key-F11>') | 
					
						
							|  |  |  |         self.assertEqual(self.dialog.showerror.message, '') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_keys_no_ending(self): | 
					
						
							|  |  |  |         self.assertFalse(self.dialog.KeysOK('<Control-Shift')) | 
					
						
							|  |  |  |         self.assertIn('Missing the final', self.dialog.showerror.message) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_keys_no_modifier_bad(self): | 
					
						
							|  |  |  |         self.dialog.listKeysFinal.get.result = 'A' | 
					
						
							|  |  |  |         self.assertFalse(self.dialog.KeysOK('<Key-A>')) | 
					
						
							|  |  |  |         self.assertIn('No modifier', self.dialog.showerror.message) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_keys_no_modifier_ok(self): | 
					
						
							|  |  |  |         self.dialog.listKeysFinal.get.result = 'F11' | 
					
						
							|  |  |  |         self.assertTrue(self.dialog.KeysOK('<Key-F11>')) | 
					
						
							|  |  |  |         self.assertEqual(self.dialog.showerror.message, '') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_keys_shift_bad(self): | 
					
						
							|  |  |  |         self.dialog.listKeysFinal.get.result = 'a' | 
					
						
							|  |  |  |         self.dialog.GetModifiers.result = ['Shift'] | 
					
						
							|  |  |  |         self.assertFalse(self.dialog.KeysOK('<a>')) | 
					
						
							|  |  |  |         self.assertIn('shift modifier', self.dialog.showerror.message) | 
					
						
							|  |  |  |         self.dialog.GetModifiers.result = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_keys_dup(self): | 
					
						
							| 
									
										
										
										
											2017-06-27 01:23:55 -04:00
										 |  |  |         for mods, final, seq in (([], 'F12', '<Key-F12>'), | 
					
						
							|  |  |  |                                  (['Control'], 'x', '<Control-Key-x>'), | 
					
						
							|  |  |  |                                  (['Control'], 'X', '<Control-Key-X>')): | 
					
						
							|  |  |  |             with self.subTest(m=mods, f=final, s=seq): | 
					
						
							|  |  |  |                 self.dialog.listKeysFinal.get.result = final | 
					
						
							|  |  |  |                 self.dialog.GetModifiers.result = mods | 
					
						
							|  |  |  |                 self.assertFalse(self.dialog.KeysOK(seq)) | 
					
						
							|  |  |  |                 self.assertIn('already in use', self.dialog.showerror.message) | 
					
						
							| 
									
										
										
										
											2017-06-26 00:55:48 -04:00
										 |  |  |         self.dialog.GetModifiers.result = [] | 
					
						
							| 
									
										
										
										
											2016-06-10 18:19:21 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-26 00:55:48 -04:00
										 |  |  |     def test_bind_ok(self): | 
					
						
							|  |  |  |         self.assertTrue(self.dialog.bind_ok('<Control-Shift-Key-a>')) | 
					
						
							|  |  |  |         self.assertEqual(self.dialog.showerror.message, '') | 
					
						
							| 
									
										
										
										
											2016-06-10 18:19:21 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-26 00:55:48 -04:00
										 |  |  |     def test_bind_not_ok(self): | 
					
						
							|  |  |  |         self.assertFalse(self.dialog.bind_ok('<Control-Shift>')) | 
					
						
							|  |  |  |         self.assertIn('not accepted', self.dialog.showerror.message) | 
					
						
							| 
									
										
										
										
											2016-06-10 18:19:21 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							|  |  |  |     unittest.main(verbosity=2) |