aboutsummaryrefslogtreecommitdiffstats
path: root/test/src
diff options
context:
space:
mode:
authorNoam Postavsky2016-11-27 10:04:48 -0500
committerNoam Postavsky2016-12-06 22:20:23 -0500
commit60fe63015165a03a765852f60367e548c1617f89 (patch)
treeef14b3f84206cf0ebb499d81b4bec0c5c33fd9e2 /test/src
parent58e418d2ceb82501f03d9c3316fd0a46faf7f0eb (diff)
downloademacs-60fe63015165a03a765852f60367e548c1617f89.tar.gz
emacs-60fe63015165a03a765852f60367e548c1617f89.zip
Give test-completion's PREDICATE full alist entry
Since 2016-06-26 "Fix test-completion with completion-regexp-list", when calling test-completion with an alist collection, the predicate was recieving the string value instead of the alist entry (Bug#24966). * src/minibuf.c (Ftest_completion): Don't modify the found element, just test STRING against `completion-regexp-list'. * test/src/minibuf-tests.el: New tests for `try-completion', `all-completions', and `test-completion'.
Diffstat (limited to 'test/src')
-rw-r--r--test/src/minibuf-tests.el406
1 files changed, 406 insertions, 0 deletions
diff --git a/test/src/minibuf-tests.el b/test/src/minibuf-tests.el
new file mode 100644
index 00000000000..98b8614ddff
--- /dev/null
+++ b/test/src/minibuf-tests.el
@@ -0,0 +1,406 @@
1;;; minibuf-tests.el --- tests for minibuf.c functions -*- lexical-binding: t -*-
2
3;; Copyright (C) 2016 Free Software Foundation, Inc.
4
5;; This file is part of GNU Emacs.
6
7;; GNU Emacs is free software: you can redistribute it and/or modify
8;; it under the terms of the GNU General Public License as published by
9;; the Free Software Foundation, either version 3 of the License, or
10;; (at your option) any later version.
11
12;; GNU Emacs is distributed in the hope that it will be useful,
13;; but WITHOUT ANY WARRANTY; without even the implied warranty of
14;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15;; GNU General Public License for more details.
16
17;; You should have received a copy of the GNU General Public License
18;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
19
20;;; Code:
21
22(require 'ert)
23
24
25;;; Support functions for `try-completion', `all-completion', and
26;;; `test-completion' tests.
27
28(defun minibuf-tests--strings-to-symbol-list (list)
29 (mapcar #'intern list))
30(defun minibuf-tests--strings-to-symbol-alist (list)
31 (let ((num 0))
32 (mapcar (lambda (str) (cons (intern str) (cl-incf num))) list)))
33(defun minibuf-tests--strings-to-string-alist (list)
34 (let ((num 0))
35 (mapcar (lambda (str) (cons str (cl-incf num))) list)))
36(defun minibuf-tests--strings-to-obarray (list)
37 (let ((ob (make-vector 7 0)))
38 (mapc (lambda (str) (intern str ob)) list)
39 ob))
40(defun minibuf-tests--strings-to-string-hashtable (list)
41 (let ((ht (make-hash-table :test #'equal))
42 (num 0))
43 (mapc (lambda (str) (puthash str (cl-incf num) ht)) list)
44 ht))
45(defun minibuf-tests--strings-to-symbol-hashtable (list)
46 (let ((ht (make-hash-table :test #'equal))
47 (num 0))
48 (mapc (lambda (str) (puthash (intern str) (cl-incf num) ht)) list)
49 ht))
50
51;;; Functions that produce a predicate (for *-completion functions)
52;;; which always returns non-nil for a given collection.
53
54(defun minibuf-tests--memq-of-collection (collection)
55 (lambda (elt) (memq elt collection)))
56(defun minibuf-tests--part-of-obarray (ob)
57 (lambda (sym) (eq (intern-soft (symbol-name sym) ob) sym)))
58(defun minibuf-tests--part-of-hashtable (table)
59 (lambda (k v) (equal (gethash k table) v)))
60
61
62;;; Testing functions that are agnostic to type of COLLECTION.
63
64(defun minibuf-tests--try-completion (xform-collection)
65 (let* ((abcdef (funcall xform-collection '("abc" "def")))
66 (+abba (funcall xform-collection '("abc" "abba" "def"))))
67 (should (equal (try-completion "a" abcdef) "abc"))
68 (should (equal (try-completion "a" +abba) "ab"))
69 (should (equal (try-completion "abc" +abba) t))
70 (should (equal (try-completion "abcd" +abba) nil))))
71
72(defun minibuf-tests--try-completion-pred (xform-collection collection-member)
73 (let* ((abcdef (funcall xform-collection '("abc" "def")))
74 (abcdef-member (funcall collection-member abcdef))
75 (+abba (funcall xform-collection '("abc" "abba" "def")))
76 (+abba-member (funcall collection-member +abba)))
77 (should (equal (try-completion "a" abcdef abcdef-member) "abc"))
78 (should (equal (try-completion "a" +abba +abba-member) "ab"))
79 (should (equal (try-completion "abc" +abba +abba-member) t))
80 (should (equal (try-completion "abcd" +abba +abba-member) nil))
81 (should-not (try-completion "a" abcdef #'ignore))
82 (should-not (try-completion "a" +abba #'ignore))
83 (should-not (try-completion "abc" +abba #'ignore))
84 (should-not (try-completion "abcd" +abba #'ignore))))
85
86(defun minibuf-tests--try-completion-regexp (xform-collection)
87 (let ((abcdef (funcall xform-collection '("abc" "def")))
88 (+abba (funcall xform-collection '("abc" "abba" "def"))))
89 (let ((completion-regexp-list '(".")))
90 (should (equal (try-completion "a" abcdef) "abc"))
91 (should (equal (try-completion "a" +abba) "ab"))
92 (should (equal (try-completion "abc" +abba) t))
93 (should (equal (try-completion "abcd" +abba) nil)))
94 (let ((completion-regexp-list '("X")))
95 (should-not (try-completion "a" abcdef))
96 (should-not (try-completion "a" +abba))
97 (should-not (try-completion "abc" +abba))
98 (should-not (try-completion "abcd" +abba)))))
99
100(defun minibuf-tests--all-completions (xform-collection)
101 (let* ((abcdef (funcall xform-collection '("abc" "def")))
102 (+abba (funcall xform-collection '("abc" "abba" "def"))))
103 (should (equal (all-completions "a" abcdef) '("abc")))
104 (should (equal (all-completions "a" +abba) '("abc" "abba")))
105 (should (equal (all-completions "abc" +abba) '("abc")))
106 (should (equal (all-completions "abcd" +abba) nil))))
107
108(defun minibuf-tests--all-completions-pred (xform-collection collection-member)
109 (let* ((abcdef (funcall xform-collection '("abc" "def")))
110 (abcdef-member (funcall collection-member abcdef))
111 (+abba (funcall xform-collection '("abc" "abba" "def")))
112 (+abba-member (funcall collection-member +abba)))
113 (should (equal (all-completions "a" abcdef abcdef-member) '("abc")))
114 (should (equal (all-completions "a" +abba +abba-member) '("abc" "abba")))
115 (should (equal (all-completions "abc" +abba +abba-member) '("abc")))
116 (should (equal (all-completions "abcd" +abba +abba-member) nil))
117 (should-not (all-completions "a" abcdef #'ignore))
118 (should-not (all-completions "a" +abba #'ignore))
119 (should-not (all-completions "abc" +abba #'ignore))
120 (should-not (all-completions "abcd" +abba #'ignore))))
121
122(defun minibuf-tests--all-completions-regexp (xform-collection)
123 (let ((abcdef (funcall xform-collection '("abc" "def")))
124 (+abba (funcall xform-collection '("abc" "abba" "def"))))
125 (let ((completion-regexp-list '(".")))
126 (should (equal (all-completions "a" abcdef) '("abc")))
127 (should (equal (all-completions "a" +abba) '("abc" "abba")))
128 (should (equal (all-completions "abc" +abba) '("abc")))
129 (should (equal (all-completions "abcd" +abba) nil)))
130 (let ((completion-regexp-list '("X")))
131 (should-not (all-completions "a" abcdef))
132 (should-not (all-completions "a" +abba))
133 (should-not (all-completions "abc" +abba))
134 (should-not (all-completions "abcd" +abba)))))
135
136(defun minibuf-tests--test-completion (xform-collection)
137 (let* ((abcdef (funcall xform-collection '("abc" "def")))
138 (+abba (funcall xform-collection '("abc" "abba" "def"))))
139 (should (test-completion "abc" abcdef))
140 (should (test-completion "def" +abba))
141 (should (test-completion "abba" +abba))
142 (should-not (test-completion "abcd" +abba))))
143
144(defun minibuf-tests--test-completion-pred (xform-collection collection-member)
145 (let* ((abcdef (funcall xform-collection '("abc" "def")))
146 (abcdef-member (funcall collection-member abcdef))
147 (+abba (funcall xform-collection '("abc" "abba" "def")))
148 (+abba-member (funcall collection-member +abba)))
149 (should (test-completion "abc" abcdef abcdef-member))
150 (should (test-completion "def" +abba +abba-member))
151 (should (test-completion "abba" +abba +abba-member))
152 (should-not (test-completion "abcd" +abba +abba-member))
153 (should-not (test-completion "abc" abcdef #'ignore))
154 (should-not (test-completion "def" +abba #'ignore))
155 (should-not (test-completion "abba" +abba #'ignore))
156 (should-not (test-completion "abcd" +abba #'ignore))))
157
158(defun minibuf-tests--test-completion-regexp (xform-collection)
159 (let ((abcdef (funcall xform-collection '("abc" "def")))
160 (+abba (funcall xform-collection '("abc" "abba" "def"))))
161 (let ((completion-regexp-list '(".")))
162 (should (test-completion "abc" abcdef))
163 (should (test-completion "def" +abba))
164 (should (test-completion "abba" +abba))
165 (should-not (test-completion "abcd" +abba)))
166 (let ((completion-regexp-list '("X")))
167 (should-not (test-completion "abc" abcdef))
168 (should-not (test-completion "def" +abba))
169 (should-not (test-completion "abba" +abba))
170 (should-not (test-completion "abcd" +abba)))))
171
172
173;;; Tests for `try-completion'.
174(ert-deftest try-completion-string-list ()
175 (minibuf-tests--try-completion #'identity))
176(ert-deftest try-completion-string-list-predicate ()
177 (minibuf-tests--try-completion-pred
178 #'identity #'minibuf-tests--memq-of-collection))
179(ert-deftest try-completion-string-list-completion-regexp ()
180 (minibuf-tests--try-completion-regexp #'identity))
181
182(ert-deftest try-completion-symbol-list ()
183 (minibuf-tests--try-completion
184 #'minibuf-tests--strings-to-symbol-list))
185(ert-deftest try-completion-symbol-list-predicate ()
186 (minibuf-tests--try-completion-pred
187 #'minibuf-tests--strings-to-symbol-list
188 #'minibuf-tests--memq-of-collection))
189(ert-deftest try-completion-symbol-list-completion-regexp ()
190 (minibuf-tests--try-completion-regexp
191 #'minibuf-tests--strings-to-symbol-list))
192
193(ert-deftest try-completion-symbol-alist ()
194 (minibuf-tests--try-completion
195 #'minibuf-tests--strings-to-symbol-alist))
196(ert-deftest try-completion-symbol-alist-predicate ()
197 (minibuf-tests--try-completion-pred
198 #'minibuf-tests--strings-to-symbol-alist
199 #'minibuf-tests--memq-of-collection))
200(ert-deftest try-completion-symbol-alist-completion-regexp ()
201 (minibuf-tests--try-completion-regexp
202 #'minibuf-tests--strings-to-symbol-alist))
203
204(ert-deftest try-completion-string-alist ()
205 (minibuf-tests--try-completion
206 #'minibuf-tests--strings-to-string-alist))
207(ert-deftest try-completion-string-alist-predicate ()
208 (minibuf-tests--try-completion-pred
209 #'minibuf-tests--strings-to-string-alist
210 #'minibuf-tests--memq-of-collection))
211(ert-deftest try-completion-string-alist-completion-regexp ()
212 (minibuf-tests--try-completion-regexp
213 #'minibuf-tests--strings-to-string-alist))
214
215(ert-deftest try-completion-obarray ()
216 (minibuf-tests--try-completion
217 #'minibuf-tests--strings-to-obarray))
218(ert-deftest try-completion-obarray-predicate ()
219 (minibuf-tests--try-completion-pred
220 #'minibuf-tests--strings-to-obarray
221 #'minibuf-tests--part-of-obarray))
222(ert-deftest try-completion-obarray-completion-regexp ()
223 (minibuf-tests--try-completion-regexp
224 #'minibuf-tests--strings-to-obarray))
225
226(ert-deftest try-completion-string-hashtable ()
227 (minibuf-tests--try-completion
228 #'minibuf-tests--strings-to-string-hashtable))
229(ert-deftest try-completion-string-hashtable-predicate ()
230 (minibuf-tests--try-completion-pred
231 #'minibuf-tests--strings-to-string-hashtable
232 #'minibuf-tests--part-of-hashtable))
233(ert-deftest try-completion-string-hashtable-completion-regexp ()
234 (minibuf-tests--try-completion-regexp
235 #'minibuf-tests--strings-to-string-hashtable))
236
237(ert-deftest try-completion-symbol-hashtable ()
238 (minibuf-tests--try-completion
239 #'minibuf-tests--strings-to-symbol-hashtable))
240(ert-deftest try-completion-symbol-hashtable-predicate ()
241 (minibuf-tests--try-completion-pred
242 #'minibuf-tests--strings-to-symbol-hashtable
243 #'minibuf-tests--part-of-hashtable))
244(ert-deftest try-completion-symbol-hashtable-completion-regexp ()
245 (minibuf-tests--try-completion-regexp
246 #'minibuf-tests--strings-to-symbol-hashtable))
247
248
249;;; Tests for `all-completions'.
250
251(ert-deftest all-completions-string-list ()
252 (minibuf-tests--all-completions #'identity))
253(ert-deftest all-completions-string-list-predicate ()
254 (minibuf-tests--all-completions-pred
255 #'identity #'minibuf-tests--memq-of-collection))
256(ert-deftest all-completions-string-list-completion-regexp ()
257 (minibuf-tests--all-completions-regexp #'identity))
258
259(ert-deftest all-completions-symbol-list ()
260 (minibuf-tests--all-completions
261 #'minibuf-tests--strings-to-symbol-list))
262(ert-deftest all-completions-symbol-list-predicate ()
263 (minibuf-tests--all-completions-pred
264 #'minibuf-tests--strings-to-symbol-list
265 #'minibuf-tests--memq-of-collection))
266(ert-deftest all-completions-symbol-list-completion-regexp ()
267 (minibuf-tests--all-completions-regexp
268 #'minibuf-tests--strings-to-symbol-list))
269
270(ert-deftest all-completions-symbol-alist ()
271 (minibuf-tests--all-completions
272 #'minibuf-tests--strings-to-symbol-alist))
273(ert-deftest all-completions-symbol-alist-predicate ()
274 (minibuf-tests--all-completions-pred
275 #'minibuf-tests--strings-to-symbol-alist
276 #'minibuf-tests--memq-of-collection))
277(ert-deftest all-completions-symbol-alist-completion-regexp ()
278 (minibuf-tests--all-completions-regexp
279 #'minibuf-tests--strings-to-symbol-alist))
280
281(ert-deftest all-completions-string-alist ()
282 (minibuf-tests--all-completions
283 #'minibuf-tests--strings-to-string-alist))
284(ert-deftest all-completions-string-alist-predicate ()
285 (minibuf-tests--all-completions-pred
286 #'minibuf-tests--strings-to-string-alist
287 #'minibuf-tests--memq-of-collection))
288(ert-deftest all-completions-string-alist-completion-regexp ()
289 (minibuf-tests--all-completions-regexp
290 #'minibuf-tests--strings-to-string-alist))
291
292(ert-deftest all-completions-obarray ()
293 (minibuf-tests--all-completions
294 #'minibuf-tests--strings-to-obarray))
295(ert-deftest all-completions-obarray-predicate ()
296 (minibuf-tests--all-completions-pred
297 #'minibuf-tests--strings-to-obarray
298 #'minibuf-tests--part-of-obarray))
299(ert-deftest all-completions-obarray-completion-regexp ()
300 (minibuf-tests--all-completions-regexp
301 #'minibuf-tests--strings-to-obarray))
302
303(ert-deftest all-completions-string-hashtable ()
304 (minibuf-tests--all-completions
305 #'minibuf-tests--strings-to-string-hashtable))
306(ert-deftest all-completions-string-hashtable-predicate ()
307 (minibuf-tests--all-completions-pred
308 #'minibuf-tests--strings-to-string-hashtable
309 #'minibuf-tests--part-of-hashtable))
310(ert-deftest all-completions-string-hashtable-completion-regexp ()
311 (minibuf-tests--all-completions-regexp
312 #'minibuf-tests--strings-to-string-hashtable))
313
314(ert-deftest all-completions-symbol-hashtable ()
315 (minibuf-tests--all-completions
316 #'minibuf-tests--strings-to-symbol-hashtable))
317(ert-deftest all-completions-symbol-hashtable-predicate ()
318 (minibuf-tests--all-completions-pred
319 #'minibuf-tests--strings-to-symbol-hashtable
320 #'minibuf-tests--part-of-hashtable))
321(ert-deftest all-completions-symbol-hashtable-completion-regexp ()
322 (minibuf-tests--all-completions-regexp
323 #'minibuf-tests--strings-to-symbol-hashtable))
324
325
326;;; Tests for `test-completion'.
327
328(ert-deftest test-completion-string-list ()
329 (minibuf-tests--test-completion #'identity))
330(ert-deftest test-completion-string-list-predicate ()
331 (minibuf-tests--test-completion-pred
332 #'identity #'minibuf-tests--memq-of-collection))
333(ert-deftest test-completion-string-list-completion-regexp ()
334 (minibuf-tests--test-completion-regexp #'identity))
335
336(ert-deftest test-completion-symbol-list ()
337 (minibuf-tests--test-completion
338 #'minibuf-tests--strings-to-symbol-list))
339(ert-deftest test-completion-symbol-list-predicate ()
340 (minibuf-tests--test-completion-pred
341 #'minibuf-tests--strings-to-symbol-list
342 #'minibuf-tests--memq-of-collection))
343(ert-deftest test-completion-symbol-list-completion-regexp ()
344 (minibuf-tests--test-completion-regexp
345 #'minibuf-tests--strings-to-symbol-list))
346
347(ert-deftest test-completion-symbol-alist ()
348 (minibuf-tests--test-completion
349 #'minibuf-tests--strings-to-symbol-alist))
350(ert-deftest test-completion-symbol-alist-predicate ()
351 (minibuf-tests--test-completion-pred
352 #'minibuf-tests--strings-to-symbol-alist
353 #'minibuf-tests--memq-of-collection))
354(ert-deftest test-completion-symbol-alist-completion-regexp ()
355 (minibuf-tests--test-completion-regexp
356 #'minibuf-tests--strings-to-symbol-alist))
357
358(ert-deftest test-completion-string-alist ()
359 (minibuf-tests--test-completion
360 #'minibuf-tests--strings-to-string-alist))
361(ert-deftest test-completion-string-alist-predicate ()
362 (minibuf-tests--test-completion-pred
363 #'minibuf-tests--strings-to-string-alist
364 #'minibuf-tests--memq-of-collection))
365(ert-deftest test-completion-string-alist-completion-regexp ()
366 (minibuf-tests--test-completion-regexp
367 #'minibuf-tests--strings-to-string-alist))
368
369(ert-deftest test-completion-obarray ()
370 (minibuf-tests--test-completion
371 #'minibuf-tests--strings-to-obarray))
372(ert-deftest test-completion-obarray-predicate ()
373 (minibuf-tests--test-completion-pred
374 #'minibuf-tests--strings-to-obarray
375 #'minibuf-tests--part-of-obarray))
376(ert-deftest test-completion-obarray-completion-regexp ()
377 (minibuf-tests--test-completion-regexp
378 #'minibuf-tests--strings-to-obarray))
379
380(ert-deftest test-completion-string-hashtable ()
381 (minibuf-tests--test-completion
382 #'minibuf-tests--strings-to-string-hashtable))
383(ert-deftest test-completion-string-hashtable-predicate ()
384 (minibuf-tests--test-completion-pred
385 #'minibuf-tests--strings-to-string-hashtable
386 #'minibuf-tests--part-of-hashtable))
387(ert-deftest test-completion-string-hashtable-completion-regexp ()
388 (minibuf-tests--test-completion-regexp
389 #'minibuf-tests--strings-to-string-hashtable))
390
391(ert-deftest test-completion-symbol-hashtable ()
392 (minibuf-tests--test-completion
393 #'minibuf-tests--strings-to-symbol-hashtable))
394(ert-deftest test-completion-symbol-hashtable-predicate ()
395 (minibuf-tests--test-completion-pred
396 #'minibuf-tests--strings-to-symbol-hashtable
397 ;; The predicate recieves a string as the key in this case.
398 (lambda (table)
399 (let ((in-table (minibuf-tests--part-of-hashtable table)))
400 (lambda (k v) (funcall in-table (intern k) v))))))
401(ert-deftest test-completion-symbol-hashtable-completion-regexp ()
402 (minibuf-tests--test-completion-regexp
403 #'minibuf-tests--strings-to-symbol-hashtable))
404
405
406;;; minibuf-tests.el ends here