diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 12:41:41 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 12:41:41 +0000 |
commit | 10ee2acdd26a7f1298c6f6d6b7af9b469fe29b87 (patch) | |
tree | bdffd5d80c26cf4a7a518281a204be1ace85b4c1 /vendor/gix-command/tests | |
parent | Releasing progress-linux version 1.70.0+dfsg1-9~progress7.99u1. (diff) | |
download | rustc-10ee2acdd26a7f1298c6f6d6b7af9b469fe29b87.tar.xz rustc-10ee2acdd26a7f1298c6f6d6b7af9b469fe29b87.zip |
Merging upstream version 1.70.0+dfsg2.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/gix-command/tests')
-rw-r--r-- | vendor/gix-command/tests/command.rs | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/vendor/gix-command/tests/command.rs b/vendor/gix-command/tests/command.rs new file mode 100644 index 000000000..cc1f5bda9 --- /dev/null +++ b/vendor/gix-command/tests/command.rs @@ -0,0 +1,116 @@ +use gix_testtools::Result; + +mod prepare { + fn quoted(input: &[&str]) -> String { + input.iter().map(|s| format!("\"{s}\"")).collect::<Vec<_>>().join(" ") + } + #[test] + fn single_and_multiple_arguments() { + let cmd = std::process::Command::from(gix_command::prepare("ls").arg("first").args(["second", "third"])); + assert_eq!(format!("{cmd:?}"), quoted(&["ls", "first", "second", "third"])); + } +} + +mod spawn { + #[cfg(unix)] + use bstr::ByteSlice; + + #[test] + #[cfg(unix)] + fn environment_variables_are_passed_one_by_one() -> crate::Result { + let out = gix_command::prepare("echo $FIRST $SECOND") + .env("FIRST", "first") + .env("SECOND", "second") + .with_shell() + .spawn()? + .wait_with_output()?; + assert_eq!(out.stdout.as_bstr(), "first second\n"); + Ok(()) + } + + #[test] + #[cfg(unix)] + fn disallow_shell() -> crate::Result { + let out = gix_command::prepare("echo hi") + .with_shell() + .spawn()? + .wait_with_output()?; + assert_eq!(out.stdout.as_bstr(), "hi\n"); + assert!( + gix_command::prepare("echo hi") + .with_shell() + .without_shell() + .spawn() + .is_err(), + "no command named 'echo hi' exists" + ); + Ok(()) + } + + #[test] + fn direct_command_execution_searches_in_path() -> crate::Result { + assert!(gix_command::prepare(if cfg!(unix) { "ls" } else { "dir.exe" }) + .spawn()? + .wait()? + .success()); + Ok(()) + } + + #[cfg(unix)] + #[test] + fn direct_command_with_absolute_command_path() -> crate::Result { + assert!(gix_command::prepare("/bin/ls").spawn()?.wait()?.success()); + Ok(()) + } + + mod with_shell { + use gix_testtools::bstr::ByteSlice; + + #[test] + fn command_in_path_with_args() -> crate::Result { + assert!(gix_command::prepare(if cfg!(unix) { "ls -l" } else { "dir.exe -a" }) + .with_shell() + .spawn()? + .wait()? + .success()); + Ok(()) + } + + #[test] + fn sh_shell_specific_script_code() -> crate::Result { + assert!(gix_command::prepare(":;:;:").with_shell().spawn()?.wait()?.success()); + Ok(()) + } + + #[test] + fn sh_shell_specific_script_code_with_single_extra_arg() -> crate::Result { + let out = gix_command::prepare("echo") + .with_shell() + .arg("1") + .spawn()? + .wait_with_output()?; + assert!(out.status.success()); + #[cfg(not(windows))] + assert_eq!(out.stdout.as_bstr(), "1\n"); + #[cfg(windows)] + assert_eq!(out.stdout.as_bstr(), "1\r\n"); + Ok(()) + } + + #[test] + fn sh_shell_specific_script_code_with_multiple_extra_args() -> crate::Result { + let out = gix_command::prepare("echo") + .with_shell() + .arg("1") + .arg("2") + .spawn()? + .wait_with_output()?; + assert!(out.status.success()); + #[cfg(not(windows))] + assert_eq!(out.stdout.as_bstr(), "1 2\n"); + #[cfg(windows)] + assert_eq!(out.stdout.as_bstr(), "1 2\r\n"); + Ok(()) + } + } +} |