fix long-standing debug-name confusion
[sbcl.git] / tests / run-program.impure.lisp
index 098c74d..8a4b3a3 100644 (file)
         (process-close proc)
         (assert (not stopped))))))
 
+
+;; Check that in when you do run-program with :wait t that causes
+;; encoding error, it does not affect the following run-program
+(with-test (:name (:run-program :clean-exit-after-encoding-error))
+  (let ((had-error-p nil))
+    (flet ((barf (&optional (format :default))
+             (with-output-to-string (stream)
+               (run-program #-netbsd "/usr/bin/perl" #+netbsd "/usr/pkg/bin/perl"
+                            '("-e" "print \"\\x20\\xfe\\xff\\x0a\"")
+                            :output stream
+                            :external-format format)))
+           (no-barf ()
+             (with-output-to-string (stream)
+               (run-program "/bin/echo"
+                            '("This is a test")
+                            :output stream))))
+      (handler-case
+          (barf :utf-8)
+        (error ()
+          (setq had-error-p t)))
+      (assert had-error-p)
+      ;; now run the harmless program
+      (setq had-error-p nil)
+      (handler-case
+          (no-barf)
+        (error ()
+          (setq had-error-p t)))
+      (assert (not had-error-p)))))
+
+(with-test (:name (:run-program :no-such-thing))
+  (assert (search "Couldn't execute"
+                  (handler-case
+                      (progn (run-program "no-such-program-we-hope" '()) nil)
+                    (error (e)
+                      (princ-to-string e))))))
+
+(with-test (:name (:run-program :not-executable))
+  (assert (search "Couldn't execute"
+                  (handler-case
+                      (progn (run-program "run-program.impure.lisp" '()) nil)
+                    (error (e)
+                      (princ-to-string e))))))
+
+(with-test (:name (:run-program :if-input-does-not-exist))
+  (let ((file (pathname (sb-posix:mktemp "rpXXXXXX"))))
+    (assert (null (sb-ext:run-program "/bin/cat" '() :input file)))
+    (assert (null (sb-ext:run-program "/bin/cat" '() :output #.(or *compile-file-truename*
+                                                                   *load-truename*)
+                                      :if-output-exists nil)))))