e5cfb41dfc2b8856c2eef3a8d275f6e2d2f13bc7
[xlunit.git] / tests.lisp
1 ;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*-
2 ;;;; *************************************************************************
3 ;;;; FILE IDENTIFICATION
4 ;;;;
5 ;;;; Id:      $Id: tests.lisp,v 1.7 2003/08/04 16:13:58 kevin Exp $
6 ;;;; Purpose: Test suite for XLUnit
7 ;;;;
8 ;;;; *************************************************************************
9
10 (in-package #:cl-user)
11 (defpackage #:xlunit-tests
12   (:use #:cl #:xlunit)
13   (:export #:do-tests))
14 (in-package #:xlunit-tests)
15
16
17 ;; Helper test fixture
18
19 (defclass was-run (test-case)
20   ((log :accessor ws-log)))
21
22 (defmethod setup ((self was-run))
23   (setf (ws-log self) "setup "))
24
25 (defmethod teardown ((self was-run))
26   (setf (ws-log self) (concatenate 'string (ws-log self) "teardown ")))
27
28 (defmethod test-method ((self was-run))
29   (setf (ws-log self) (concatenate 'string (ws-log self) "test-method ")))
30
31 (defmethod test-broken-method ((self was-run))
32   (assert-equal pi (/ 22 7)))
33
34 (defmethod test-error-method ((self was-run))
35   (error "Err"))
36
37
38 ;;; Main test fixture
39
40 (defclass test-case-test (test-case)
41   ())
42
43 (defmethod test-template-method ((self test-case-test))
44   (let ((test (make-test 'was-run 'test-method)))
45     (run-test test)
46     (assert-equal (ws-log test) "setup test-method teardown ")))
47
48 (defmethod test-result ((self test-case-test))
49   (assert-equal "1 run, 0 erred, 0 failed" 
50                 (summary (run-test (make-test 'was-run 'test-method)))))
51
52 (defmethod test-fn ((self test-case-test))
53   (let ((test (make-test 'was-run '"Test Failure"
54                          :test-fn
55                          (lambda (test) 
56                            (declare (ignore test))
57                            (assert-equal 10 10)))))
58     (assert-equal "1 run, 0 erred, 0 failed"
59                   (summary (run-test test)))))
60
61 (defmethod test-failed-result ((self test-case-test))
62   (assert-equal "1 run, 0 erred, 1 failed"
63                 (summary (run-test
64                           (make-test 'was-run 'test-broken-method)))))
65
66 (defmethod test-error-result ((self test-case-test))
67   (assert-equal "1 run, 1 erred, 0 failed"
68                 (summary (run-test
69                           (make-test 'was-run 'test-error-method)))))
70   
71 (defmethod test-suite ((self test-case-test))
72   (let ((suite (make-test-suite "TestSuite"))
73         (result (make-test-result)))
74     (add-test (make-test 'was-run 'test-method) suite)
75     (add-test (make-test 'was-run 'test-broken-method) suite)
76     (run-test suite :result result)
77     (assert-equal "2 run, 0 erred, 1 failed" (summary result))))
78
79 (defmethod test-dynamic-suite ((self test-case-test))
80   (assert-equal "3 run, 1 erred, 1 failed" 
81                 (summary (run-test (make-test-suite 'was-run)))))
82
83 (textui-test-run (make-test-suite 'test-case-test) :handle-errors nil)
84
85
86 (defun do-tests ()
87   (or (was-successful 
88        (run-test (make-test-suite 'test-case-test)))
89       (error "Failed tests")))