+(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))))))
+
+#-win32
+(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)))))
+
+
+(with-test (:name (:run-program :set-directory))
+ (let* ((directory #-win32 "/"
+ #+win32 "c:\\")
+ (out (sb-ext:process-output
+ (sb-ext:run-program #-win32 "/bin/sh"
+ #-win32 '("-c" "pwd")
+ #+win32 "cmd.exe"
+ #+win32 '("/c" "cd")
+ :output :stream
+ :directory directory
+ :search t))))
+ (assert
+ (equal directory
+ (string-right-trim '(#\Return) (read-line out))))))