r5463: Auto commit for Debian build
[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.12 2003/08/06 11:37:23 kevin Exp $
6 ;;;; Purpose: Self 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 set-up ((self was-run))
23     (setf (ws-log self) "setup "))
24
25 (defmethod tear-down ((self was-run))
26   (setf (ws-log self)
27         (concatenate 'string (ws-log self) "teardown ")))
28
29 (def-test-method test-method ((self was-run) :run nil)
30     (setf (ws-log self) 
31       (concatenate 'string (ws-log self) "test-method ")))
32
33 (def-test-method test-broken-method ((self was-run) :run nil)
34     (assert-equal pi (/ 22 7)))
35
36 (def-test-method test-not-eql ((self was-run) :run nil)
37     (assert-not-eql (cons t t) (cons t t)))
38
39 (def-test-method test-eql ((self was-run) :run nil)
40     (let ((obj (cons t t)))
41       (assert-eql obj obj)))
42
43 (def-test-method test-error-method ((self was-run) :run nil)
44     (error "Err"))
45
46
47 ;;; Second helper test case
48
49 (defclass test-two-cases (test-case)
50   ())
51
52 (def-test-method test-1 ((self test-two-cases) :run nil)
53     (assert-true t))
54
55 (def-test-method test-2 ((self test-two-cases) :run nil)
56     (assert-false nil))
57
58 ;;; Main test fixture
59
60 (defclass test-case-test (test-case)
61   ())
62
63
64 (def-test-method test-template-method ((self test-case-test) :run nil)
65   (let ((test (named-test 'test-method (get-suite was-run))))
66     (run test)
67     (assert-equal (ws-log test) "setup test-method teardown ")))
68
69 (def-test-method test-results ((self test-case-test) :run nil)
70   (assert-equal "1 run, 0 erred, 0 failed" 
71                 (summary (run (named-test 'test-method 
72                                           (get-suite was-run))))))
73
74 (def-test-method test-eql ((self test-case-test) :run nil)
75   (assert-equal "1 run, 0 erred, 0 failed" 
76                 (summary (run (named-test 'test-eql (get-suite was-run))))))
77
78 (def-test-method test-not-eql ((self test-case-test) :run nil)
79   (assert-equal "1 run, 0 erred, 0 failed" 
80                 (summary (run (named-test 'test-not-eql
81                                           (get-suite was-run))))))
82
83 (def-test-method test-fn ((self test-case-test) :run nil)
84   (let ((test (make-instance 'test-case :name 'test-fn
85                               :method-body
86                               (lambda () 
87                                 (declare (ignore test))
88                                 (assert-equal 10 10)))))
89     (assert-equal "1 run, 0 erred, 0 failed"
90                   (summary (run test)))))
91
92 (def-test-method test-failed-result ((self test-case-test) :run nil)
93   (assert-equal "1 run, 0 erred, 1 failed"
94                 (summary (run
95                           (named-test 'test-broken-method
96                                       (get-suite was-run))))))
97
98 (def-test-method test-error-result ((self test-case-test) :run nil)
99     (assert-equal "1 run, 1 erred, 0 failed"
100                   (summary (run
101                             (named-test 'test-error-method
102                                         (get-suite was-run))))))
103   
104 (def-test-method test-suite ((self test-case-test) :run nil)
105   (let ((suite (make-instance 'test-suite))
106         (result (make-test-results)))
107     (add-test suite (named-test 'test-method (get-suite was-run)))
108     (add-test suite (named-test 'test-broken-method (get-suite was-run)))
109     (run-on-test-results suite result)
110     (assert-equal "2 run, 0 erred, 1 failed" (summary result))))
111
112 (def-test-method test-dynamic-suite ((self test-case-test) :run nil)
113   (assert-equal "2 run, 0 erred, 0 failed" 
114                 (summary (run (get-suite test-two-cases)))))
115
116
117 (textui-test-run (get-suite test-case-test))
118
119
120 (defun do-tests ()
121   (or (was-successful (run (get-suite test-case-test)))
122       (error "Failed tests")))