tests: make finishes return the values from the executed form

This commit is contained in:
Daniel Kochmański 2025-07-23 15:50:31 +02:00
parent e98e36dfca
commit a916a5ccff
2 changed files with 8 additions and 5 deletions

View file

@ -273,13 +273,13 @@
(defmacro finishes (form &rest args)
(if args
`(handler-case (progn ,form (passed))
`(handler-case (multiple-value-prog1 ,form (passed))
(serious-condition (c)
(failed (make-condition 'test-failure
:name *test-name*
:format-control ,(car args)
:format-arguments (list ,@(cdr args))))))
`(handler-case (progn ,form (passed))
`(handler-case (multiple-value-prog1 ,form (passed))
(serious-condition (c)
(failed (make-condition 'test-failure
:name *test-name*

View file

@ -91,7 +91,8 @@
(finishes (ext:terminate-process process))
(sleep 1)
#-windows(is-eql :signaled (ext:external-process-wait process nil))
#+windows(is-eql :exited (ext:external-process-wait process nil))))
#+windows(is-eql :exited (ext:external-process-wait process nil))
t))
(is-equal #-windows `(t :signaled ,ext:+sigkill+)
#+windows `(t :exited -1)
(with-run-program (terminate nil)
@ -100,7 +101,8 @@
(sleep 1)
#-windows(is-eql :signaled (ext:external-process-wait process nil))
#+windows(is-eql :exited (ext:external-process-wait process nil))
(finishes (ext:external-process-status process)))))
(finishes (ext:external-process-status process))
t)))
;;; We may want to craft it into an interface. Suspend/Resume *is* possible on Windows:
;;; http://stackoverflow.com/questions/11010165/how-to-suspend-resume-a-process-in-windows
@ -116,7 +118,8 @@
(si:killpid pid ext:+sigcont+)
(sleep 2)
(is-eql :resumed (ext:external-process-wait process nil))
(finishes (ext:terminate-process process t))))))
(finishes (ext:terminate-process process t))
t))))
;;; Cygwin programs seems not to react to signals. We use a stub to
;;; avoid infintie wait for process termination.