dotemacs

My Emacs configuration
git clone git://git.entf.net/dotemacs
Log | Files | Refs | LICENSE

which-key-tests.el (10158B)


      1 ;;; which-key-tests.el --- Tests for which-key.el -*- lexical-binding: t; -*-
      2 
      3 ;; Copyright (C) 2017-2021  Free Software Foundation, Inc.
      4 
      5 ;; Author: Justin Burkett <justin@burkett.cc>
      6 ;; Maintainer: Justin Burkett <justin@burkett.cc>
      7 
      8 ;; This program is free software; you can redistribute it and/or modify
      9 ;; it under the terms of the GNU General Public License as published by
     10 ;; the Free Software Foundation, either version 3 of the License, or
     11 ;; (at your option) any later version.
     12 
     13 ;; This program is distributed in the hope that it will be useful,
     14 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
     15 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     16 ;; GNU General Public License for more details.
     17 
     18 ;; You should have received a copy of the GNU General Public License
     19 ;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
     20 
     21 ;;; Commentary:
     22 
     23 ;; Tests for which-key.el
     24 
     25 ;;; Code:
     26 
     27 (require 'which-key)
     28 (require 'ert)
     29 
     30 (ert-deftest which-key-test--keymap-based-bindings ()
     31   (let ((map (make-sparse-keymap))
     32         (prefix-map (make-sparse-keymap)))
     33     (define-key prefix-map "x" #'ignore)
     34     (define-key map "\C-a" 'complete)
     35     (define-key map "\C-b" prefix-map)
     36     (which-key-add-keymap-based-replacements map
     37       "C-a" '("mycomplete" . complete)
     38       "C-b" "mymap"
     39       "C-c" "mymap2")
     40     (define-key map "\C-ca" 'foo)
     41     (should (equal
     42              (which-key--get-keymap-bindings map)
     43              '(("C-a" . "mycomplete")
     44                ("C-b" . "group:mymap")
     45                ("C-c" . "group:mymap2"))))))
     46 
     47 (ert-deftest which-key-test--named-prefix-keymap ()
     48   (define-prefix-command 'which-key-test--named-map)
     49   (let ((map (make-sparse-keymap)))
     50     (define-key map "\C-a" 'which-key-test--named-map)
     51     (should (equal
     52              (which-key--get-keymap-bindings map)
     53              '(("C-a" . "which-key-test--named-map"))))))
     54 
     55 (ert-deftest which-key-test--prefix-declaration ()
     56   "Test `which-key-declare-prefixes' and
     57 `which-key-declare-prefixes-for-mode'. See Bug #109."
     58   (let* ((major-mode 'test-mode)
     59          which-key-replacement-alist)
     60     (which-key-add-key-based-replacements
     61       "SPC C-c" '("complete" . "complete title")
     62       "SPC C-k" "cancel")
     63     (which-key-add-major-mode-key-based-replacements 'test-mode
     64       "C-c C-c" '("complete" . "complete title")
     65       "C-c C-k" "cancel")
     66     (should (equal
     67              (which-key--maybe-replace '("SPC C-k" . ""))
     68              '("SPC C-k" . "cancel")))
     69     (should (equal
     70              (which-key--maybe-replace '("C-c C-c" . ""))
     71              '("C-c C-c" . "complete")))))
     72 
     73 (ert-deftest which-key-test--maybe-replace ()
     74   "Test `which-key--maybe-replace'. See #154"
     75   (let ((which-key-replacement-alist
     76          '((("C-c [a-d]" . nil) . ("C-c a" . "c-c a"))
     77            (("C-c .+" . nil) . ("C-c *" . "c-c *"))))
     78         (test-mode-1 't)
     79         (test-mode-2 'nil)
     80         which-key-allow-multiple-replacements)
     81     (which-key-add-key-based-replacements
     82       "C-c ." "test ."
     83       "SPC ." "SPC ."
     84       "C-c \\" "regexp quoting"
     85       "C-c [" "bad regexp"
     86       "SPC t1" (lambda (kb)
     87                  (cons (car kb)
     88                        (if test-mode-1
     89                            "[x] test mode"
     90                          "[ ] test mode")))
     91       "SPC t2" (lambda (kb)
     92                  (cons (car kb)
     93                        (if test-mode-2
     94                            "[x] test mode"
     95                          "[ ] test mode"))))
     96     (should (equal
     97              (which-key--maybe-replace '("C-c g" . "test"))
     98              '("C-c *" . "c-c *")))
     99     (should (equal
    100              (which-key--maybe-replace '("C-c b" . "test"))
    101              '("C-c a" . "c-c a")))
    102     (should (equal
    103              (which-key--maybe-replace '("C-c ." . "not test ."))
    104              '("C-c ." . "test .")))
    105     (should (not
    106              (equal
    107               (which-key--maybe-replace '("C-c +" . "not test ."))
    108               '("C-c ." . "test ."))))
    109     (should (equal
    110              (which-key--maybe-replace '("C-c [" . "orig bad regexp"))
    111              '("C-c [" . "bad regexp")))
    112     (should (equal
    113              (which-key--maybe-replace '("C-c \\" . "pre quoting"))
    114              '("C-c \\" . "regexp quoting")))
    115     ;; see #155
    116     (should (equal
    117              (which-key--maybe-replace '("SPC . ." . "don't replace"))
    118              '("SPC . ." . "don't replace")))
    119     (should (equal
    120              (which-key--maybe-replace '("SPC t 1" . "test mode"))
    121              '("SPC t 1" . "[x] test mode")))
    122     (should (equal
    123              (which-key--maybe-replace '("SPC t 2" . "test mode"))
    124              '("SPC t 2" . "[ ] test mode")))))
    125 
    126 (ert-deftest which-key-test--maybe-replace-multiple ()
    127   "Test `which-key-allow-multiple-replacements'. See #156."
    128   (let ((which-key-replacement-alist
    129          '(((nil . "helm") . (nil . "HLM"))
    130            ((nil . "projectile") . (nil . "PRJTL"))))
    131         (which-key-allow-multiple-replacements t))
    132     (should (equal
    133              (which-key--maybe-replace '("C-c C-c" . "helm-x"))
    134              '("C-c C-c" . "HLM-x")))
    135     (should (equal
    136              (which-key--maybe-replace '("C-c C-c" . "projectile-x"))
    137              '("C-c C-c" . "PRJTL-x")))
    138     (should (equal
    139              (which-key--maybe-replace '("C-c C-c" . "helm-projectile-x"))
    140              '("C-c C-c" . "HLM-PRJTL-x")))))
    141 
    142 (ert-deftest which-key-test--key-extraction ()
    143   "Test `which-key--extract-key'. See #161."
    144   (should (equal (which-key--extract-key "SPC a") "a"))
    145   (should (equal (which-key--extract-key "C-x a") "a"))
    146   (should (equal (which-key--extract-key "<left> b a") "a"))
    147   (should (equal (which-key--extract-key "<left> a .. c") "a .. c"))
    148   (should (equal (which-key--extract-key "M-a a .. c") "a .. c")))
    149 
    150 (ert-deftest which-key-test--get-keymap-bindings ()
    151   (skip-unless (require 'evil nil t))
    152   (defvar evil-local-mode)
    153   (defvar evil-state)
    154   (declare-function evil-define-key* "ext:evil")
    155   (let ((map (make-sparse-keymap))
    156         (evil-local-mode t)
    157         (evil-state 'normal)
    158         which-key-replacement-alist)
    159     (define-key map [which-key-a] '(which-key "blah"))
    160     (define-key map "b" #'ignore)
    161     (define-key map "c" "c")
    162     (define-key map "dd" "dd")
    163     (define-key map "eee" "eee")
    164     (define-key map "f" [123 45 6])
    165     (define-key map (kbd "M-g g") "M-gg")
    166     (evil-define-key* 'normal map (kbd "C-h") "C-h-normal")
    167     (evil-define-key* 'insert map (kbd "C-h") "C-h-insert")
    168     (should (equal
    169              (sort (which-key--get-keymap-bindings map)
    170                    (lambda (a b) (string-lessp (car a) (car b))))
    171              '(("M-g" . "prefix")
    172                ("c" . "c")
    173                ("d" . "prefix")
    174                ("e" . "prefix")
    175                ("f" . "{ - C-f"))))
    176     (should (equal
    177              (sort (which-key--get-keymap-bindings map nil nil nil nil t)
    178                    (lambda (a b) (string-lessp (car a) (car b))))
    179              '(("C-h" . "C-h-normal")
    180                ("M-g" . "prefix")
    181                ("c" . "c")
    182                ("d" . "prefix")
    183                ("e" . "prefix")
    184                ("f" . "{ - C-f"))))
    185     (should (equal
    186              (sort (which-key--get-keymap-bindings map nil nil nil t)
    187                    (lambda (a b) (string-lessp (car a) (car b))))
    188              '(("M-g g" . "M-gg")
    189                ("c" . "c")
    190                ("d d" . "dd")
    191                ("e e e" . "eee")
    192                ("f" . "{ - C-f"))))))
    193 
    194 (ert-deftest which-key-test--nil-replacement ()
    195   (let ((which-key-replacement-alist
    196          '(((nil . "winum-select-window-[1-9]") . t))))
    197     (should (equal
    198              (which-key--maybe-replace '("C-c C-c" . "winum-select-window-1"))
    199              '()))))
    200 
    201 (ert-deftest which-key-test--key-sorting ()
    202   (let ((keys '(("a" . "z")
    203                 ("A" . "Z")
    204                 ("b" . "y")
    205                 ("B" . "Y")
    206                 ("p" . "prefix")
    207                 ("SPC" . "x")
    208                 ("C-a" . "w"))))
    209     (let ((which-key-sort-uppercase-first t))
    210       (should
    211        (equal
    212         (mapcar #'car (sort (copy-sequence keys) #'which-key-key-order))
    213         '("SPC" "A" "B" "a" "b" "p" "C-a"))))
    214     (let (which-key-sort-uppercase-first)
    215       (should
    216        (equal
    217         (mapcar #'car (sort (copy-sequence keys) #'which-key-key-order))
    218         '("SPC" "a" "b" "p" "A" "B" "C-a"))))
    219     (let ((which-key-sort-uppercase-first t))
    220       (should
    221        (equal
    222         (mapcar #'car (sort (copy-sequence keys) #'which-key-key-order-alpha))
    223         '("SPC" "A" "a" "B" "b" "p" "C-a"))))
    224     (let (which-key-sort-uppercase-first)
    225       (should
    226        (equal
    227         (mapcar #'car (sort (copy-sequence keys) #'which-key-key-order-alpha))
    228         '("SPC" "a" "A" "b" "B" "p" "C-a"))))
    229     (let ((which-key-sort-uppercase-first t))
    230       (should
    231        (equal
    232         (mapcar #'car (sort (copy-sequence keys)
    233                             #'which-key-prefix-then-key-order))
    234         '("SPC" "A" "B" "a" "b" "C-a" "p"))))
    235     (let (which-key-sort-uppercase-first)
    236       (should
    237        (equal
    238         (mapcar #'car (sort (copy-sequence keys)
    239                             #'which-key-prefix-then-key-order))
    240         '("SPC" "a" "b" "A" "B" "C-a" "p"))))
    241     (let ((which-key-sort-uppercase-first t))
    242       (should
    243        (equal
    244         (mapcar 'car (sort (copy-sequence keys)
    245                            #'which-key-prefix-then-key-order-reverse))
    246         '("p" "SPC" "A" "B" "a" "b" "C-a"))))
    247     (let (which-key-sort-uppercase-first)
    248       (should
    249        (equal
    250         (mapcar #'car (sort (copy-sequence keys)
    251                             #'which-key-prefix-then-key-order-reverse))
    252         '("p" "SPC" "a" "b" "A" "B" "C-a"))))
    253     (let ((which-key-sort-uppercase-first t))
    254       (should
    255        (equal
    256         (mapcar #'car (sort (copy-sequence keys)
    257                             #'which-key-description-order))
    258         '("p" "C-a" "SPC" "b" "B" "a" "A"))))
    259     (let (which-key-sort-uppercase-first)
    260       (should
    261        (equal
    262         (mapcar #'car (sort (copy-sequence keys)
    263                             #'which-key-description-order))
    264         '("p" "C-a" "SPC" "b" "B" "a" "A"))))))
    265 
    266 (provide 'which-key-tests)
    267 ;;; which-key-tests.el ends here