just/tests/command.rs
2021-05-10 03:35:35 +00:00

135 lines
2.5 KiB
Rust

use crate::common::*;
test! {
name: long,
justfile: "
x:
echo XYZ
",
args: ("--command", "printf", "foo"),
stdout: "foo",
}
test! {
name: short,
justfile: "
x:
echo XYZ
",
args: ("-c", "printf", "foo"),
stdout: "foo",
}
test! {
name: no_binary,
justfile: "
x:
echo XYZ
",
args: ("--command"),
stderr: &format!("
error: The argument '--command <COMMAND>' requires a value but none was supplied
USAGE:
just{} --color <COLOR> --shell <SHELL> --shell-arg <SHELL-ARG>... \
<--choose|--command <COMMAND>|--completions <SHELL>|--dump|--edit|\
--evaluate|--init|--list|--show <RECIPE>|--summary|--variables>
For more information try --help
", EXE_SUFFIX),
status: EXIT_FAILURE,
}
test! {
name: env_is_loaded,
justfile: "
x:
echo XYZ
",
args: ("--command", "sh", "-c", "printf $DOTENV_KEY"),
stdout: "dotenv-value",
}
test! {
name: exports_are_available,
justfile: "
export FOO := 'bar'
x:
echo XYZ
",
args: ("--command", "sh", "-c", "printf $FOO"),
stdout: "bar",
}
test! {
name: set_overrides_work,
justfile: "
export FOO := 'bar'
x:
echo XYZ
",
args: ("--set", "FOO", "baz", "--command", "sh", "-c", "printf $FOO"),
stdout: "baz",
}
test! {
name: run_in_shell,
justfile: "
set shell := ['printf']
",
args: ("--shell-command", "--command", "bar baz"),
stdout: "bar baz",
shell: false,
}
test! {
name: exit_status,
justfile: "
x:
echo XYZ
",
args: ("--command", "false"),
status: EXIT_FAILURE,
}
#[test]
fn working_directory_is_correct() {
let tmp = tempdir();
fs::write(tmp.path().join("justfile"), "").unwrap();
fs::write(tmp.path().join("bar"), "baz").unwrap();
fs::create_dir(tmp.path().join("foo")).unwrap();
let output = Command::new(&executable_path("just"))
.args(&["--command", "cat", "bar"])
.current_dir(tmp.path().join("foo"))
.output()
.unwrap();
assert_eq!(str::from_utf8(&output.stderr).unwrap(), "");
assert!(output.status.success());
assert_eq!(str::from_utf8(&output.stdout).unwrap(), "baz");
}
#[test]
fn command_not_found() {
let tmp = tempdir();
fs::write(tmp.path().join("justfile"), "").unwrap();
let output = Command::new(&executable_path("just"))
.args(&["--command", "asdfasdfasdfasdfadfsadsfadsf", "bar"])
.output()
.unwrap();
assert!(str::from_utf8(&output.stderr)
.unwrap()
.starts_with("error: Failed to invoke `asdfasdfasdfasdfadfsadsfadsf` `bar`:"));
assert!(!output.status.success());
}