summaryrefslogtreecommitdiffstats
path: root/vendor/gix-command/tests/command.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/gix-command/tests/command.rs')
-rw-r--r--vendor/gix-command/tests/command.rs116
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(())
+ }
+ }
+}