#![cfg(feature = "wallet")]
use std::process::Command;
#[test]
fn sh_composes_scripts_over_the_rooted_fs() {
let dir = std::env::temp_dir().join(format!("lh-sh-it-{}", std::process::id()));
let _ = std::fs::remove_dir_all(&dir);
std::fs::create_dir_all(&dir).expect("create temp dir");
std::fs::write(
dir.join("main.bl"),
"write out.txt seed\n\
run child.bl\n\
cat out.txt && echo done\n\
frobnicate || echo recovered\n",
)
.unwrap();
std::fs::write(dir.join("child.bl"), "echo from-child\n").unwrap();
let out = Command::new(env!("CARGO_BIN_EXE_localharness"))
.args(["sh", dir.join("main.bl").to_str().unwrap()])
.output()
.expect("run `localharness sh`");
let stdout = String::from_utf8_lossy(&out.stdout);
let stderr = String::from_utf8_lossy(&out.stderr);
let _ = std::fs::remove_dir_all(&dir);
assert!(
out.status.success(),
"non-zero exit {:?}\nstdout:\n{stdout}\nstderr:\n{stderr}",
out.status.code()
);
assert!(stdout.contains("from-child"), "run-composition missing:\n{stdout}");
assert!(stdout.contains("seed"), "write+cat over rooted fs missing:\n{stdout}");
assert!(stdout.contains("done"), "&& chaining missing:\n{stdout}");
assert!(stdout.contains("recovered"), "|| fallback missing:\n{stdout}");
}
#[test]
fn sh_dash_c_runs_an_inline_one_liner() {
let out = Command::new(env!("CARGO_BIN_EXE_localharness"))
.args(["sh", "-c", "echo hi && echo there || echo nope"])
.output()
.expect("run `localharness sh -c`");
let stdout = String::from_utf8_lossy(&out.stdout);
assert!(
out.status.success(),
"non-zero exit {:?}\nstdout:\n{stdout}\nstderr:\n{}",
out.status.code(),
String::from_utf8_lossy(&out.stderr)
);
assert_eq!(stdout, "hi\nthere\n", "inline && / || output wrong:\n{stdout}");
}