branch: externals/compat
commit 4bfab527f0ff062b82ce1c42c323c1c7382e5082
Author: Daniel Mendler <[email protected]>
Commit: Daniel Mendler <[email protected]>
Add key-valid-p test
---
compat-29.el | 2 +-
compat-tests.el | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 119 insertions(+), 1 deletion(-)
diff --git a/compat-29.el b/compat-29.el
index 4fd02b3071..059921b241 100644
--- a/compat-29.el
+++ b/compat-29.el
@@ -525,7 +525,7 @@ the symbol of the calling function, for example."
;;;; Defined in keymap.el
-(compat-defun key-valid-p (keys) ;; <UNTESTED>
+(compat-defun key-valid-p (keys) ;; <OK>
"Say whether KEYS is a valid key.
A key is a string consisting of one or more key strokes.
The key strokes are separated by single space characters.
diff --git a/compat-tests.el b/compat-tests.el
index 913a89b0a8..9e3e0e165b 100644
--- a/compat-tests.el
+++ b/compat-tests.el
@@ -72,6 +72,124 @@
(should (equal compat-test-map-1 compat-test-map-2))
(should (equal compat-test-map-1 compat-test-map-3)))
+(ert-deftest key-valid-p ()
+ (should-not (key-valid-p ""))
+ (should (key-valid-p "f"))
+ (should (key-valid-p "X"))
+ (should-not (key-valid-p " X"))
+ (should (key-valid-p "X f"))
+ (should-not (key-valid-p "a b"))
+ (should-not (key-valid-p "foobar"))
+ (should-not (key-valid-p "return"))
+
+ (should (key-valid-p "<F2>"))
+ (should (key-valid-p "<f1> <f2> TAB"))
+ (should (key-valid-p "<f1> RET"))
+ (should (key-valid-p "<f1> SPC"))
+ (should (key-valid-p "<f1>"))
+ (should-not (key-valid-p "[f1]"))
+ (should (key-valid-p "<return>"))
+ (should-not (key-valid-p "< right >"))
+
+ ;; Modifiers:
+ (should (key-valid-p "C-x"))
+ (should (key-valid-p "C-x a"))
+ (should (key-valid-p "C-;"))
+ (should (key-valid-p "C-a"))
+ (should (key-valid-p "C-c SPC"))
+ (should (key-valid-p "C-c TAB"))
+ (should (key-valid-p "C-c c"))
+ (should (key-valid-p "C-x 4 C-f"))
+ (should (key-valid-p "C-x C-f"))
+ (should (key-valid-p "C-M-<down>"))
+ (should-not (key-valid-p "<C-M-down>"))
+ (should (key-valid-p "C-RET"))
+ (should (key-valid-p "C-SPC"))
+ (should (key-valid-p "C-TAB"))
+ (should (key-valid-p "C-<down>"))
+ (should (key-valid-p "C-c C-c C-c"))
+
+ (should (key-valid-p "M-a"))
+ (should (key-valid-p "M-<DEL>"))
+ (should-not (key-valid-p "M-C-a"))
+ (should (key-valid-p "C-M-a"))
+ (should (key-valid-p "M-ESC"))
+ (should (key-valid-p "M-RET"))
+ (should (key-valid-p "M-SPC"))
+ (should (key-valid-p "M-TAB"))
+ (should (key-valid-p "M-x a"))
+ (should (key-valid-p "M-<up>"))
+ (should (key-valid-p "M-c M-c M-c"))
+
+ (should (key-valid-p "s-SPC"))
+ (should (key-valid-p "s-a"))
+ (should (key-valid-p "s-x a"))
+ (should (key-valid-p "s-c s-c s-c"))
+
+ (should-not (key-valid-p "S-H-a"))
+ (should (key-valid-p "S-a"))
+ (should (key-valid-p "S-x a"))
+ (should (key-valid-p "S-c S-c S-c"))
+
+ (should (key-valid-p "H-<RET>"))
+ (should (key-valid-p "H-DEL"))
+ (should (key-valid-p "H-a"))
+ (should (key-valid-p "H-x a"))
+ (should (key-valid-p "H-c H-c H-c"))
+
+ (should (key-valid-p "A-H-a"))
+ (should (key-valid-p "A-SPC"))
+ (should (key-valid-p "A-TAB"))
+ (should (key-valid-p "A-a"))
+ (should (key-valid-p "A-c A-c A-c"))
+
+ (should (key-valid-p "C-M-a"))
+ (should (key-valid-p "C-M-<up>"))
+
+ ;; Special characters.
+ (should (key-valid-p "DEL"))
+ (should (key-valid-p "ESC C-a"))
+ (should (key-valid-p "ESC"))
+ (should (key-valid-p "LFD"))
+ (should (key-valid-p "NUL"))
+ (should (key-valid-p "RET"))
+ (should (key-valid-p "SPC"))
+ (should (key-valid-p "TAB"))
+ (should-not (key-valid-p "\^i"))
+ (should-not (key-valid-p "^M"))
+
+ ;; With numbers.
+ (should-not (key-valid-p "\177"))
+ (should-not (key-valid-p "\000"))
+ (should-not (key-valid-p "\\177"))
+ (should-not (key-valid-p "\\000"))
+ (should-not (key-valid-p "C-x \\150"))
+
+ ;; Multibyte
+ (should (key-valid-p "ñ"))
+ (should (key-valid-p "ü"))
+ (should (key-valid-p "ö"))
+ (should (key-valid-p "ğ"))
+ (should (key-valid-p "ա"))
+ (should-not (key-valid-p "üüöö"))
+ (should (key-valid-p "C-ü"))
+ (should (key-valid-p "M-ü"))
+ (should (key-valid-p "H-ü"))
+
+ ;; Handle both new and old style key descriptions (bug#45536).
+ (should (key-valid-p "s-<return>"))
+ (should-not (key-valid-p "<s-return>"))
+ (should (key-valid-p "C-M-<return>"))
+ (should-not (key-valid-p "<C-M-return>"))
+
+ (should (key-valid-p "<mouse-1>"))
+ (should (key-valid-p "<Scroll_Lock>"))
+
+ (should-not (key-valid-p "c-x"))
+ (should-not (key-valid-p "C-xx"))
+ (should-not (key-valid-p "M-xx"))
+ (should-not (key-valid-p "M-x<TAB>")))
+
(defun compat-function-put-test ())
(ert-deftest function-put ()
(function-put #'compat-function-put-test 'compat-test 42)