Fix comment
[jscl.git] / tests.lisp
index 6fce25e..5559d38 100644 (file)
@@ -1,39 +1,51 @@
-(defvar *total-tests* 0)
-(defvar *passed-tests* 0)
-(defvar *failed-tests* 0)
-
-(defvar *expected-failures* 0)
-(defvar *unexpected-passes* 0)
+(defparameter *total-tests* 0)
+(defparameter *passed-tests* 0)
+(defparameter *failed-tests* 0)
+(defparameter *expected-failures* 0)
+(defparameter *unexpected-passes* 0)
 
+(defvar *use-html-output-p* t)
 (defvar *timestamp* nil)
 
+(defmacro async (&body body)
+  `(#j:setTimeout (lambda () ,@body)))
+
+(defun test-fn (condition form)
+  (async
+   (cond
+     (condition
+      (format t "Test `~S' passed~%" form)
+      (incf *passed-tests*))
+     (t
+      (if *use-html-output-p*
+          (format t "<font color='red'>Test `~S' failed.</font>~%" form)
+          (format t "Test `~S' failed.~%" form))
+      (incf *failed-tests*)))
+   (incf *total-tests*)))
+
+(defun expected-failure-fn (condition form)
+  (async
+   (cond
+     (condition
+      (if *use-html-output-p*
+          (format t "<font color='orange'>Test `~S' passed unexpectedly!</font>~%" form)
+          (format t "Test `~S' passed unexpectedly!~%" form))
+      (incf *unexpected-passes*))
+     (t
+      (format t "Test `~S' failed expectedly.~%" form)
+      (incf *expected-failures*)))
+   (incf *total-tests*)))
+
+
 (defmacro test (condition)
-  `(progn
-     (cond
-       (,condition
-        (write-line ,(concat "Test `" (prin1-to-string condition) "' passed"))
-        (incf *passed-tests*))
-       (t
-        (write-line ,(concat "<font color=red>Test `"
-                             (prin1-to-string condition) 
-                             "' failed.</font>"))
-        (incf *failed-tests*)))
-     (incf *total-tests*)))
+  `(test-fn ,condition ',condition))
 
 (defmacro expected-failure (condition)
-  `(progn
-     (cond
-       (,condition
-        (write-line ,(concat "<font color=orange>Test `"
-                             (prin1-to-string condition)
-                             "' passed unexpectedly!</font>"))
-        (incf *unexpected-passes*))
-       (t
-        (write-line ,(concat "Test `" (prin1-to-string condition) "' failed expectedly."))
-        (incf *expected-failures*)))
-     (incf *total-tests*)))
-
-(write-line "Running tests...")
-(write-line "")
+  `(expected-failure-fn ,condition ',condition))
+
+(defmacro test-equal (form value)
+  `(test (equal ,form, value)))
 
 (setq *timestamp* (get-internal-real-time))
+
+(terpri)