just/tests/command.rs

150 lines
2.7 KiB
Rust
Raw Permalink Normal View History

use super::*;
2021-05-09 20:35:35 -07:00
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: command_color,
justfile: "
x:
echo XYZ
",
args: ("--color", "always", "--command-color", "cyan"),
stdout: "XYZ\n",
stderr: "\u{1b}[1;36mecho XYZ\u{1b}[0m\n",
status: EXIT_SUCCESS,
}
2021-05-09 20:35:35 -07:00
test! {
name: no_binary,
justfile: "
x:
echo XYZ
",
args: ("--command"),
2024-05-14 20:29:40 -07:00
stderr: "
error: a value is required for '--command <COMMAND>...' but none was supplied
2021-05-09 20:35:35 -07:00
2024-05-14 20:29:40 -07:00
For more information, try '--help'.
",
status: 2,
2021-05-09 20:35:35 -07:00
}
#[test]
fn env_is_loaded() {
Test::new()
.justfile(
"
set dotenv-load
x:
echo XYZ
",
)
.args(["--command", "sh", "-c", "printf $DOTENV_KEY"])
.write(".env", "DOTENV_KEY=dotenv-value")
.stdout("dotenv-value")
.run();
2021-05-09 20:35:35 -07:00
}
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"),
stderr_regex: "error: Command `false` failed: exit (code|status): 1\n",
2021-05-09 20:35:35 -07:00
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();
2022-12-15 16:53:21 -08:00
let output = Command::new(executable_path("just"))
2022-11-22 16:36:23 -08:00
.args(["--command", "cat", "bar"])
2021-05-09 20:35:35 -07:00
.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();
2022-12-15 16:53:21 -08:00
let output = Command::new(executable_path("just"))
2022-11-22 16:36:23 -08:00
.args(["--command", "asdfasdfasdfasdfadfsadsfadsf", "bar"])
2021-05-09 20:35:35 -07:00
.output()
.unwrap();
assert!(str::from_utf8(&output.stderr)
.unwrap()
.starts_with("error: Failed to invoke `asdfasdfasdfasdfadfsadsfadsf` `bar`:"));
assert!(!output.status.success());
}