#![allow(clippy::unwrap_used, clippy::expect_used)]
use kaish_kernel::{Kernel, KernelConfig};
#[tokio::test]
async fn malformed_cmdsubst_in_quotes_is_loud() {
let kernel = Kernel::new(KernelConfig::repl()).expect("kernel");
let res = kernel.execute("echo \"$(if true; echo 1; fi)\"").await;
assert!(
res.is_err(),
"malformed quoted $() must be a loud parse error, got: {res:?}"
);
}
#[tokio::test]
async fn malformed_cmdsubst_unquoted_still_loud() {
let kernel = Kernel::new(KernelConfig::repl()).expect("kernel");
assert!(kernel
.execute("echo $(if true; echo 1; fi)")
.await
.is_err());
}
#[tokio::test]
async fn valid_cmdsubst_in_quotes_runs() {
let kernel = Kernel::new(KernelConfig::repl()).expect("kernel");
let r = kernel.execute("echo \"$(echo ok)\"").await.expect("execute");
assert_eq!(r.code, 0);
assert_eq!(r.text_out().trim(), "ok");
}
#[tokio::test]
async fn plain_text_with_cmdsubst_interpolation_runs() {
let kernel = Kernel::new(KernelConfig::repl()).expect("kernel");
let r = kernel
.execute("echo \"pre $(echo mid) post\"")
.await
.expect("execute");
assert_eq!(r.code, 0);
assert_eq!(r.text_out().trim(), "pre mid post");
}