1 ;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*-
2 ;;;; *************************************************************************
3 ;;;; FILE IDENTIFICATION
5 ;;;; ID: $Id: result.lisp,v 1.7 2003/08/05 22:56:25 kevin Exp $
6 ;;;; Purpose: Result functions for XLUnit
8 ;;;; *************************************************************************
13 (defclass test-results ()
14 ((test :initarg :test :reader result-test)
15 (count :initform 0 :accessor run-tests)
16 (failures :initarg :failures :accessor failures :initform nil)
17 (errors :initarg :errors :accessor errors :initform nil)
18 (listeners :initform nil :accessor listeners)
19 (stop :initform nil :accessor stop))
20 (:documentation "Results of running test(s)"))
22 (defmethod failure-count ((res test-results))
23 (length (failures res)))
25 (defmethod error-count ((res test-results))
26 (length (errors res)))
28 (defun make-test-results ()
29 (make-instance 'test-results))
32 (defmethod start-test ((tcase test) (res test-results))
33 (incf (run-tests res))
34 (mapc (lambda (listener) (start-test listener tcase)) (listeners res))
37 (defmethod end-test ((tcase test) (res test-results))
38 (mapc (lambda (listener) (end-test listener tcase)) (listeners res))
41 (defmethod add-listener ((res test-results) (listener test-listener))
42 (push listener (listeners res)))
47 (defclass test-failure ()
48 ((failed-test :initarg :failed-test :reader failed-test)
49 (thrown-condition :initarg :thrown-condition
50 :reader thrown-condition))
51 (:documentation "Stored failures/errors in test-results slots"))
53 (defun make-test-failure (test condition)
54 (make-instance 'test-failure :failed-test test
55 :thrown-condition condition))
57 (defmethod is-failure ((failure test-failure))
58 "Returns T if a failure was a test-failure condition"
59 (typep (thrown-condition failure) 'assertion-failed))
61 (defmethod print-object ((obj test-failure) stream)
62 (print-unreadable-object (obj stream :type t :identity nil)
63 (format stream "~A: " (failed-test obj))
64 (apply #'format stream
65 (simple-condition-format-control (thrown-condition obj))
66 (simple-condition-format-arguments (thrown-condition obj)))))
68 (defmethod was-successful ((result test-results))
69 "Returns T if a result has no failures or errors"
70 (and (null (failures result)) (null (errors result))))
73 ;----------------------------------------------------------------------
74 ; methods add-error, add-failure
75 ;----------------------------------------------------------------------
77 (defmethod add-error ((ob test-results) (tcase test-case) condition)
78 (push (make-test-failure tcase condition) (errors ob))
79 (mapc #'(lambda (single-listener)
80 (add-error single-listener tcase condition))
84 (defmethod add-failure ((ob test-results) (tcase test-case) condition)
85 (push (make-test-failure tcase condition) (failures ob))
86 (mapc #'(lambda (single-listener)
87 (add-failure single-listener tcase condition))