]> code.delx.au - gnu-emacs-elpa/blob - packages/hydra/hydra-test.el
Merge commit 'b963c70dcf211c86d4bb03bfd4a20c6807cbe679' from hydra
[gnu-emacs-elpa] / packages / hydra / hydra-test.el
1 ;;; hydra-test.el --- Tests for Hydra
2
3 ;; Copyright (C) 2015 Free Software Foundation, Inc.
4
5 ;; Author: Oleh Krehel
6
7 ;; This file is part of GNU Emacs.
8
9 ;; GNU Emacs is free software: you can redistribute it and/or modify
10 ;; it under the terms of the GNU General Public License as published by
11 ;; the Free Software Foundation, either version 3 of the License, or
12 ;; (at your option) any later version.
13
14 ;; GNU Emacs is distributed in the hope that it will be useful,
15 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 ;; GNU General Public License for more details.
18
19 ;; You should have received a copy of the GNU General Public License
20 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
21
22 ;;; Commentary:
23 ;;
24
25 ;;; Code:
26
27 (require 'ert)
28
29 (ert-deftest defhydra-red-error ()
30 (should
31 (equal
32 (macroexpand
33 '(defhydra hydra-error (global-map "M-g")
34 "error"
35 ("h" first-error "first")
36 ("j" next-error "next")
37 ("k" previous-error "prev")))
38 '(progn
39 (defun hydra-error/first-error nil "Create a hydra with a \"M-g\" body and the heads:
40
41 \"h\": `first-error',
42 \"j\": `next-error',
43 \"k\": `previous-error'
44
45 The body can be accessed via `hydra-error/body'.
46
47 Call the head: `first-error'."
48 (interactive)
49 (when hydra-is-helpful (message #("error: [h]: first, [j]: next, [k]: prev." 8 9 (face hydra-face-red)
50 20 21 (face hydra-face-red)
51 31 32 (face hydra-face-red))))
52 (setq hydra-last
53 (hydra-set-transient-map
54 (setq hydra-curr-map '(keymap (107 . hydra-error/previous-error)
55 (106 . hydra-error/next-error)
56 (104 . hydra-error/first-error)
57 (kp-subtract . hydra--negative-argument)
58 (kp-9 . hydra--digit-argument)
59 (kp-8 . hydra--digit-argument)
60 (kp-7 . hydra--digit-argument)
61 (kp-6 . hydra--digit-argument)
62 (kp-5 . hydra--digit-argument)
63 (kp-4 . hydra--digit-argument)
64 (kp-3 . hydra--digit-argument)
65 (kp-2 . hydra--digit-argument)
66 (kp-1 . hydra--digit-argument)
67 (kp-0 . hydra--digit-argument)
68 (57 . hydra--digit-argument)
69 (56 . hydra--digit-argument)
70 (55 . hydra--digit-argument)
71 (54 . hydra--digit-argument)
72 (53 . hydra--digit-argument)
73 (52 . hydra--digit-argument)
74 (51 . hydra--digit-argument)
75 (50 . hydra--digit-argument)
76 (49 . hydra--digit-argument)
77 (48 . hydra--digit-argument)
78 (45 . hydra--negative-argument)
79 (21 . hydra--universal-argument)))
80 t))
81 (call-interactively (function first-error)))
82 (defun hydra-error/next-error nil "Create a hydra with a \"M-g\" body and the heads:
83
84 \"h\": `first-error',
85 \"j\": `next-error',
86 \"k\": `previous-error'
87
88 The body can be accessed via `hydra-error/body'.
89
90 Call the head: `next-error'."
91 (interactive)
92 (when hydra-is-helpful (message #("error: [h]: first, [j]: next, [k]: prev." 8 9 (face hydra-face-red)
93 20 21 (face hydra-face-red)
94 31 32 (face hydra-face-red))))
95 (setq hydra-last
96 (hydra-set-transient-map
97 (setq hydra-curr-map '(keymap (107 . hydra-error/previous-error)
98 (106 . hydra-error/next-error)
99 (104 . hydra-error/first-error)
100 (kp-subtract . hydra--negative-argument)
101 (kp-9 . hydra--digit-argument)
102 (kp-8 . hydra--digit-argument)
103 (kp-7 . hydra--digit-argument)
104 (kp-6 . hydra--digit-argument)
105 (kp-5 . hydra--digit-argument)
106 (kp-4 . hydra--digit-argument)
107 (kp-3 . hydra--digit-argument)
108 (kp-2 . hydra--digit-argument)
109 (kp-1 . hydra--digit-argument)
110 (kp-0 . hydra--digit-argument)
111 (57 . hydra--digit-argument)
112 (56 . hydra--digit-argument)
113 (55 . hydra--digit-argument)
114 (54 . hydra--digit-argument)
115 (53 . hydra--digit-argument)
116 (52 . hydra--digit-argument)
117 (51 . hydra--digit-argument)
118 (50 . hydra--digit-argument)
119 (49 . hydra--digit-argument)
120 (48 . hydra--digit-argument)
121 (45 . hydra--negative-argument)
122 (21 . hydra--universal-argument)))
123 t))
124 (call-interactively (function next-error)))
125 (defun hydra-error/previous-error nil "Create a hydra with a \"M-g\" body and the heads:
126
127 \"h\": `first-error',
128 \"j\": `next-error',
129 \"k\": `previous-error'
130
131 The body can be accessed via `hydra-error/body'.
132
133 Call the head: `previous-error'."
134 (interactive)
135 (when hydra-is-helpful (message #("error: [h]: first, [j]: next, [k]: prev." 8 9 (face hydra-face-red)
136 20 21 (face hydra-face-red)
137 31 32 (face hydra-face-red))))
138 (setq hydra-last
139 (hydra-set-transient-map
140 (setq hydra-curr-map '(keymap (107 . hydra-error/previous-error)
141 (106 . hydra-error/next-error)
142 (104 . hydra-error/first-error)
143 (kp-subtract . hydra--negative-argument)
144 (kp-9 . hydra--digit-argument)
145 (kp-8 . hydra--digit-argument)
146 (kp-7 . hydra--digit-argument)
147 (kp-6 . hydra--digit-argument)
148 (kp-5 . hydra--digit-argument)
149 (kp-4 . hydra--digit-argument)
150 (kp-3 . hydra--digit-argument)
151 (kp-2 . hydra--digit-argument)
152 (kp-1 . hydra--digit-argument)
153 (kp-0 . hydra--digit-argument)
154 (57 . hydra--digit-argument)
155 (56 . hydra--digit-argument)
156 (55 . hydra--digit-argument)
157 (54 . hydra--digit-argument)
158 (53 . hydra--digit-argument)
159 (52 . hydra--digit-argument)
160 (51 . hydra--digit-argument)
161 (50 . hydra--digit-argument)
162 (49 . hydra--digit-argument)
163 (48 . hydra--digit-argument)
164 (45 . hydra--negative-argument)
165 (21 . hydra--universal-argument)))
166 t))
167 (call-interactively (function previous-error)))
168 (unless (keymapp (lookup-key global-map (kbd "M-g")))
169 (define-key global-map (kbd "M-g")
170 nil))
171 (define-key global-map [134217831 104]
172 (function hydra-error/first-error))
173 (define-key global-map [134217831 106]
174 (function hydra-error/next-error))
175 (define-key global-map [134217831 107]
176 (function hydra-error/previous-error))
177 (defun hydra-error/body nil "Create a hydra with a \"M-g\" body and the heads:
178
179 \"h\": `first-error',
180 \"j\": `next-error',
181 \"k\": `previous-error'
182
183 The body can be accessed via `hydra-error/body'."
184 (interactive)
185 (when hydra-is-helpful (message #("error: [h]: first, [j]: next, [k]: prev." 8 9 (face hydra-face-red)
186 20 21 (face hydra-face-red)
187 31 32 (face hydra-face-red))))
188 (setq hydra-last
189 (hydra-set-transient-map
190 '(keymap (107 . hydra-error/previous-error)
191 (106 . hydra-error/next-error)
192 (104 . hydra-error/first-error)
193 (kp-subtract . hydra--negative-argument)
194 (kp-9 . hydra--digit-argument)
195 (kp-8 . hydra--digit-argument)
196 (kp-7 . hydra--digit-argument)
197 (kp-6 . hydra--digit-argument)
198 (kp-5 . hydra--digit-argument)
199 (kp-4 . hydra--digit-argument)
200 (kp-3 . hydra--digit-argument)
201 (kp-2 . hydra--digit-argument)
202 (kp-1 . hydra--digit-argument)
203 (kp-0 . hydra--digit-argument)
204 (57 . hydra--digit-argument)
205 (56 . hydra--digit-argument)
206 (55 . hydra--digit-argument)
207 (54 . hydra--digit-argument)
208 (53 . hydra--digit-argument)
209 (52 . hydra--digit-argument)
210 (51 . hydra--digit-argument)
211 (50 . hydra--digit-argument)
212 (49 . hydra--digit-argument)
213 (48 . hydra--digit-argument)
214 (45 . hydra--negative-argument)
215 (21 . hydra--universal-argument))
216 t)))))))
217
218 (ert-deftest hydra-blue-toggle ()
219 (should
220 (equal
221 (macroexpand
222 '(defhydra toggle (:color blue)
223 "toggle"
224 ("t" toggle-truncate-lines "truncate")
225 ("f" auto-fill-mode "fill")
226 ("a" abbrev-mode "abbrev")
227 ("q" nil "cancel")))
228 '(progn
229 (defun toggle/toggle-truncate-lines nil "Create a hydra with no body and the heads:
230
231 \"t\": `toggle-truncate-lines',
232 \"f\": `auto-fill-mode',
233 \"a\": `abbrev-mode',
234 \"q\": `nil'
235
236 The body can be accessed via `toggle/body'.
237
238 Call the head: `toggle-truncate-lines'."
239 (interactive)
240 (hydra-disable)
241 (call-interactively (function toggle-truncate-lines)))
242 (defun toggle/auto-fill-mode nil "Create a hydra with no body and the heads:
243
244 \"t\": `toggle-truncate-lines',
245 \"f\": `auto-fill-mode',
246 \"a\": `abbrev-mode',
247 \"q\": `nil'
248
249 The body can be accessed via `toggle/body'.
250
251 Call the head: `auto-fill-mode'."
252 (interactive)
253 (hydra-disable)
254 (call-interactively (function auto-fill-mode)))
255 (defun toggle/abbrev-mode nil "Create a hydra with no body and the heads:
256
257 \"t\": `toggle-truncate-lines',
258 \"f\": `auto-fill-mode',
259 \"a\": `abbrev-mode',
260 \"q\": `nil'
261
262 The body can be accessed via `toggle/body'.
263
264 Call the head: `abbrev-mode'."
265 (interactive)
266 (hydra-disable)
267 (call-interactively (function abbrev-mode)))
268 (defun toggle/nil nil "Create a hydra with no body and the heads:
269
270 \"t\": `toggle-truncate-lines',
271 \"f\": `auto-fill-mode',
272 \"a\": `abbrev-mode',
273 \"q\": `nil'
274
275 The body can be accessed via `toggle/body'.
276
277 Call the head: `nil'."
278 (interactive)
279 (hydra-disable))
280 (defun toggle/body nil "Create a hydra with no body and the heads:
281
282 \"t\": `toggle-truncate-lines',
283 \"f\": `auto-fill-mode',
284 \"a\": `abbrev-mode',
285 \"q\": `nil'
286
287 The body can be accessed via `toggle/body'."
288 (interactive)
289 (when hydra-is-helpful (message #("toggle: [t]: truncate, [f]: fill, [a]: abbrev, [q]: cancel." 9 10 (face hydra-face-blue)
290 24 25 (face hydra-face-blue)
291 35 36 (face hydra-face-blue)
292 48 49 (face hydra-face-blue))))
293 (setq hydra-last
294 (hydra-set-transient-map
295 '(keymap (113 . toggle/nil)
296 (97 . toggle/abbrev-mode)
297 (102 . toggle/auto-fill-mode)
298 (116 . toggle/toggle-truncate-lines)
299 (kp-subtract . hydra--negative-argument)
300 (kp-9 . hydra--digit-argument)
301 (kp-8 . hydra--digit-argument)
302 (kp-7 . hydra--digit-argument)
303 (kp-6 . hydra--digit-argument)
304 (kp-5 . hydra--digit-argument)
305 (kp-4 . hydra--digit-argument)
306 (kp-3 . hydra--digit-argument)
307 (kp-2 . hydra--digit-argument)
308 (kp-1 . hydra--digit-argument)
309 (kp-0 . hydra--digit-argument)
310 (57 . hydra--digit-argument)
311 (56 . hydra--digit-argument)
312 (55 . hydra--digit-argument)
313 (54 . hydra--digit-argument)
314 (53 . hydra--digit-argument)
315 (52 . hydra--digit-argument)
316 (51 . hydra--digit-argument)
317 (50 . hydra--digit-argument)
318 (49 . hydra--digit-argument)
319 (48 . hydra--digit-argument)
320 (45 . hydra--negative-argument)
321 (21 . hydra--universal-argument))
322 t)))))))
323
324 (provide 'hydra-test)
325
326 ;;; hydra-test.el ends here