;;;; *************************************************************************
;;;; FILE IDENTIFICATION
;;;;
-;;;; Name: printer.lisp
-;;;; Purpose: Printer functions for XLUnit
-;;;; Authors: Kevin Rosenberg
+;;;; ID: $Id: printer.lisp,v 1.5 2003/08/04 19:31:34 kevin Exp $
+;;;; Purpose: Printer functions for XLUnit
;;;;
-;;;; $Id: printer.lisp,v 1.1 2003/08/04 12:01:54 kevin Exp $
;;;; *************************************************************************
(in-package #:xlunit)
-(defun result-printer (result seconds stream)
- (format stream "~&Time: ~D~%~%" (coerce seconds 'float))
- (print-defects (test-errors result) "error" stream)
- (print-defects (test-failures result) "failure" stream)
- (if (was-successful result)
- (format stream "OK (~D tests)~%" (test-count result))
- (progn
- (format stream "~%FAILURES!!!~%")
- (format stream "Tests run: ~D, Failures: ~D, Errors: ~D~%"
- (test-count result) (length (test-failures result))
- (length (test-errors result))))))
+;----------------------------------------------------------------------
+; method print-results
+;----------------------------------------------------------------------
+
+(defmethod print-results ((ob textui-test-runner) result seconds)
+ (format (ostream ob) "~&Time: ~D~%~%" (coerce seconds 'float))
+ (print-header ob result)
+ (print-errors ob result)
+ (print-failures ob result)
+ t)
+
+(defmethod print-header ((ob textui-test-runner) result)
+ (let ((failures (failures result))
+ (errors (errors result))
+ (run-tests (run-tests result)))
+ (cond ((and (null failures) (null errors))
+ (format (ostream ob) "~%OK (~a tests)~%" run-tests))
+ (t
+ (format (ostream ob) "~%~%FAILURES!!!~%")
+ (format (ostream ob) "Run: ~a Failures: ~a Errors: ~a~%"
+ run-tests (length failures) (length errors))))))
+
+(defmethod print-errors ((ob textui-test-runner) result)
+ (let ((errors (errors result)))
+ (when errors
+ (if (eql (length errors) 1)
+ (format (ostream ob) "~%There was 1 error:~%")
+ (format (ostream ob) "~%There were ~a errors:~%" (length errors)))
+ (let ((i 1))
+ (mapc #'(lambda (single-error)
+ (format (ostream ob) "~a) ~a: ~a~%" i
+ (name (failed-test single-error))
+ (thrown-condition single-error))
+ (incf i))
+ errors)))))
-(defun print-defects (defects type stream)
- (when defects
- (let ((count (length defects)))
- (if (= count 1)
- (format stream "~&There was ~D ~A:~%" count type)
- (format stream "~&There were ~D ~As:~%" count type))
- (dotimes (i count)
- (let ((defect (nth i defects)))
- (format stream "~&~D) ~A " i (class-name
- (class-of (failed-test defect))))
- (apply #'format stream (simple-condition-format-control
- (thrown-condition defect))
- (simple-condition-format-arguments
- (thrown-condition defect)))
- (fresh-line stream))))))
+(defmethod print-failures ((ob textui-test-runner) result)
+ (let ((failures (failures result)))
+ (when failures
+ (if (eql (length failures) 1)
+ (format (ostream ob) "~%There was 1 failure:~%")
+ (format (ostream ob) "~%There were ~a failures:~%" (length failures)))
+ (let ((i 1))
+ (mapc #'(lambda (single-failure)
+ (format (ostream ob) "~a) ~a: ~a~%" i
+ (name (failed-test single-failure))
+ (or (message (thrown-condition single-failure)) ""))
+ (incf i))
+ failures)))))
-(defmethod summary ((result test-result))
+(defgeneric summary (result))
+(defmethod summary ((result test-results))
(format nil "~D run, ~D erred, ~D failed"
- (test-count result) (length (test-errors result))
- (length (test-failures result))))
+ (run-tests result) (error-count result) (failure-count result)))