#![allow(clippy::unwrap_used, clippy::expect_used)]
use kaish_kernel::{Kernel, KernelConfig};
fn kernel() -> Kernel {
Kernel::new(KernelConfig::repl().with_skip_validation(true)).expect("kernel")
}
#[tokio::test]
async fn single_json_object_is_one_item() {
let kernel = kernel();
let r = kernel
.execute(r#"echo '{"k":1}' | jq . | scatter"#)
.await
.expect("execute");
assert_eq!(r.code, 0, "should succeed; err={:?}", r.err);
assert!(
r.text_out().contains("1 items"),
"expected 1 item for a single JSON object, got: {:?}",
r.text_out()
);
}
#[tokio::test]
async fn single_json_number_is_one_item() {
let kernel = kernel();
let r = kernel
.execute(r#"echo '42' | jq . | scatter"#)
.await
.expect("execute");
assert_eq!(r.code, 0, "should succeed; err={:?}", r.err);
assert!(
r.text_out().contains("1 items"),
"expected 1 item for a single JSON number, got: {:?}",
r.text_out()
);
}
#[tokio::test]
async fn single_json_string_is_one_item() {
let kernel = kernel();
let r = kernel
.execute(r#"echo '"hello"' | jq . | scatter"#)
.await
.expect("execute");
assert_eq!(r.code, 0, "should succeed; err={:?}", r.err);
assert!(
r.text_out().contains("1 items"),
"expected 1 item for a single JSON string, got: {:?}",
r.text_out()
);
}
#[tokio::test]
async fn json_array_fans_out_per_element() {
let kernel = kernel();
let r = kernel
.execute("seq 1 3 | scatter")
.await
.expect("execute");
assert_eq!(r.code, 0, "should succeed; err={:?}", r.err);
assert!(
r.text_out().contains("3 items"),
"expected 3 items for seq 1..3, got: {:?}",
r.text_out()
);
}
#[tokio::test]
async fn plain_text_pipe_still_newline_splits() {
let kernel = kernel();
let r = kernel
.execute(r#"printf "a\nb\nc" | scatter"#)
.await
.expect("execute");
assert_eq!(r.code, 0, "should succeed; err={:?}", r.err);
assert!(
r.text_out().contains("3 items"),
"expected 3 items from 3-line plain text, got: {:?}",
r.text_out()
);
}