1 ;;;-*- Mode: Lisp; Package: LIFT -*-
5 See file COPYING for license
9 (in-package #:lift-test
)
11 (deftestsuite lift-test
()
14 (*test-break-on-errors?
* nil
)
15 (*test-break-on-failures?
* nil
)))
17 ;;; ---------------------------------------------------------------------------
19 ;;; make sure that ensure and its friends work as expected
21 ;;; The strategy here is to pair "regular" tests with meta-tests. The
22 ;;; regular tests are normal tests written using LIFT. The meta-tests
23 ;;; use run-tests or run-tests to run the regular test and then grovel
24 ;;; over the returned test-result to make sure it contains what it is
27 ;;; Note that if we don't pass in :report-pathname nil, then we'll get a lot
28 ;;; of spurious extra report files...
29 ;;; ---------------------------------------------------------------------------
31 (deftestsuite lift-test-ensure
(lift-test) ())
33 (deftestsuite lift-test-ensure-helper
() ())
35 (addtest (lift-test-ensure-helper)
39 (addtest (lift-test-ensure)
41 (let ((tr (run-test :suite
'lift-test-ensure-helper
42 :name
'simple-ensure-test-1
)))
43 (ensure-same (length (tests-run tr
)) 1)
44 (ensure-null (failures tr
))
45 (ensure-null (errors tr
))
46 (ensure-same (test-mode tr
) :single
)
47 (ensure-same (mapcar #'second
(tests-run tr
))
48 '(lift-test::simple-ensure-test-1
))))
50 ;;; ---------------------------------------------------------------------------
52 (addtest (lift-test-ensure-helper)
56 (addtest (lift-test-ensure)
58 (let ((tr (run-test :suite
'lift-test-ensure-helper
59 :name
'simple-ensure-test-2
)))
60 (ensure-same (length (tests-run tr
)) 1 :report
"Number of tests-run")
61 (ensure-same (length (failures tr
)) 1 :report
"Number of failures")
62 (ensure-null (errors tr
) :report
"Number of errors")
63 (ensure-same (mapcar #'second
(tests-run tr
))
64 '(lift-test::simple-ensure-test-2
))))
66 ;;; ---------------------------------------------------------------------------
68 (addtest (lift-test-ensure-helper)
71 (ensure (let ((x 0)) (/ x
)))
76 (addtest (lift-test-ensure)
78 (let ((tr (run-test :suite
'lift-test-ensure-helper
79 :name
'simple-ensure-test-3
)))
80 (ensure-same (length (tests-run tr
)) 1)
81 (ensure-same (length (failures tr
)) 0)
82 (ensure-same (length (errors tr
)) 1)
83 (ensure-same (mapcar #'second
(tests-run tr
))
84 '(lift-test::simple-ensure-test-3
))))
87 ;;; ---------------------------------------------------------------------------
88 ;;; lift-test-setup-teardown
89 ;;; make sure that setup and teardown happen in the right order
90 ;;; ---------------------------------------------------------------------------
92 (deftestsuite lift-test-setup-teardown
(lift-test) ())
94 (deftestsuite lift-test-setup-teardown-1
(lift-test-setup-teardown) ()
95 (:setup
(push 1 *test-notepad
*))
96 (:teardown
(push :a
*test-notepad
*))
97 (:tests
(setup-teardown-1 (push 'test-1
*test-notepad
*))))
99 (addtest (lift-test-setup-teardown)
101 (setf *test-notepad
* nil
)
103 :name
'setup-teardown-1
104 :suite
'lift-test-setup-teardown-1
105 :result
(make-test-result 'lift-test-setup-teardown-1
:single
))
106 (ensure-same (reverse *test-notepad
*)
109 (addtest (lift-test-setup-teardown)
111 (setf *test-notepad
* nil
)
113 :suite
'lift-test-setup-teardown-1
114 :result
(make-test-result 'lift-test-setup-teardown-1
:multiple
)
115 :report-pathname nil
)
116 (ensure-same (reverse *test-notepad
*)
117 '(1 test-1
:a
1 2 test-2
:b
:a
1 2 3 test-3
:c
:b
:a
)))
119 (deftestsuite lift-test-setup-teardown-2
(lift-test-setup-teardown-1) ()
120 (:setup
(push 2 *test-notepad
*))
121 (:teardown
(push :b
*test-notepad
*))
122 (:tests
(setup-teardown-2 (push 'test-2
*test-notepad
*))))
124 (deftestsuite lift-test-setup-teardown-3
(lift-test-setup-teardown-2) ()
125 (:setup
(push 3 *test-notepad
*))
126 (:teardown
(push :c
*test-notepad
*))
127 (:tests
(setup-teardown-3 (push 'test-3
*test-notepad
*))))
129 (addtest (lift-test-setup-teardown)
131 (setf *test-notepad
* nil
)
133 :name
'setup-teardown-3
134 :suite
'lift-test-setup-teardown-3
135 :result
(make-test-result 'lift-test-setup-teardown-3
:single
))
136 (ensure-same (reverse *test-notepad
*)
137 '(1 2 3 test-3
:c
:b
:a
)))
139 (addtest (lift-test-setup-teardown)
141 (setf *test-notepad
* nil
)
143 :suite
'lift-test-setup-teardown-3
144 :result
(make-test-result 'lift-test-setup-teardown-3
:multiple
)
145 :report-pathname nil
)
146 (ensure-same (reverse *test-notepad
*)
147 '(1 2 3 test-3
:c
:b
:a
)))
149 ;;; ---------------------------------------------------------------------------
151 ;;; ---------------------------------------------------------------------------
153 (deftestsuite lift-test-ensure-comparisons
(lift-test)
156 ;;?? Gary King 2004-06-21: not really a test yet, more of a syntax works check
157 (addtest (lift-test-ensure-comparisons)
160 (ensure-same 2 2 :test
=)
161 (ensure-same 2 2 :test
'=)
162 (ensure-same 2 2 :test
#'=))
164 (addtest (lift-test-ensure-comparisons)
167 (= (abs a
) (abs b
))))
168 (ensure-same 2 -
2 :test
#'check
)
169 (ensure-same 2 -
2 :test
'check
)
170 (ensure-same 2 -
2 :test check
)))
172 (addtest (lift-test-ensure-comparisons)
174 (labels ((check (a b
)
175 (= (abs a
) (abs b
))))
176 (ensure-same 2 -
2 :test
#'check
)
177 (ensure-same 2 -
2 :test
'check
)
178 (ensure-same 2 -
2 :test check
)))
180 (defun %make-test-ensure-same-test
(fn)
184 (addtest (lift-test-ensure-comparisons)
185 same-test-with-test-maker
186 (ensure-same 2 2 :test
(%make-test-ensure-same-test
#'=)))
188 ;;?? Gary King 2004-06-21: not really a test yet, more of a syntax works check
189 (addtest (lift-test-ensure-comparisons)
191 (ensure-different 2 -
12)
192 (ensure-different -
2 2 :test
=)
193 (ensure-different 20 2 :test
'=)
194 (ensure-different 2 2.1 :test
#'=))
196 (addtest (lift-test-ensure-comparisons)
199 (= (abs a
) (abs b
))))
200 (ensure-different 2 -
2.1 :test
#'check
)
201 (ensure-different 1.9 -
2 :test
'check
)
202 (ensure-different 20 -
2 :test check
)))
204 (addtest (lift-test-ensure-comparisons)
205 different-test-labels
206 (labels ((check (a b
)
207 (= (abs a
) (abs b
))))
208 (ensure-different 2 -
2.1 :test
#'check
)
209 (ensure-different 1.9 -
2 :test
'check
)
210 (ensure-different 20 -
2 :test check
)))
212 (addtest (lift-test-ensure-comparisons)
213 different-test-with-test-maker
214 (ensure-different 20 2 :test
(%make-test-ensure-same-test
#'=)))
218 ;;; ---------------------------------------------------------------------------
219 ;;; test single setup
220 ;;; ---------------------------------------------------------------------------
222 (deftestsuite test-single-setup
(lift-test) ())
225 (deftestsuite test-single-setup-helper
() ())
227 (deftestsuite test-single-setup-child-a
(test-single-setup-helper) ()
228 (:setup
(push :a
*test-notepad
*))
229 (:test
(test-1 (ensure t
))))
231 (deftestsuite test-single-setup-child-a-1
(test-single-setup-child-a) ()
232 (:setup
(push :a-1
*test-notepad
*))
233 (:test
(test-1 (ensure t
)))
234 (:test
(test-2 (ensure t
))))
236 (deftestsuite test-single-setup-child-b
(test-single-setup-helper) ()
237 (:setup
(push :b
*test-notepad
*))
238 (:test
(test-1 (ensure t
))))
240 (deftestsuite test-single-setup-child-b-1-ss
(test-single-setup-child-b) ()
241 (:run-setup
:once-per-suite
)
242 (:setup
(push :b-1
*test-notepad
*))
243 (:test
(test-1 (ensure t
)))
244 (:test
(test-2 (ensure t
))))
246 (deftestsuite test-single-setup-child-b-1-a
(test-single-setup-child-b-1-ss) ()
247 (:setup
(push :b-1-a
*test-notepad
*))
248 (:test
(test-1 (ensure t
)))
249 (:test
(test-2 (ensure t
))))
251 (deftestsuite test-single-setup-child-b-1-b
(test-single-setup-child-b-1-ss) ()
252 (:setup
(push :b-1-b
*test-notepad
*))
253 (:test
(test-1 (ensure t
)))
254 (:test
(test-2 (ensure t
))))
256 (deftestsuite test-single-setup-child-c
(test-single-setup-helper) ()
257 (:setup
(push :c
*test-notepad
*))
258 (:test
(test-1 (ensure t
))))
260 (deftestsuite test-single-setup-child-c-1
(test-single-setup-child-c) ()
261 (:setup
(push :c-1
*test-notepad
*))
262 (:test
(test-1 (ensure t
))))
264 ;;; ---------------------------------------------------------------------------
266 (addtest (test-single-setup)
267 test-a-multiple-setup
268 (setf *test-notepad
* nil
)
269 (run-test :suite
'test-single-setup-child-a-1
:name
'test-1
)
270 (run-test :suite
'test-single-setup-child-a-1
:name
'test-2
)
271 (ensure-same *test-notepad
* '(:a-1
:a
:a-1
:a
)))
273 (addtest (test-single-setup)
274 test-b-single-setup-1
275 (setf *test-notepad
* nil
)
276 (run-test :suite
'test-single-setup-child-b-1-ss
:name
'test-1
)
277 (run-test :suite
'test-single-setup-child-b-1-ss
:name
'test-2
)
278 ;; single tests do all the setup so this should be exactly the same
279 (ensure-same *test-notepad
* '(:b-1
:b
:b-1
:b
)))
281 (addtest (test-single-setup)
282 test-a-single-setup-2
283 (setf *test-notepad
* nil
)
284 (run-tests :suite
'test-single-setup-child-a-1
:do-children? nil
285 :report-pathname nil
)
286 (ensure-same *test-notepad
* '(:a-1
:a
:a-1
:a
)))
288 (addtest (test-single-setup)
289 test-a-single-setup-3
290 (setf *test-notepad
* nil
)
291 (run-tests :suite
'test-single-setup-child-a-1
292 :run-setup
:once-per-suite
294 :report-pathname nil
)
295 (ensure-same *test-notepad
* '(:a-1
:a
:a-1
:a
)))
297 (addtest (test-single-setup)
298 test-b-single-setup-2
299 (setf *test-notepad
* nil
)
300 (run-tests :suite
'test-single-setup-child-b-1-ss
:do-children? nil
301 :report-pathname nil
)
302 (ensure-same *test-notepad
* '(:b-1
:b
)))
304 ;;; ---------------------------------------------------------------------------
306 ;;; ---------------------------------------------------------------------------
308 (deftestsuite test-ignore-warnings
(lift-test) ())
310 (deftestsuite test-ignore-warnings-helper
() ())
312 (deftestsuite test-ignore-warnings-helper-warning
(test-ignore-warnings-helper) ()
314 (push :a
*test-scratchpad
*)
316 (push :b
*test-scratchpad
*))))
318 (deftestsuite test-ignore-warnings-helper-no-warning
(test-ignore-warnings-helper) ()
320 (push :a
*test-scratchpad
*)
322 (push :b
*test-scratchpad
*))))
324 (addtest (test-ignore-warnings)
326 (run-test :suite
'test-ignore-warnings-helper-warning
:name
'do-it
)
327 (ensure-same *test-scratchpad
* '(:b
:a
)))
329 (addtest (test-ignore-warnings)
331 (run-test :suite
'test-ignore-warnings-helper-no-warning
:name
'do-it
)
332 (ensure-same *test-scratchpad
* '(:b
:a
)))
335 ;;; ---------------------------------------------------------------------------
336 ;;; test-creating-multiple-tests
337 ;;; ---------------------------------------------------------------------------
339 (deftestsuite test-creating-multiple-tests
(lift-test)
342 (deftestsuite test-creating-multiple-tests-helper
()
344 (:tests
((ensure-same 1 1)
346 ((ensure-same 3 3))))
348 (addtest (test-creating-multiple-tests)
350 (ensure-same (testsuite-test-count 'test-creating-multiple-tests-helper
) 2))
354 (defvar *dynamics-after-setup
* :das
)
356 (deftestsuite dynamics-after-setup
(lift-test)
358 :setup
(setf *test-notepad
* nil
))
360 (deftestsuite dynamics-after-setup-helper
()
361 ((slot (progn (push :slot
*test-notepad
*) :slot
)))
362 :dynamic-variables
(*dynamics-after-setup
*
363 (progn (push :dynamics
*test-notepad
*) :dynamics
))
364 (:setup
(push :setup
*test-notepad
*) (print (list :tn
*test-notepad
*))))
366 (addtest (dynamics-after-setup-helper)
368 (push :test
*test-notepad
*)
369 (ensure-same *dynamics-after-setup
* :dynamics
))
371 (addtest (dynamics-after-setup)
373 (run-test :suite
'dynamics-after-setup-helper
375 (ensure-same (reverse *test-notepad
*)
376 '(:slot
:dynamics
:setup
:test
)))
380 ;;; inherited functions
382 (deftestsuite test-inherited-functions-helper
()
386 (ensure-same (+ a b
) c
:test
'=))))
388 (deftestsuite test-inherited-functions-pos
(test-inherited-functions-helper)
390 (:tests
((really?
1 2 3))
393 (deftestsuite test-inherited-functions-neg
(test-inherited-functions-helper)
395 (:tests
((really? -
4 -
2 -
6))
396 ((really? -
1 -
1 -
2))))
398 (deftestsuite test-inherited-functions
(lift-test)
401 (addtest (test-inherited-functions)
403 (let ((tr (run-tests :suite
'test-inherited-functions-helper
404 :report-pathname nil
)))
405 (ensure-same (length (tests-run tr
)) 4)
406 (ensure-null (failures tr
))
407 (ensure-null (errors tr
))))
411 ;;; slot initialization takes place ONCE
413 (deftestsuite test-initialize-slots-helper
()
414 ((slot (incf *test-notepad
*))))
416 (addtest (test-initialize-slots-helper)
420 (addtest (test-initialize-slots-helper)
424 (deftestsuite test-initialize-slots
(lift-test)
426 (:setup
(setf *test-notepad
* 0)))
428 (addtest (test-initialize-slots)
429 slot-initform-evaluated-every-time
430 (let ((tr (run-tests :suite
'test-initialize-slots-helper
431 :report-pathname nil
)))
432 (ensure-same (length (tests-run tr
)) 2)
433 (ensure-same *test-notepad
* 1 :test
'=)))
436 ;;; errors during tests are reported in the test result
438 (defun cause-an-error ()
439 (error "this is an error"))
441 (deftestsuite test-error-catching
(lift-test)
444 (deftestsuite test-error-catching-helper-slot-init
()
445 ((x (cause-an-error))))
447 (addtest (test-error-catching-helper-slot-init)
451 (addtest (test-error-catching)
453 (let ((result (run-test :suite
'test-error-catching-helper-slot-init
455 ;;?? test not run because error occurred during setup
456 (ensure-same 0 (length (lift::suites-run result
)) :report
"tests run")
457 (ensure-same 1 (length (errors result
)) :report
"errors counted")))
461 (deftestsuite test-error-catching-helper-body
()
464 (addtest (test-error-catching-helper-body)
468 (addtest (test-error-catching)
470 (let ((result (run-test :suite
'test-error-catching-helper-body
472 (ensure-same 1 (length (tests-run result
)))
473 (ensure-same 1 (length (errors result
)))))
477 (deftestsuite test-error-catching-helper-setup
()
482 (addtest (test-error-catching-helper-setup)
486 (addtest (test-error-catching)
488 (let ((result (run-test :suite
'test-error-catching-helper-setup
490 (ensure-same 1 (length (tests-run result
)))
491 (ensure-same 1 (length (errors result
)))))
495 (deftestsuite test-error-catching-helper-teardown
()
500 (addtest (test-error-catching-helper-teardown)
504 (addtest (test-error-catching)
506 (let ((result (run-test :suite
'test-error-catching-helper-teardown
508 (ensure-same 1 (length (tests-run result
)))
509 (ensure-same 1 (length (errors result
)))))
513 (defvar *test-error-catching-helper
*)
515 (deftestsuite test-error-catching-helper-dynamic-variables
()
518 (*test-error-catching-helper
* (cause-an-error))))
520 (addtest (test-error-catching-helper-dynamic-variables)
524 (addtest (test-error-catching)
525 helper-dynamic-variables
526 (let ((result (run-test :suite
'test-error-catching-helper-dynamic-variables
527 :name
'dynamic-variables
)))
528 (ensure-same 1 (length (lift::suites-run result
)))
529 (ensure-same 1 (length (errors result
)))))
533 (deftestsuite test-error-catching-helper-equality-test
()
538 (addtest (test-error-catching-helper-equality-test)
542 (addtest (test-error-catching)
544 (let ((result (run-test :suite
'test-error-catching-helper-equality-test
545 :name
'equality-test
)))
546 (ensure-same 0 (length (lift::suites-run result
))) ;hmmm
547 (ensure-same 1 (length (errors result
)))))
551 (deftestsuite test-interaction
(lift-test)
553 (:equality-test
#'string
=))
555 (addtest (test-interaction)
557 (run-test :suite
'lift-test-ensure-helper
:name
'simple-ensure-test-3
)
559 (symbol-name lift
::*last-test-case-name
*)
560 (symbol-name 'simple-ensure-test-3
))
562 (symbol-name lift
::*last-testsuite-name
*)
563 (symbol-name 'lift-test-ensure-helper
)))
565 (addtest (test-interaction)
566 run-tests-sets-values
567 (run-tests :suite
'lift-test-ensure-helper
568 :report-pathname nil
)
570 (symbol-name lift
::*last-testsuite-name
*)
571 (symbol-name 'lift-test-ensure-helper
))
573 (symbol-name lift
::*last-test-case-name
*)
574 (symbol-name 'simple-ensure-test-3
)))
576 (addtest (test-interaction)
577 run-test-sets-values-nested
578 (run-test :suite
'test-interaction
:name
'run-tests-sets-values
)
580 (symbol-name lift
::*last-testsuite-name
*)
581 (symbol-name 'test-interaction
))
583 (symbol-name lift
::*last-test-case-name
*)
584 (symbol-name 'run-tests-sets-values
)))
588 (deftestsuite test-expected-errors
(lift-test)
591 (*test-break-on-errors?
* nil
)
592 (*test-break-on-failures?
* nil
)))
594 (deftestsuite test-expected-errors-helper
()
597 (addtest (test-expected-errors-helper
600 (error "this is an error"))
602 (addtest (test-expected-errors)
604 (let ((result (run-tests :suite
'test-expected-errors-helper
605 :report-pathname nil
)))
606 (ensure-same 1 (length (tests-run result
)))
607 (ensure-same 0 (length (errors result
)))
608 (ensure-same 1 (length (expected-errors result
)))
611 (eval-when (:compile-toplevel
:load-toplevel
:execute
)
612 (defparameter *test-expected-errors-helper-2
* nil
))
614 (deftestsuite test-expected-errors-helper-2
()
617 (addtest (test-expected-errors-helper-2
618 :expected-error
*test-expected-errors-helper-2
*)
620 (error "this is an error"))
622 (addtest (test-expected-errors)
623 test-expected-error-helper-true
624 (let* ((*test-expected-errors-helper-2
* t
)
625 (result (run-tests :suite
'test-expected-errors-helper-2
626 :report-pathname nil
)))
627 (ensure-same 1 (length (tests-run result
)))
628 (ensure-same 0 (length (errors result
)))
629 (ensure-same 1 (length (expected-errors result
)))
632 (addtest (test-expected-errors)
633 test-expected-error-helper-false
634 (let* ((*test-expected-errors-helper-2
* nil
)
635 (result (run-tests :suite
'test-expected-errors-helper-2
636 :report-pathname nil
)))
637 (ensure-same 1 (length (tests-run result
)))
638 (ensure-same 1 (length (errors result
)))
639 (ensure-same 0 (length (expected-errors result
)))
642 (addtest (test-expected-errors)
643 donot-break-on-errors
645 ;; I wonder if it's worth trying to abstract "up"
646 (let ((*debugger-hook
* (lambda (condition hook
)
647 (declare (ignore hook
))
648 (when (find-restart 'entered-debugger
)
649 (invoke-restart 'entered-debugger condition
))
650 (invoke-debugger condition
))))
652 (let ((result (run-tests :suite
'test-expected-errors-helper
654 :break-on-errors? t
)))
655 (ensure-same 1 (length (tests-run result
)))
656 (ensure-same 0 (length (errors result
)))
657 (ensure-same 1 (length (expected-errors result
)))
659 (entered-debugger (c)
661 (ensure-null "We should not be here")))))
665 ;;?? these pass but the cliquep test did not seem to be working. Why?
666 (deftestsuite test-scratchpad-resets
(lift-test)
669 (deftestsuite test-scratchpad-resets-helper
()
672 (test-3 (push :test
*test-scratchpad
*)))
674 (test-4 (push :burt
*test-scratchpad
*))))
676 (addtest (test-scratchpad-resets)
678 (run-test :suite
'test-scratchpad-resets-helper
:name
'test-3
)
679 (ensure-same '(:test
) *test-scratchpad
*))
681 (addtest (test-scratchpad-resets)
683 (run-test :suite
'test-scratchpad-resets-helper
:name
'test-3
)
684 (run-test :suite
'test-scratchpad-resets-helper
:name
'test-3
)
685 (ensure-same '(:test
) *test-scratchpad
*))
687 (addtest (test-scratchpad-resets)
688 run-twice-have-one-run-tests
689 (run-tests :suite
'test-scratchpad-resets-helper
:report-pathname nil
)
690 (run-tests :suite
'test-scratchpad-resets-helper
:report-pathname nil
)
691 (ensure-same '(:burt
) *test-scratchpad
*))
695 (deftestsuite test-break-on-failure
(lift-test)
698 (deftestsuite test-break-on-failure-helper
()
700 ;; :categories (foo bar)
703 (addtest (test-break-on-failure-helper)
705 (ensure-null "this fails"))
707 (addtest (test-break-on-failure)
708 donot-break-on-failures
709 (let* ((*test-break-on-failures?
* nil
)
710 (result (run-tests :suite
'test-break-on-failure-helper
711 :report-pathname nil
)))
712 (ensure-same 1 (length (tests-run result
)))
713 (ensure-same 1 (length (failures result
)))))
715 (addtest (test-break-on-failure)
717 (let* ((*test-break-on-failures?
* t
)
718 (*debugger-hook
* (lambda (condition hook
)
719 (declare (ignore hook
))
720 (when (find-restart 'entered-debugger
)
721 (invoke-restart 'entered-debugger condition
))
722 (invoke-debugger condition
)))
725 (setf result
(run-tests :suite
'test-break-on-failure-helper
726 :report-pathname nil
))
727 (entered-debugger (c)
729 (setf *test-scratchpad
* t
)))
731 (ensure-same *test-scratchpad
* t
:test
'eq
)))
735 (deftestsuite ensure-no-warning
(lift-test)
738 (deftestsuite ensure-no-warning-helper
()
741 (addtest (ensure-no-warning-helper)
743 (ensure-no-warning (ensure-same (+ 2 2) 4)))
745 (addtest (ensure-no-warning-helper)
747 (ensure-no-warning (ensure-same (+ 2 2) 4)
748 (warn "I like math")))
750 (addtest (ensure-no-warning)
752 (let ((result (run-tests :suite
'ensure-no-warning-helper
753 :report-pathname nil
)))
754 (ensure-same (length (tests-run result
)) 2)
755 (ensure-same (length (failures result
)) 1)
756 (ensure-same (length (errors result
)) 0)))
760 (deftestsuite test-suite-with-no-tests-helper
()
763 (deftestsuite test-test-suite-with-no-tests
(lift-test)
765 (:documentation
"Case 168"))
767 (addtest (test-test-suite-with-no-tests)
769 (let ((r (run-tests :suite
'test-suite-with-no-tests-helper
)))
770 (ensure-same (length (tests-run r
)) 0)))
775 (deftestsuite handle-serious-condition
(lift-test)
778 "LIFT should keep running tests even when a testcase gets a
779 serious condition. (though maybe there should be an option that
780 these cancel testing instead.)")
782 (*test-break-on-errors?
* nil
)
783 (*test-break-on-failures?
* nil
)))
785 (deftestsuite handle-serious-condition-helper
()
788 (addtest (handle-serious-condition-helper)
790 (signal 'serious-condition
)
792 ;; I expect this to signal an error!
793 (make-array (1- most-positive-fixnum
)))
795 (addtest (handle-serious-condition)
797 (let ((got-condition nil
))
799 (let ((tr (run-test :suite
'handle-serious-condition-helper
801 (ensure-same (length (tests-run tr
)) 1)
802 (ensure-null (failures tr
))
804 (ensure-same (test-mode tr
) :single
))
806 (setf got-condition c
)))
807 (ensure-null got-condition
)))
812 (deftestsuite test-interrupts
(lift-test)
815 (deftestsuite test-interrupts-helper
()
818 (addtest (test-interrupts-helper)
820 (push :a
*test-notepad
*))
823 (addtest (test-interrupts-helper)
825 (push :b
*test-notepad
*)
826 (signal 'excl
:interrupt-signal
))
828 (addtest (test-interrupts-helper)
830 (push :c
*test-notepad
*))
833 (addtest (test-interrupts)
835 (let ((*test-notepad
* nil
))
836 (lift:run-tests
:suite
'test-interrupts-helper
)
837 (ensure-same *test-notepad
* '(:b
:a
) :test
'equal
)))
842 (deftestsuite test-errors-in-equality-test
(lift-test)
845 (deftestsuite test-errors-in-equality-test-helper
()
848 (addtest (test-errors-in-equality-test-helper
849 :documentation
"this is fun")
851 (ensure-same 1 1 :test
(lambda (a b
) (/ (- a b
)))))
853 (addtest (test-errors-in-equality-test-helper
856 (:documentation
"this is fun")
857 (ensure-same 1 1 :test
(lambda (a b
) (/ (- a b
)))))
860 (addtest (test-errors-in-equality-test)
862 (let ((*test-notepad
* nil
))
863 (lift:run-tests
:suite
'test-errors-in-equality-test-helper
)
864 (ensure-same *test-notepad
* '(:b
:a
) :test
'equal
)))
867 (addtest (report-pathnamexx)
868 initial-properties-are-null
869 (ensure-null (lift::test-result-properties result
))
874 (deftestsuite test-default-initargs-abstract
(lift-test)
877 (deftestsuite test-default-initargs-parent
(test-default-initargs-abstract)
883 (addtest (test-default-initargs-parent)
885 (ensure-same a
:parent
))
887 (addtest (test-default-initargs-parent)
891 (deftestsuite test-default-initargs-child
(test-default-initargs-parent)
896 (addtest (test-default-initargs-child)
898 (ensure-same a
:child
))
900 (addtest (test-default-initargs-child)
902 (ensure-same c
:inherit
))
904 (defvar *test-default-initargs-helper-var
* nil
)
906 (deftestsuite test-default-initargs-helper
()
911 (addtest (test-default-initargs-helper)
913 (ensure-same a
*test-default-initargs-helper-var
*))
915 (deftestsuite test-default-initargs
(test-default-initargs-abstract)
918 (addtest (test-default-initargs)
920 (let* ((*test-default-initargs-helper-var
* 1)
921 (r (lift:run-tests
:suite
'test-default-initargs-helper
922 :report-pathname nil
)))
923 (ensure-null (errors r
))
924 (ensure-null (failures r
))))
926 (addtest (test-default-initargs)
928 (let* ((*test-default-initargs-helper-var
* 2)
929 (r (lift:run-tests
:suite
'test-default-initargs-helper
931 :testsuite-initargs
'(:a
2))))
932 (ensure-null (errors r
))
933 (ensure-null (failures r
))))
938 (deftestsuite test-dependencies
(lift-test)
941 (deftestsuite test-dependencies-helper
()
945 (addtest (test-dependencies-helper)
947 (push :a
*test-notepad
*))
949 (addtest (test-dependencies-helper)
951 (push :b
*test-notepad
*))
953 (addtest (test-dependencies-helper :depends-on
'test-b
)
955 (push :c
*test-notepad
*))
957 (addtest (test-dependencies-helper :depends-on
'test-c
)
959 (push :d
*test-notepad
*))
961 (addtest (test-dependencies)
963 (setf *test-notepad
* nil
)
964 (let ((r (lift:run-tests
:suite
'test-dependencies-helper
965 :report-pathname nil
)))
966 (ensure (every (lambda (name)
967 (lift::test-case-tested-p
968 'test-dependencies-helper name
:result r
))
969 (list 'test-a
'test-b
'test-c
'test-d
)))
970 (ensure-same (length *test-notepad
*) 4)
971 (ensure-same *test-notepad
* '(:a
:b
:c
:d
) :test
'set-equal
)))
973 (addtest (test-dependencies)
975 (setf *test-notepad
* nil
)
976 (let ((r (lift:run-test
:suite
'test-dependencies-helper
978 (ensure (every (lambda (name)
979 (lift::test-case-tested-p
980 'test-dependencies-helper name
:result r
))
982 (ensure-same *test-notepad
* '(:b
) :test
'set-equal
)))
984 (addtest (test-dependencies)
986 (setf *test-notepad
* nil
)
987 (let ((r (lift:run-test
:suite
'test-dependencies-helper
989 (ensure (every (lambda (name)
990 (lift::test-case-tested-p
991 'test-dependencies-helper name
:result r
))
992 (list 'test-b
'test-c
)))
993 (ensure-same *test-notepad
* '(:c
:b
) :test
'set-equal
)))
995 (addtest (test-dependencies)
997 (setf *test-notepad
* nil
)
998 (let ((r (lift:run-test
:suite
'test-dependencies-helper
1000 (ensure-same (length *test-notepad
*) 3)
1001 (ensure (every (lambda (name)
1002 (lift::test-case-tested-p
1003 'test-dependencies-helper name
:result r
))
1004 (list 'test-b
'test-c
'test-d
)))
1005 (ensure-same *test-notepad
* '(:c
:b
:d
) :test
'set-equal
)))
1011 (deftestsuite lift-syntax-checks
(lift-test)
1014 (eval '(deftestsuite test-xxx
()()))))
1016 (addtest (lift-syntax-checks)
1018 (eval '(addtest (test-xxx :a
1 :b
2) test-1
(ensure t
)))
1019 (ensure (find-test-case 'test-xxx
'test-1
)))
1021 (addtest (lift-syntax-checks)
1023 (eval '(addtest (test-xxx :a
1 :b
2 :c
) test-1
(ensure t
)))
1024 (ensure (find-test-case 'test-xxx
'test-1
)))
1026 (addtest (lift-syntax-checks)
1028 (eval '(addtest (test-xxx :b
) test-1
(ensure t
)))
1029 (ensure (find-test-case 'test-xxx
'test-1
)))
1031 (addtest (lift-syntax-checks)
1033 (eval '(addtest (test-xxx :b
2 :c
3 4 5) test-1
(ensure t
)))
1034 (ensure (find-test-case 'test-xxx
'test-1
)))
1041 (deftestsuite this-testsuite-fails
(lift-test)
1044 (addtest (this-testsuite-fails)
1046 (ensure-same (+ 2 2) 3))
1048 (deftestsuite this-testsuite-errors
(lift-test)
1051 (addtest (this-testsuite-errors)
1054 (ensure (/ (* (+ 2 2) 3) x
))))
1056 (deftestsuite this-testsuite-is-generally-bad
(lift-test)
1058 (:documentation
"And that's OK."))
1060 (addtest (this-testsuite-is-generally-bad :documentation
"What happens here")
1062 ; (:documentation "What happens here")
1064 (ensure (/ (* (+ 2 2) 3) x
))))
1066 (addtest (this-testsuite-is-generally-bad)
1068 (ensure-same (+ 2 2) 3))
1070 (deftestsuite this-testsuite-cannot-be-made
(lift-test)
1071 ((x (error "dang")))
1072 (:documentation
"And that's the way we like it."))
1074 (addtest (this-testsuite-cannot-be-made :documentation
"What happens to this?")
1078 (deftestsuite test-conditions
(lift-test)
1081 (addtest (test-conditions)
1083 (signal 'excl
:socket-chunking-end-of-file
)
1088 (defun slurp (pathname)
1089 (when (probe-file pathname
)
1090 (with-open-file (s pathname
:direction
:input
)
1091 (loop for line
= (read-line s nil
:eof
)
1092 until
(eq line
:eof
) collect line
))))
1094 (deftestsuite test-log-file
(lift-test)
1097 (setf my-log-file
(format nil
"/tmp/~a" (gensym "file-")))
1098 (when (probe-file my-log-file
)
1099 (delete-file my-log-file
))))
1101 (deftestsuite test-log-file-helper
()
1104 (addtest (test-log-file-helper)
1106 (let ((lines (slurp my-log-file
)))
1107 (ensure (plusp (length lines
)))
1108 (let* ((last-line (first (last lines
)))
1109 (datum (read-from-string last-line nil nil
)))
1111 (ensure (consp datum
))
1112 (ensure-same (car datum
) :start-time-universal
))))
1114 (addtest (test-log-file)
1116 (let ((r (lift:run-tests
1117 :suite
'test-log-file-helper
1118 :report-pathname my-log-file
1119 :testsuite-initargs
`(:log-file
,my-log-file
))))
1120 (ensure-null (errors r
))
1121 (ensure-null (failures r
))
1122 (ensure (plusp (length (tests-run r
))))))