From c52ec9fe9e29b84c7a558b37e889ffc8e4547b90 Mon Sep 17 00:00:00 2001 From: Marius Gerbershagen Date: Sat, 25 Feb 2023 21:21:33 +0100 Subject: [PATCH] tests: implement process-environ test on windows --- src/tests/normal-tests/run-program.lsp | 43 +++++++++++++++----------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/src/tests/normal-tests/run-program.lsp b/src/tests/normal-tests/run-program.lsp index ef0da61ca..65ad48313 100644 --- a/src/tests/normal-tests/run-program.lsp +++ b/src/tests/normal-tests/run-program.lsp @@ -174,25 +174,32 @@ (is (null (zerop (length (get-output-stream-string error-stream))))) (mapc #'close (list output-stream error-stream))))) -#-windows (test process-environ - (is-equal 0 (nth-value 1 (ext:run-program "env" nil))) - (is-equal 0 (nth-value 1 (ext:run-program "env" nil :environ :default))) - (is-equal "bar" - (read-line (ext:run-program "printenv" '("foo") - :environ (list "foo=bar" - (format nil "PATH=~A" (ext:getenv "PATH")))) - nil nil)) - (signals simple-error (ext:run-program "env" nil :environ :bam) nil nil) - #-cygwin ;; Cygwin always injects `WINDIR=C:\\Windows' variable. - (is (null (slurp (ext:run-program "/usr/bin/env" nil :environ nil))))) - -#+windows -(test process-environ - ;; This tests need to be implemented when access to Windows platform - ;; is granted (before the release). Program to use is `set', not - ;; sure if it is part of Windows shell or something we can run. - (is (null "IMPLEMENT ME!"))) + (flet ((run-env-program (&rest args) + ;; use :input nil :output nil :error nil as default to stop + ;; pipes from filling up and the process deadlocking + (setf args (append args '(:input nil :output nil :error nil))) + #-windows (apply #'ext:run-program "env" nil args) + #+windows (apply #'ext:run-program "cmd" '("/k" "set" "&" "exit") args)) + (run-printenv-program (var &rest args) + #-windows (apply #'ext:run-program "printenv" (list var) args) + #+windows (apply #'ext:run-program "cmd" + (list "/k" (concatenate 'string "echo %" var "%") + "&" "exit") + args))) + (is-equal 0 (nth-value 1 (run-env-program))) + (is-equal 0 (nth-value 1 (run-env-program :environ :default))) + (is-equal "bar" + (delete #\Space + (read-line + (run-printenv-program + "foo" + :environ (list "foo=bar" + (format nil "PATH=~A" (ext:getenv "PATH")))) + nil nil))) + (signals simple-error (run-env-program :environ :bam) nil nil) + #-cygwin ;; Cygwin always injects `WINDIR=C:\\Windows' variable. + (is (null (slurp (run-env-program :environ nil)))))) ;;; Date: 2022-10-22 ;;; From: Marius Gerbershagen