r5457: *** empty log message ***
[xlunit.git] / printer.lisp
index af4adfc32694981fdbb334d027ee2bd4b128ee0c..3637ff454f4b1c49e069a21f676e55d19040fa82 100644 (file)
@@ -2,7 +2,7 @@
 ;;;; *************************************************************************
 ;;;; FILE IDENTIFICATION
 ;;;;
-;;;; ID:      $Id: printer.lisp,v 1.2 2003/08/04 12:16:13 kevin Exp $
+;;;; ID:      $Id: printer.lisp,v 1.5 2003/08/04 19:31:34 kevin Exp $
 ;;;; Purpose: Printer functions for XLUnit
 ;;;;
 ;;;; *************************************************************************
 (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)))