commit ef99d3f36070cb56011fc74255d275a5dd6d80b7
parent cc109f9c5af605fa00a2e74d6c8b82647e082e40
Author: Georges Dupéron <jahvascriptmaniac+github@free.fr>
Date: Mon, 15 Nov 2010 03:06:19 +0100
Les deftestvar sont héritées (mais écrasables) par les sous-modules + fonction show-tests.
Diffstat:
1 file changed, 34 insertions(+), 2 deletions(-)
diff --git a/test-unitaire.lisp b/test-unitaire.lisp
@@ -19,6 +19,17 @@
(defun test-get-variables (module) (third (test-get-module module)))
(defun test-get-tests (module) (fourth (test-get-module module)))
+(defun test-collect-down-tree (fn module &optional (from all-tests))
+ (unless (listp module) (setq module (list module)))
+ (if (endp module)
+ (cons (funcall fn from) nil)
+ (cons (funcall fn from)
+ (test-collect-down-tree fn (cdr module)
+ (cdr (assoc (car module) (car from)))))))
+
+(defun test-get-variables-and-above (module &optional (from all-tests))
+ (apply #'append (mapcar #'reverse (test-collect-down-tree #'third module from))))
+
(defun test-set-executed (from &optional (value t))
(setf (second from) value))
@@ -51,7 +62,7 @@
`(test-add-test
',module
(lambda ()
- (let* ((vars (test-get-variables ',module))
+ (let* ((vars (test-get-variables-and-above ',module))
(_test ',test)
(_expected ',expected)
(_compare ,compare)
@@ -104,7 +115,7 @@
(format t "~&~%-~{ ~w~}~& [Déjà vu]~&" (or module-name '(all-tests)))
t)
(progn
- (format t "~&~%>~{ ~w~}~&" (or module-name '("all-tests")))
+ (format t "~&~%>~{ ~w~}~&" (or module-name '(all-tests)))
(setf (second from) t) ;; marquer comme exécuté.
(let ((nb-fail (count-if-not #'funcall (reverse (fourth from)))))
(if (= nb-fail 0)
@@ -126,6 +137,27 @@
t)
nil)))
+(defun count-nb-tests (from)
+ (apply #'+
+ (length (fourth from))
+ (mapcar (lambda (x) (count-nb-tests (cdr x))) (car from))))
+
+(defun real-show-tests (module-name from)
+ (format t "~&~4@<~d~> ~4@<~d~> >~{ ~w~}~&"
+ (length (fourth from))
+ (count-nb-tests from)
+ (or module-name '(all-tests)))
+ (mapcar (lambda (x) (real-show-tests (append module-name (list (car x))) (cdr x)))
+ (first from))
+ nil)
+
+(defmacro show-tests (&optional module)
+ (unless (listp module) (setq module (list module)))
+ `(let ((mod (test-get-module ',module)))
+ (real-show-tests ',module mod)
+ (format t "~a tests." (count-nb-tests mod))
+ t))
+
(defmacro erase-tests (&optional module)
(unless (listp module) (setq module (list module)))
`(test-remove-module ',module))