diff options
author | csabella <cheryl.sabella@gmail.com> | 2017-06-26 00:55:48 -0400 |
---|---|---|
committer | terryjreedy <tjreedy@udel.edu> | 2017-06-26 00:55:48 -0400 |
commit | 8c78aa70c888a370af18896a72cabd00e4120f09 (patch) | |
tree | b7059a54610f623b90969315be4ac868f366243f /Lib/idlelib/idle_test/test_config_key.py | |
parent | af5392f5c6f8014659e995840df6ee7b5017f743 (diff) | |
download | cpython-8c78aa70c888a370af18896a72cabd00e4120f09.tar.gz cpython-8c78aa70c888a370af18896a72cabd00e4120f09.zip |
bpo-6739: IDLE: Check for valid keybinding in config_keys (#2377)
Verify user-entered key sequences by trying to bind them with tk.
Add tests for all 3 validation functions.
Original patch by G Polo. Tests added by Cheryl Sabella.
Diffstat (limited to 'Lib/idlelib/idle_test/test_config_key.py')
-rw-r--r-- | Lib/idlelib/idle_test/test_config_key.py | 79 |
1 files changed, 71 insertions, 8 deletions
diff --git a/Lib/idlelib/idle_test/test_config_key.py b/Lib/idlelib/idle_test/test_config_key.py index 8a24c9632b7..a4227ed0552 100644 --- a/Lib/idlelib/idle_test/test_config_key.py +++ b/Lib/idlelib/idle_test/test_config_key.py @@ -4,29 +4,92 @@ Coverage: 56% from creating and closing dialog. ''' from idlelib import config_key from test.support import requires -requires('gui') +import sys import unittest from tkinter import Tk +from idlelib.idle_test.mock_idle import Func +from idlelib.idle_test.mock_tk import Var, Mbox_func -class GetKeysTest(unittest.TestCase): +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() @classmethod def setUpClass(cls): + requires('gui') cls.root = Tk() cls.root.withdraw() + cls.dialog = cls.Validator( + cls.root, 'Title', '<<Test>>', [['<Key-F12>']], _utest=True) @classmethod def tearDownClass(cls): - cls.root.update() # Stop "can't run event command" warning. + cls.dialog.Cancel() + cls.root.update_idletasks() cls.root.destroy() - del cls.root + 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): + self.dialog.listKeysFinal.get.result = 'F12' + self.dialog.GetModifiers.result = [] + self.assertFalse(self.dialog.KeysOK('<Key-F12>')) + self.assertIn('already in use', self.dialog.showerror.message) + def test_bind_ok(self): + self.assertTrue(self.dialog.bind_ok('<Control-Shift-Key-a>')) + self.assertEqual(self.dialog.showerror.message, '') - def test_init(self): - dia = config_key.GetKeysDialog( - self.root, 'test', '<<Test>>', ['<Key-F12>'], _utest=True) - dia.Cancel() + def test_bind_not_ok(self): + self.assertFalse(self.dialog.bind_ok('<Control-Shift>')) + self.assertIn('not accepted', self.dialog.showerror.message) if __name__ == '__main__': |