summaryrefslogtreecommitdiffstats
path: root/vendor/xshell/tests/it/compile_failures.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/xshell/tests/it/compile_failures.rs')
-rw-r--r--vendor/xshell/tests/it/compile_failures.rs128
1 files changed, 128 insertions, 0 deletions
diff --git a/vendor/xshell/tests/it/compile_failures.rs b/vendor/xshell/tests/it/compile_failures.rs
new file mode 100644
index 000000000..611af5acb
--- /dev/null
+++ b/vendor/xshell/tests/it/compile_failures.rs
@@ -0,0 +1,128 @@
+use xshell::{cmd, Shell};
+
+#[track_caller]
+fn check(code: &str, err_msg: &str) {
+ let sh = Shell::new().unwrap();
+ let xshell_dir = sh.current_dir();
+ let temp_dir = sh.create_temp_dir().unwrap();
+ sh.change_dir(temp_dir.path());
+
+ let manifest = format!(
+ r#"
+[package]
+name = "cftest"
+version = "0.0.0"
+edition = "2018"
+[workspace]
+
+[lib]
+path = "main.rs"
+
+[dependencies]
+xshell = {{ path = {xshell_dir:?} }}
+"#,
+ );
+
+ let snip = format!(
+ "
+use xshell::*;
+pub fn f() {{
+ let sh = Shell::new().unwrap();
+ {code};
+}}
+"
+ );
+
+ sh.write_file("Cargo.toml", manifest).unwrap();
+ sh.write_file("main.rs", snip).unwrap();
+
+ let stderr = cmd!(sh, "cargo build").ignore_status().read_stderr().unwrap();
+ assert!(
+ stderr.contains(err_msg),
+ "\n\nCompile fail fail!\n\nExpected:\n{}\n\nActual:\n{}\n",
+ err_msg,
+ stderr
+ );
+}
+
+#[test]
+fn not_a_string_literal() {
+ check("cmd!(sh, 92)", "expected a plain string literal");
+}
+
+#[test]
+fn not_raw_string_literal() {
+ check(r#"cmd!(sh, r"raw")"#, "expected a plain string literal");
+}
+
+#[test]
+fn interpolate_complex_expression() {
+ check(
+ r#"cmd!(sh, "{echo.as_str()}")"#,
+ "error: can only interpolate simple variables, got this expression instead: `echo.as_str()`",
+ );
+}
+
+#[test]
+fn interpolate_splat_concat_prefix() {
+ check(
+ r#"cmd!(sh, "echo a{args...}")"#,
+ "error: can't combine splat with concatenation, add spaces around `{args...}`",
+ );
+}
+
+#[test]
+fn interpolate_splat_concat_suffix() {
+ check(
+ r#"cmd!(sh, "echo {args...}b")"#,
+ "error: can't combine splat with concatenation, add spaces around `{args...}`",
+ );
+}
+
+#[test]
+fn interpolate_splat_concat_mixfix() {
+ check(
+ r#"cmd!(sh, "echo a{args...}b")"#,
+ "error: can't combine splat with concatenation, add spaces around `{args...}`",
+ );
+}
+
+#[test]
+fn empty_command() {
+ check(r#"cmd!(sh, "")"#, "error: command can't be empty");
+}
+
+#[test]
+fn spalt_program() {
+ check(r#"cmd!(sh, "{cmd...}")"#, "error: can't splat program name");
+}
+
+#[test]
+fn unclosed_quote() {
+ check(r#"cmd!(sh, "echo 'hello world")"#, "error: unclosed `'` in command");
+}
+
+#[test]
+fn unclosed_curly() {
+ check(r#"cmd!(sh, "echo {hello world")"#, "error: unclosed `{` in command");
+}
+
+#[test]
+fn interpolate_integer() {
+ check(
+ r#"
+ let x = 92;
+ cmd!(sh, "make -j {x}")"#,
+ r#"is not implemented"#,
+ );
+}
+
+#[test]
+fn splat_fn_pointer() {
+ check(
+ r#"
+ let dry_run: fn() -> Option<&'static str> = || None;
+ cmd!(sh, "make -j {dry_run...}")"#,
+ r#"is not implemented"#,
+ );
+}