X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Frun-program.impure.lisp;h=01100bad9c98aff082dbea03f7e6501bb9a17e9c;hb=f2db6743b1fadeea9e72cb583d857851c87efcd4;hp=644bc2b46264036499b46d7eb82e6315f0d82abd;hpb=9ca04e5fe7bc37286c120bc84cfd4abf05e51327;p=sbcl.git diff --git a/tests/run-program.impure.lisp b/tests/run-program.impure.lisp index 644bc2b..01100ba 100644 --- a/tests/run-program.impure.lisp +++ b/tests/run-program.impure.lisp @@ -106,3 +106,43 @@ (with-open-file (f *tmpfile*) (assert (equal "baz" (read-line f))))) (delete-file *tmpfile*)) + +;; Around 1.0.12 there was a regression when :INPUT or :OUTPUT was a +;; pathname designator. Since these use the same code, it should +;; suffice to test just :INPUT. +(let ((file)) + (unwind-protect + (progn (with-open-file (f "run-program-test.tmp" :direction :output) + (setf file (truename f)) + (write-line "Foo" f)) + (assert (run-program "cat" () + :input file :output t + :search t :wait t))) + (when file + (delete-file file)))) + +;;; This used to crash on Darwin and trigger recursive lock errors on +;;; every platform. +(with-test (:name (:run-program :stress)) + ;; Do it a hundred times in batches of 10 so that with a low limit + ;; of the number of processes the test can have a chance to pass. + (loop + repeat 10 do + (map nil + #'sb-ext:process-wait + (loop repeat 10 + collect + (sb-ext:run-program "/bin/echo" ' + ("It would be nice if this didn't crash.") + :wait nil :output nil))))) + +(with-test (:name (:run-program :pty-stream)) + (assert (equal "OK" + (subseq + (with-output-to-string (s) + (assert (= 42 (process-exit-code + (run-program "/bin/sh" '("-c" "echo OK; exit 42") :wait t + :pty s)))) + s) + 0 + 2))))