116 lines · 3.4 KB · Rust
RawDownload
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(())        }    }}