summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorterryjreedy <tjreedy@udel.edu>2017-06-27 05:23:55 (GMT)
committerGitHub <noreply@github.com>2017-06-27 05:23:55 (GMT)
commit44913e584bcf4e2a0e1a6372c304c2d5ea521fc6 (patch)
tree5018d181ec979f5783b782b6f00b263cd87ed744 /Lib
parent213ce12adfc9281c6f381bb45d132e9de8ffd450 (diff)
downloadcpython-44913e584bcf4e2a0e1a6372c304c2d5ea521fc6.zip
cpython-44913e584bcf4e2a0e1a6372c304c2d5ea521fc6.tar.gz
cpython-44913e584bcf4e2a0e1a6372c304c2d5ea521fc6.tar.bz2
bpo-21519: IDLE basic custom key entry better detects duplicates. (#2428)
Diffstat (limited to 'Lib')
-rw-r--r--Lib/idlelib/config_key.py6
-rw-r--r--Lib/idlelib/idle_test/test_config_key.py14
2 files changed, 13 insertions, 7 deletions
diff --git a/Lib/idlelib/config_key.py b/Lib/idlelib/config_key.py
index 8d575ec..fc6e341 100644
--- a/Lib/idlelib/config_key.py
+++ b/Lib/idlelib/config_key.py
@@ -250,10 +250,10 @@ class GetKeysDialog(Toplevel):
'''
finalKey = self.listKeysFinal.get(ANCHOR)
modifiers = self.GetModifiers()
- # create a key sequence list for overlap check:
- keySequence = keys.split()
keysOK = False
title = self.keyerror_title
+ key_sequences = [key for keylist in self.currentKeySequences
+ for key in keylist]
if not keys.endswith('>'):
self.showerror(title, parent=self,
message='Missing the final Key')
@@ -267,7 +267,7 @@ class GetKeysDialog(Toplevel):
msg = 'The shift modifier by itself may not be used with'\
' this key symbol.'
self.showerror(title=title, parent=self, message=msg)
- elif keySequence in self.currentKeySequences:
+ elif keys in key_sequences:
msg = 'This key combination is already in use.'
self.showerror(title=title, parent=self, message=msg)
else:
diff --git a/Lib/idlelib/idle_test/test_config_key.py b/Lib/idlelib/idle_test/test_config_key.py
index a4227ed..9074e23 100644
--- a/Lib/idlelib/idle_test/test_config_key.py
+++ b/Lib/idlelib/idle_test/test_config_key.py
@@ -28,8 +28,9 @@ class ValidationTest(unittest.TestCase):
requires('gui')
cls.root = Tk()
cls.root.withdraw()
+ keylist = [['<Key-F12>'], ['<Control-Key-x>', '<Control-Key-X>']]
cls.dialog = cls.Validator(
- cls.root, 'Title', '<<Test>>', [['<Key-F12>']], _utest=True)
+ cls.root, 'Title', '<<Test>>', keylist, _utest=True)
@classmethod
def tearDownClass(cls):
@@ -78,10 +79,15 @@ class ValidationTest(unittest.TestCase):
self.dialog.GetModifiers.result = []
def test_keys_dup(self):
- self.dialog.listKeysFinal.get.result = 'F12'
+ 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)
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>'))