Execute tests asynchronously to let the browser to render
[jscl.git] / tests.lisp
1 (defparameter *total-tests* 0)
2 (defparameter *passed-tests* 0)
3 (defparameter *failed-tests* 0)
4 (defparameter *expected-failures* 0)
5 (defparameter *unexpected-passes* 0)
6
7 (defvar *use-html-output-p* t)
8 (defvar *timestamp* nil)
9
10 (defun test-fn (condition form)
11   (cond
12     (condition
13      (format t "Test `~S' passed~%" form)
14      (incf *passed-tests*))
15     (t
16      (if *use-html-output-p*
17          (format t "<font color='red'>Test `~S' failed.</font>~%" form)
18          (format t "Test `~S' failed.~%" form))
19      (incf *failed-tests*)))
20   (incf *total-tests*))
21
22 (defun expected-failure-fn (condition form)
23   (cond
24     (condition
25      (if *use-html-output-p*
26          (format t "<font color='orange'>Test `~S' passed unexpectedly!</font>~%" form)
27          (format t "Test `~S' passed unexpectedly!~%" form))
28      (incf *unexpected-passes*))
29     (t
30      (format t "Test `~S' failed expectedly.~%" form)
31      (incf *expected-failures*)))
32   (incf *total-tests*))
33
34
35 #+jscl
36 (defmacro test (condition)
37   `(funcall (oget *root* "setTimeout")
38             (lambda ()
39               (test-fn ,condition ',condition))
40             0))
41 #-jscl
42 (defmacro test (condition)
43   `(test-fn ,condition ',condition))
44
45 (defmacro expected-failure (condition)
46   `(expected-failure-fn ,condition ',condition))
47
48 (defmacro test-equal (form value)
49   `(test (equal ,form, value)))
50
51
52 (format t "Running tests...~%~%")
53 (setq *timestamp* (get-internal-real-time))