use assert_cmd::prelude::*;
use assert_fs::fixture::ChildPath;
use assert_fs::prelude::*;
use predicates::prelude::*;
use predicates::str::contains;
use std::process::Command;
const CONFIG_1: &'static str = r#"
[scripts.test_cmd_1]
alias = 'test_cmd_1'
command = 'echo test_1'
tags = ['info', 'echo', 'grp_1']
[scripts.test_cmd_2]
command = 'echo test_2'
tags = ['debug', 'echo']
[scripts.test_success]
alias = 'test_success'
command = '''
#!/bin/sh
exit 0
'''
[scripts.test_fail]
alias = 'test_fail'
command = '''
#!/bin/sh
exit 1
'''
[scripts.test_exit_with_100]
alias = 'test_exit_with_100'
command = '''
#!/bin/sh
exit 100
'''
[scripts.shebang-with-args]
alias = 'shebang-with-args'
command = '''
#!/bin/sh
echo "$1--$2"
'''
[scripts.inline-with-args]
alias = 'inline-with-args'
command = 'echo "$1--$2"'
"#;
pier_test!(cli => test_list_scripts, cfg => CONFIG_1,
| _cfg: ChildPath, mut cmd: Command | {
cmd.arg("list");
cmd.assert()
.success();
});
pier_test!(cli => test_run_shebang_with_args, cfg => CONFIG_1,
| _cfg: ChildPath, mut cmd: Command | {
cmd.arg("run")
.arg("shebang-with-args")
.arg("Hello!")
.arg("Hi.");
cmd.assert()
.stdout(contains("Hello!--Hi."))
.success();
});
pier_test!(cli => test_run_inline_with_args, cfg => CONFIG_1,
| _cfg: ChildPath, mut cmd: Command | {
cmd.arg("run")
.arg("inline-with-args")
.env("SHELL", "/bin/sh")
.arg("Hello!")
.arg("Hi.");
cmd.assert()
.stdout(contains("Hello!--Hi."))
.success();
});
pier_test!(cli => test_list_alias_scripts, cfg => CONFIG_1,
| _cfg: ChildPath, mut cmd: Command | {
cmd.arg("ls");
cmd.assert()
.success();
});
pier_test!(cli => test_run_successful, cfg => CONFIG_1,
| _cfg: ChildPath, mut cmd: Command | {
cmd.args(&["run", "test_success"]);
cmd.assert()
.success();
});
pier_test!(cli => test_run_failing, cfg => CONFIG_1,
| _cfg: ChildPath, mut cmd: Command | {
cmd.args(&["run", "test_fail"]);
cmd.assert()
.failure();
});
pier_test!(cli => test_run_custom_exit_code, cfg => CONFIG_1,
| _cfg: ChildPath, mut cmd: Command | {
cmd.args(&["run", "test_exit_with_100"]);
cmd.assert()
.failure()
.code(100);
});
pier_test!(cli => test_list_scripts_with_command_width, cfg => CONFIG_1,
| _cfg: ChildPath, mut cmd: Command | {
cmd.args(&["list", "-c", "20"]);
cmd.assert()
.success();
});
pier_test!(basic => test_config_initialization,
| te: crate::common::TestEnv | {
let cfg = te.dir.child("pier.toml");
let mut cmd = Command::cargo_bin("pier").expect("Failed to set cargo binary pier");
cmd.current_dir(te.dir.path());
cmd.args(&["-c", cfg.path().to_str().unwrap(), "init"]);
cmd.assert().success();
cfg.assert(predicate::path::exists());
});
pier_test!(cli => test_list_aliases, cfg => CONFIG_1,
| _cfg: ChildPath, mut cmd: Command | {
cmd.args(&["list", "-q"]);
cmd.assert()
.success()
.stdout(contains(trim!(r#"
test_cmd_1
test_cmd_2
"#)).trim()
);
});
pier_test!(cli => test_list_alias_with_matching_tag, cfg => CONFIG_1,
| _cfg: ChildPath, mut cmd: Command | {
cmd.args(&["list", "-q", "-t", "info"]);
cmd.assert()
.success()
.stdout(contains(trim!(r#"
test_cmd_1
"#)).trim()
);
});
pier_test!(cli => test_list_without_tag_match, cfg => CONFIG_1,
| _cfg: ChildPath, mut cmd: Command | {
cmd.args(&["list", "-q", "-t", "bad_tag"]);
cmd.assert()
.success()
.stdout(contains("").trim()
);
});
pier_test!(cli => test_add_script, cfg => CONFIG_1,
| cfg: ChildPath, mut cmd: Command | {
cmd.args(&["add", r#"echo test_3"#, "-a", "test_cmd_3", "-d", "Test Description."]);
cmd.assert().success();
cfg.assert(contains(trim!(r#"
[scripts.test_cmd_3]
command = 'echo test_3'
description = 'Test Description.'
"#)).trim()
);
});
pier_test!(cli => test_add_script_force_script, cfg => CONFIG_1,
| cfg: ChildPath, mut cmd: Command | {
cmd.args(&["add", r#"echo test_3"#, "-a", "test_cmd_1", "-d", "Test Description.", "-f"]);
cmd.assert().success();
cfg.assert(contains(trim!(r#"
[scripts.test_cmd_1]
command = 'echo test_3'
description = 'Test Description.'
"#)).trim()
);
});
pier_test!(cli => test_copy_script, cfg => CONFIG_1,
| cfg: ChildPath, mut cmd: Command | {
cmd.args(&["copy", "test_cmd_1", "test_cmd_4"]);
cmd.assert().success();
cfg.assert(contains(trim!(r#"
[scripts.test_cmd_1]
command = 'echo test_1'
"#)).trim()
);
cfg.assert(contains(trim!(r#"
[scripts.test_cmd_4]
command = 'echo test_1'
"#)).trim()
);
});
pier_test!(cli => test_move_script, cfg => CONFIG_1,
| cfg: ChildPath, mut cmd: Command | {
cmd.args(&["move", "test_cmd_1", "test_cmd_4"]);
cmd.assert().success();
cfg.assert(contains(trim!(r#"
[scripts.test_cmd_4]
command = 'echo test_1'
"#)).trim()
);
cfg.assert(contains(trim!(r#"
[scripts.test_cmd_1]
alias = 'test_cmd_1'
command = 'echo test_1'
"#)).trim().not()
);
});
pier_test!(cli => test_move_with_force_script, cfg => CONFIG_1,
| cfg: ChildPath, mut cmd: Command | {
cmd.args(&["move", "test_cmd_1", "test_cmd_2", "-f"]);
cmd.assert().success();
cfg.assert(contains(trim!(r#"
[scripts.test_cmd_2]
command = 'echo test_1'
"#)).trim()
);
cfg.assert(contains(trim!(r#"
[scripts.test_cmd_1]
command = 'echo test_1'
"#)).trim().not()
);
});
pier_test!(cli => test_remove_script, cfg => CONFIG_1,
| cfg: ChildPath, mut cmd: Command | {
cmd.args(&["remove", "test_cmd_1"]);
cmd.assert().success();
cfg.assert(contains(trim!(r#"
[scripts.test_cmd_1]
alias = 'test_cmd_1'
command = 'echo test_1'
"#)).trim().not()
);
});
pier_test!(cli => test_show_script, cfg => r#"
[scripts.test_show]
alias = 'test_show'
command = '''
#!/bin/sh
for line in l1 l2 l3 l4; do
echo "$line"
done
'''
"#,
| _cfg: ChildPath, mut cmd: Command | {
cmd.args(&["show", "test_show"]);
cmd.assert()
.success()
.stdout(contains(trim!(r#"
for line in l1 l2 l3 l4; do
echo "$line"
done"#
)));
});
pier_test!(cli => test_run_script, cfg => CONFIG_1,
| _cfg: ChildPath, mut cmd: Command | {
cmd.args(&["run", "test_cmd_1"]);
cmd.assert()
.success()
.stdout(contains("test_1"));
});
pier_test!(cli => test_run_script_pipe, cfg => r#"
[scripts.test_pipe]
alias = "test_pipe"
command = '''
#!/bin/sh
echo "TEST_RUN_SCRIPT_PIPE_OUTPUT" | tr '[:upper:]' '[:lower:]'
'''
"#, | _cfg: ChildPath, mut cmd: Command | {
cmd.args(&["run", "test_pipe"]);
cmd.assert()
.success()
.stdout(contains("test_run_script_pipe_output"));
});
pier_test!(cli => test_run_script_non_blocking, cfg => r#"
[scripts.test_while_loop]
alias = "test_while_loop"
command = '''
#!/bin/sh
echo "1\\n2\\n3" | while read i; do echo "line read $i"; done
'''
"#, | _cfg: ChildPath, mut cmd: Command | {
cmd.args(&["run", "test_while_loop"]);
cmd.assert()
.success();
});
pier_test!(cli => test_run_script_and, cfg => r#"
[scripts.test_and]
alias = "test_and"
command = '''
#!/bin/sh
echo "test-x-1" && echo "test-x-2"
'''
"#, | _cfg: ChildPath, mut cmd: Command | {
cmd.args(&["run", "test_and"]);
cmd.assert()
.success()
.stdout(contains("test-x-1\ntest-x-2"));
});
pier_test!(cli => test_stderr_output, cfg => r#"
[scripts.write_to_stderr]
alias = "write_to_stderr"
command = '''
#!/bin/sh
echo "WRITE THIS TO STDERR" >&2
'''
"#, | _cfg: ChildPath, mut cmd: Command | {
cmd.args(&["run", "write_to_stderr"]);
cmd.assert()
.success()
.stderr(contains("WRITE THIS TO STDERR"));
});
pier_test!(cli => test_run_with_shebang, cfg => r#"
[scripts.test_shebang]
alias = "test_shebang"
command = '''
#!/usr/bin/env python3
print("Running python script with shebang!")
'''
"#, | _cfg: ChildPath, mut cmd: Command | {
cmd.args(&["run", "test_shebang"]);
cmd.assert()
.success()
.stdout(contains("Running python script with shebang!"));
});
pier_test!(cli => test_run_with_interpreter, cfg => r#"
[default]
interpreter = ["python3", "-c"]
[scripts.test_default_interpreter]
alias = "test_default_interpreter"
command = '''
print("Running python script with interpreter!")
'''
"#, | _cfg: ChildPath, mut cmd: Command | {
cmd.args(&["run", "test_default_interpreter"]);
cmd.assert()
.success()
.stdout(contains("Running python script with interpreter!"));
});