aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Lib/idlelib/idle_test/test_config_key.py
diff options
context:
space:
mode:
authorcsabella <cheryl.sabella@gmail.com>2017-06-26 00:55:48 -0400
committerterryjreedy <tjreedy@udel.edu>2017-06-26 00:55:48 -0400
commit8c78aa70c888a370af18896a72cabd00e4120f09 (patch)
treeb7059a54610f623b90969315be4ac868f366243f /Lib/idlelib/idle_test/test_config_key.py
parentaf5392f5c6f8014659e995840df6ee7b5017f743 (diff)
downloadcpython-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.py79
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__':