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)

Reply via email to