2
;;;; Author: Paul Dietz
3
;;;; Created: Thu May 29 07:15:06 2003
4
;;;; Contains: Tests of FIND-CLASS
6
;; find-class is also tested in numerous other places.
11
(loop for name in *cl-types-that-are-classes-symbols*
12
unless (eq (find-class name) (find-class name))
17
(loop for name in *cl-types-that-are-classes-symbols*
18
unless (eq (find-class name t) (find-class name))
23
(loop for name in *cl-types-that-are-classes-symbols*
24
unless (eq (find-class name nil) (find-class name))
30
(progn (eval '(find-class (gensym))) :bad)
36
(progn (eval '(find-class (gensym) t)) :bad)
41
(find-class (gensym) nil)
45
(loop for name in *cl-types-that-are-classes-symbols*
46
unless (eq (find-class name t nil) (find-class name))
51
(loop for name in *cl-types-that-are-classes-symbols*
52
unless (eq (find-class name nil nil) (find-class name))
58
((%m (&environment env)
60
(loop for name in *cl-types-that-are-classes-symbols*
61
unless (eq (find-class name nil env)
68
(deftest find-class.10
70
((%m (&environment env)
72
(loop for name in *cl-types-that-are-classes-symbols*
73
unless (eq (find-class name t env)
80
(deftest find-class.11
82
(progn (eval '(find-class (gensym) 'a nil)) :bad)
86
(deftest find-class.12
87
(find-class (gensym) nil nil)
90
(deftest find-class.13
92
((%m (&environment env)
93
`',(find-class (gensym) nil env)))
97
(deftest find-class.14
101
((%m (&environment env)
102
`',(find-class (gensym) 17 env)))
108
;;; Need tests of assignment to (FIND-CLASS ...)
110
;;; Setting class to itself
111
;;; Changing class to a different class
112
;;; Changing to NIL (and that the class object stays around)
113
;;; Check that find-class is affected by the assignment, and
114
;;; class-name is not.
116
(deftest find-class.15
118
(setf (find-class 'find-class-class-01) nil)
119
(let* ((class (eval '(defclass find-class-class-01 () ())))
120
(class1 (find-class 'find-class-class-01))
121
(class2 (setf (find-class 'find-class-class-01) class1)))
127
t t find-class-class-01)
129
(deftest find-class.16
131
(setf (find-class 'find-class-class-01 nil) nil)
132
(setf (find-class 'find-class-class-01 t) nil) ;; should not throw error
134
(class (eval '(defclass find-class-class-01 () ())))
135
(class1 (find-class 'find-class-class-01))
136
(class2 (setf (find-class 'find-class-class-01 (incf i)) class1)))
140
(eqt class class2))))
143
(deftest find-class.17
145
((%m (&environment env)
147
(setf (find-class 'find-class-class-01) nil)
151
(class (eval '(defclass find-class-class-01 () ())))
152
(class1 (find-class (progn (setf x (incf i))
153
'find-class-class-01)
155
(progn (setf z (incf i)) env)))
156
(class2 (setf (find-class 'find-class-class-01) class1)))
165
(deftest find-class.18
167
(setf (find-class 'find-class-class-01) nil)
168
(let* ((class (eval '(defclass find-class-class-01 () ())))
169
(class1 (find-class 'find-class-class-01))
170
(class2 (setf (find-class 'find-class-class-01) nil))
171
(class3 (find-class 'find-class-class-01 nil)))
178
t nil nil find-class-class-01 nil)
180
(deftest find-class.19
182
(setf (find-class 'find-class-class-01 nil) nil)
183
(setf (find-class 'find-class-class-01 t) nil) ;; should not throw error
184
(let* ((class (eval '(defclass find-class-class-01 () ())))
185
(class1 (find-class 'find-class-class-01))
186
(class2 (setf (find-class 'find-class-class-01 t nil)
190
(eqt class class2))))
193
;; Change to a different class
195
(deftest find-class.20
197
(setf (find-class 'find-class-class-01) nil)
198
(setf (find-class 'find-class-class-02) nil)
199
(let* ((class1 (eval '(defclass find-class-class-01 () ())))
200
(class2 (eval '(defclass find-class-class-02 () ()))))
201
(setf (find-class 'find-class-class-01) class2)
202
(let* ((new-class1 (find-class 'find-class-class-01 nil))
203
(new-class2 (find-class 'find-class-class-02)))
206
(eqt class2 new-class1)
207
(eqt class2 new-class2)
208
(class-name class2)))))
209
nil t t find-class-class-02)
211
(deftest find-class.21
213
(setf (find-class 'find-class-class-01) nil)
214
(setf (find-class 'find-class-class-02) nil)
215
(let* ((class1 (eval '(defclass find-class-class-01 () ())))
216
(class2 (eval '(defclass find-class-class-02 () ()))))
217
(psetf (find-class 'find-class-class-01) class2
218
(find-class 'find-class-class-02) class1)
219
(let* ((new-class1 (find-class 'find-class-class-01 nil))
220
(new-class2 (find-class 'find-class-class-02)))
223
(eqt class2 new-class1)
224
(eqt class1 new-class2)
225
(class-name new-class1)
226
(class-name new-class2)
228
nil t t find-class-class-02 find-class-class-01)
230
;;; Effect on method dispatch
232
(deftest find-class.22
234
(setf (find-class 'find-class-class-01) nil)
236
'(defclass find-class-class-01 () ())))
237
(fn (eval '(defgeneric find-class-gf-01 (x)
238
(:method ((x find-class-class-01)) :good)
239
(:method ((x t)) nil))))
240
(obj (make-instance class1)))
241
(assert (typep fn 'function))
243
(declare (type function fn))
247
(setf (find-class 'find-class-class-01) nil)
250
nil :good nil nil :good)
252
(deftest find-class.23
254
(setf (find-class 'find-class-class-01) nil)
255
(setf (find-class 'find-class-class-02) nil)
256
(let* ((class1 (eval '(defclass find-class-class-01 () ())))
257
(class2 (eval '(defclass find-class-class-02
258
(find-class-class-01) ())))
259
(fn (eval '(defgeneric find-class-gf-02 (x)
260
(:method ((x find-class-class-01)) 1)
261
(:method ((x find-class-class-02)) 2)
262
(:method ((x t)) t))))
263
(obj1 (make-instance class1))
264
(obj2 (make-instance class2)))
265
(assert (typep fn 'function))
267
(declare (type function fn))
272
(setf (find-class 'find-class-class-01) nil)
275
(funcall fn obj2)))))
280
(deftest find-class.error.1
281
(signals-error (find-class) program-error)
284
(deftest find-class.error.2
285
(signals-error (find-class 'symbol nil nil nil) program-error)