aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/automated/cl-generic-tests.el40
1 files changed, 35 insertions, 5 deletions
diff --git a/test/automated/cl-generic-tests.el b/test/automated/cl-generic-tests.el
index a6035d1cba2..2703b44dee5 100644
--- a/test/automated/cl-generic-tests.el
+++ b/test/automated/cl-generic-tests.el
@@ -26,15 +26,18 @@
26(eval-when-compile (require 'ert)) ;Don't indirectly require cl-lib at run-time. 26(eval-when-compile (require 'ert)) ;Don't indirectly require cl-lib at run-time.
27(require 'cl-generic) 27(require 'cl-generic)
28 28
29(fmakunbound 'cl--generic-1)
29(cl-defgeneric cl--generic-1 (x y)) 30(cl-defgeneric cl--generic-1 (x y))
30(cl-defgeneric (setf cl--generic-1) (v y z) "My generic doc.") 31(cl-defgeneric (setf cl--generic-1) (v y z) "My generic doc.")
31 32
32(ert-deftest cl-generic-test-00 () 33(ert-deftest cl-generic-test-00 ()
34 (fmakunbound 'cl--generic-1)
33 (cl-defgeneric cl--generic-1 (x y)) 35 (cl-defgeneric cl--generic-1 (x y))
34 (cl-defmethod cl--generic-1 ((x t) y) (cons x y)) 36 (cl-defmethod cl--generic-1 ((x t) y) (cons x y))
35 (should (equal (cl--generic-1 'a 'b) '(a . b)))) 37 (should (equal (cl--generic-1 'a 'b) '(a . b))))
36 38
37(ert-deftest cl-generic-test-01-eql () 39(ert-deftest cl-generic-test-01-eql ()
40 (fmakunbound 'cl--generic-1)
38 (cl-defgeneric cl--generic-1 (x y)) 41 (cl-defgeneric cl--generic-1 (x y))
39 (cl-defmethod cl--generic-1 ((x t) y) (cons x y)) 42 (cl-defmethod cl--generic-1 ((x t) y) (cons x y))
40 (cl-defmethod cl--generic-1 ((_x (eql 4)) _y) 43 (cl-defmethod cl--generic-1 ((_x (eql 4)) _y)
@@ -54,6 +57,7 @@
54(cl-defstruct (cl-generic-struct-child2 (:include cl-generic-struct-parent)) e) 57(cl-defstruct (cl-generic-struct-child2 (:include cl-generic-struct-parent)) e)
55 58
56(ert-deftest cl-generic-test-02-struct () 59(ert-deftest cl-generic-test-02-struct ()
60 (fmakunbound 'cl--generic-1)
57 (cl-defgeneric cl--generic-1 (x y) "My doc.") 61 (cl-defgeneric cl--generic-1 (x y) "My doc.")
58 (cl-defmethod cl--generic-1 ((x t) y) "Doc 1." (cons x y)) 62 (cl-defmethod cl--generic-1 ((x t) y) "Doc 1." (cons x y))
59 (cl-defmethod cl--generic-1 ((_x cl-generic-struct-parent) y) 63 (cl-defmethod cl--generic-1 ((_x cl-generic-struct-parent) y)
@@ -91,6 +95,7 @@
91 (should (equal x '(3 2 1))))) 95 (should (equal x '(3 2 1)))))
92 96
93(ert-deftest cl-generic-test-04-overlapping-tagcodes () 97(ert-deftest cl-generic-test-04-overlapping-tagcodes ()
98 (fmakunbound 'cl--generic-1)
94 (cl-defgeneric cl--generic-1 (x y) "My doc.") 99 (cl-defgeneric cl--generic-1 (x y) "My doc.")
95 (cl-defmethod cl--generic-1 ((y t) z) (list y z)) 100 (cl-defmethod cl--generic-1 ((y t) z) (list y z))
96 (cl-defmethod cl--generic-1 ((_y (eql 4)) _z) 101 (cl-defmethod cl--generic-1 ((_y (eql 4)) _z)
@@ -104,6 +109,7 @@
104 (should (equal (cl--generic-1 4 'b) '("four" "integer" "number" 4 b)))) 109 (should (equal (cl--generic-1 4 'b) '("four" "integer" "number" 4 b))))
105 110
106(ert-deftest cl-generic-test-05-alias () 111(ert-deftest cl-generic-test-05-alias ()
112 (fmakunbound 'cl--generic-1)
107 (cl-defgeneric cl--generic-1 (x y) "My doc.") 113 (cl-defgeneric cl--generic-1 (x y) "My doc.")
108 (defalias 'cl--generic-2 #'cl--generic-1) 114 (defalias 'cl--generic-2 #'cl--generic-1)
109 (cl-defmethod cl--generic-1 ((y t) z) (list y z)) 115 (cl-defmethod cl--generic-1 ((y t) z) (list y z))
@@ -112,6 +118,7 @@
112 (should (equal (cl--generic-1 4 'b) '("four" 4 b)))) 118 (should (equal (cl--generic-1 4 'b) '("four" 4 b))))
113 119
114(ert-deftest cl-generic-test-06-multiple-dispatch () 120(ert-deftest cl-generic-test-06-multiple-dispatch ()
121 (fmakunbound 'cl--generic-1)
115 (cl-defgeneric cl--generic-1 (x y) "My doc.") 122 (cl-defgeneric cl--generic-1 (x y) "My doc.")
116 (cl-defmethod cl--generic-1 (x y) (list x y)) 123 (cl-defmethod cl--generic-1 (x y) (list x y))
117 (cl-defmethod cl--generic-1 (_x (_y integer)) 124 (cl-defmethod cl--generic-1 (_x (_y integer))
@@ -123,6 +130,7 @@
123 (should (equal (cl--generic-1 1 2) '("x&y-int" "x-int" "y-int" 1 2)))) 130 (should (equal (cl--generic-1 1 2) '("x&y-int" "x-int" "y-int" 1 2))))
124 131
125(ert-deftest cl-generic-test-07-apo () 132(ert-deftest cl-generic-test-07-apo ()
133 (fmakunbound 'cl--generic-1)
126 (cl-defgeneric cl--generic-1 (x y) 134 (cl-defgeneric cl--generic-1 (x y)
127 (:documentation "My doc.") (:argument-precedence-order y x)) 135 (:documentation "My doc.") (:argument-precedence-order y x))
128 (cl-defmethod cl--generic-1 (x y) (list x y)) 136 (cl-defmethod cl--generic-1 (x y) (list x y))
@@ -136,6 +144,7 @@
136 144
137(ert-deftest cl-generic-test-08-after/before () 145(ert-deftest cl-generic-test-08-after/before ()
138 (let ((log ())) 146 (let ((log ()))
147 (fmakunbound 'cl--generic-1)
139 (cl-defgeneric cl--generic-1 (x y)) 148 (cl-defgeneric cl--generic-1 (x y))
140 (cl-defmethod cl--generic-1 ((_x t) y) (cons y log)) 149 (cl-defmethod cl--generic-1 ((_x t) y) (cons y log))
141 (cl-defmethod cl--generic-1 ((_x (eql 4)) _y) 150 (cl-defmethod cl--generic-1 ((_x (eql 4)) _y)
@@ -150,6 +159,7 @@
150(defun cl--generic-test-advice (&rest args) (cons "advice" (apply args))) 159(defun cl--generic-test-advice (&rest args) (cons "advice" (apply args)))
151 160
152(ert-deftest cl-generic-test-09-advice () 161(ert-deftest cl-generic-test-09-advice ()
162 (fmakunbound 'cl--generic-1)
153 (cl-defgeneric cl--generic-1 (x y) "My doc.") 163 (cl-defgeneric cl--generic-1 (x y) "My doc.")
154 (cl-defmethod cl--generic-1 (x y) (list x y)) 164 (cl-defmethod cl--generic-1 (x y) (list x y))
155 (advice-add 'cl--generic-1 :around #'cl--generic-test-advice) 165 (advice-add 'cl--generic-1 :around #'cl--generic-test-advice)
@@ -161,6 +171,7 @@
161 (should (equal (cl--generic-1 4 5) '("integer" 4 5)))) 171 (should (equal (cl--generic-1 4 5) '("integer" 4 5))))
162 172
163(ert-deftest cl-generic-test-10-weird () 173(ert-deftest cl-generic-test-10-weird ()
174 (fmakunbound 'cl--generic-1)
164 (cl-defgeneric cl--generic-1 (x &rest r) "My doc.") 175 (cl-defgeneric cl--generic-1 (x &rest r) "My doc.")
165 (cl-defmethod cl--generic-1 (x &rest r) (cons x r)) 176 (cl-defmethod cl--generic-1 (x &rest r) (cons x r))
166 ;; This kind of definition is not valid according to CLHS, but it does show 177 ;; This kind of definition is not valid according to CLHS, but it does show
@@ -172,6 +183,7 @@
172 (should (equal (cl--generic-1 1 2) '("integer" 2 1)))) 183 (should (equal (cl--generic-1 1 2) '("integer" 2 1))))
173 184
174(ert-deftest cl-generic-test-11-next-method-p () 185(ert-deftest cl-generic-test-11-next-method-p ()
186 (fmakunbound 'cl--generic-1)
175 (cl-defgeneric cl--generic-1 (x y)) 187 (cl-defgeneric cl--generic-1 (x y))
176 (cl-defmethod cl--generic-1 ((x t) y) 188 (cl-defmethod cl--generic-1 ((x t) y)
177 (list x y (cl-next-method-p))) 189 (list x y (cl-next-method-p)))
@@ -179,15 +191,33 @@
179 (cl-list* "quatre" (cl-next-method-p) (cl-call-next-method))) 191 (cl-list* "quatre" (cl-next-method-p) (cl-call-next-method)))
180 (should (equal (cl--generic-1 4 5) '("quatre" t 4 5 nil)))) 192 (should (equal (cl--generic-1 4 5) '("quatre" t 4 5 nil))))
181 193
182(ert-deftest sm-generic-test-12-context () 194(ert-deftest cl-generic-test-12-context ()
195 (fmakunbound 'cl--generic-1)
183 (cl-defgeneric cl--generic-1 ()) 196 (cl-defgeneric cl--generic-1 ())
184 (cl-defmethod cl--generic-1 (&context (overwrite-mode (eql t))) 'is-t) 197 (cl-defmethod cl--generic-1 (&context (overwrite-mode (eql t)))
185 (cl-defmethod cl--generic-1 (&context (overwrite-mode (eql nil))) 'is-nil) 198 (list 'is-t (cl-call-next-method)))
186 (cl-defmethod cl--generic-1 () 'other) 199 (cl-defmethod cl--generic-1 (&context (overwrite-mode (eql nil)))
200 (list 'is-nil (cl-call-next-method)))
201 (cl-defmethod cl--generic-1 () 'any)
187 (should (equal (list (let ((overwrite-mode t)) (cl--generic-1)) 202 (should (equal (list (let ((overwrite-mode t)) (cl--generic-1))
188 (let ((overwrite-mode nil)) (cl--generic-1)) 203 (let ((overwrite-mode nil)) (cl--generic-1))
189 (let ((overwrite-mode 1)) (cl--generic-1))) 204 (let ((overwrite-mode 1)) (cl--generic-1)))
190 '(is-t is-nil other)))) 205 '((is-t any) (is-nil any) any))))
206
207(ert-deftest cl-generic-test-13-head ()
208 (fmakunbound 'cl--generic-1)
209 (cl-defgeneric cl--generic-1 (x y))
210 (cl-defmethod cl--generic-1 ((x t) y) (cons x y))
211 (cl-defmethod cl--generic-1 ((_x (head 4)) _y)
212 (cons "quatre" (cl-call-next-method)))
213 (cl-defmethod cl--generic-1 ((_x (head 5)) _y)
214 (cons "cinq" (cl-call-next-method)))
215 (cl-defmethod cl--generic-1 ((_x (head 6)) y)
216 (cons "six" (cl-call-next-method 'a y)))
217 (should (equal (cl--generic-1 'a nil) '(a)))
218 (should (equal (cl--generic-1 '(4) nil) '("quatre" (4))))
219 (should (equal (cl--generic-1 '(5) nil) '("cinq" (5))))
220 (should (equal (cl--generic-1 '(6) nil) '("six" a))))
191 221
192(provide 'cl-generic-tests) 222(provide 'cl-generic-tests)
193;;; cl-generic-tests.el ends here 223;;; cl-generic-tests.el ends here