X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Frun-tests.lisp;h=d01a33b9b6f4f2ddb3fa5bfddb389b0e5ade567e;hb=0af996ffd49f08b71ba071c6d69dd2b465b4202f;hp=c1d4f158b4389ad3f182f995ea17d87edcf12ecf;hpb=e44ca193db33af531e30413546d6820163102e44;p=sbcl.git diff --git a/tests/run-tests.lisp b/tests/run-tests.lisp index c1d4f15..d01a33b 100644 --- a/tests/run-tests.lisp +++ b/tests/run-tests.lisp @@ -71,13 +71,8 @@ (dolist (file files) (when (accept-test-file file) (format t "// Running ~a~%" file) - (handler-case - (funcall test-fun file) - (error (error) - (push (list :unhandled-error file) - *all-failures*) - (when *break-on-error* - (test-util:really-invoke-debugger error)))))) + (handler-bind ((error (make-error-handler file))) + (funcall test-fun file)))) (append-failures))) (defun impure-runner (files test-fun) @@ -90,12 +85,8 @@ (let ((pid (sb-posix:fork))) (cond ((= pid 0) (format t "// Running ~a~%" file) - (handler-case - (funcall test-fun file) - (error (error) - (push (list :unhandled-error file) *failures*) - (when *break-on-error* - (test-util:really-invoke-debugger error)))) + (handler-bind ((error (make-error-handler file))) + (funcall test-fun file)) (report-test-status) (sb-ext:quit :unix-status 104)) (t @@ -111,6 +102,17 @@ (push (list :invalid-exit-status file) *all-failures*)))))))))) +(defun make-error-handler (file) + (lambda (condition) + (push (list :unhandled-error file) + *all-failures*) + (cond (*break-on-error* + (test-util:really-invoke-debugger condition)) + (t + (format *error-output* "~&Unhandled ~a: ~a~%" + (type-of condition) condition) + (sb-debug:backtrace))))) + (defun append-failures (&optional (failures *failures*)) (setf *all-failures* (append failures *all-failures*)))