Files
pikl/crates/pikl/tests/headless.rs

143 lines
4.0 KiB
Rust

#![cfg(unix)]
mod common;
#[test]
fn headless_confirm_first() {
let (stdout, _stderr, code) = common::run_pikl("alpha\nbeta\n", "confirm\n", &[]);
assert_eq!(code, 0, "expected exit 0, stderr: {_stderr}");
assert!(
stdout.contains("alpha"),
"expected alpha in stdout, got: {stdout}"
);
}
#[test]
fn headless_move_then_confirm() {
let (stdout, _stderr, code) = common::run_pikl("alpha\nbeta\n", "move-down\nconfirm\n", &[]);
assert_eq!(code, 0, "expected exit 0, stderr: {_stderr}");
assert!(
stdout.contains("beta"),
"expected beta in stdout, got: {stdout}"
);
}
#[test]
fn headless_filter_then_confirm() {
let (stdout, _stderr, code) =
common::run_pikl("alpha\nbeta\nbanana\n", "filter ban\nconfirm\n", &[]);
assert_eq!(code, 0, "expected exit 0, stderr: {_stderr}");
assert!(
stdout.contains("banana"),
"expected banana in stdout, got: {stdout}"
);
}
#[test]
fn headless_cancel() {
let (_stdout, _stderr, code) = common::run_pikl("alpha\n", "cancel\n", &[]);
assert_eq!(code, 1, "expected exit 1 on cancel");
}
#[test]
fn headless_empty_script_cancels() {
let (_stdout, _stderr, code) = common::run_pikl("alpha\n", "", &[]);
assert_eq!(
code, 1,
"expected exit 1 when script is empty (sender dropped → cancelled)"
);
}
#[test]
fn headless_invalid_script_exits_2() {
let (_stdout, stderr, code) = common::run_pikl("alpha\n", "bogus\n", &[]);
assert_eq!(code, 2, "expected exit 2 on invalid script");
assert!(
stderr.contains("unknown action"),
"expected error diagnostic, got: {stderr}"
);
}
#[test]
fn headless_actions_after_show_ui_exits_2() {
let (_stdout, stderr, code) = common::run_pikl("alpha\n", "show-ui\nconfirm\n", &[]);
assert_eq!(code, 2, "expected exit 2 for actions after show-ui");
assert!(
stderr.contains("actions after show-ui"),
"expected show-ui error, got: {stderr}"
);
}
// -- CSV/TSV integration tests --
#[test]
fn csv_confirm_first() {
let (stdout, _stderr, code) = common::run_pikl(
"name,age\nalice,30\nbob,25\n",
"confirm\n",
&["--input-format", "csv"],
);
assert_eq!(code, 0, "expected exit 0, stderr: {_stderr}");
// Plain output should show the JSON object
assert!(
stdout.contains("alice"),
"expected alice in stdout, got: {stdout}"
);
}
#[test]
fn csv_with_columns_subset() {
let (stdout, _stderr, code) = common::run_pikl(
"name,age,city\nalice,30,toronto\nbob,25,vancouver\n",
"confirm\n",
&["--input-format", "csv", "--columns", "name,city"],
);
assert_eq!(code, 0, "expected exit 0, stderr: {_stderr}");
assert!(
stdout.contains("alice"),
"expected alice in stdout, got: {stdout}"
);
}
#[test]
fn csv_filter_then_confirm() {
let (stdout, _stderr, code) = common::run_pikl(
"name,age\nalice,30\nbob,25\ncharlie,35\n",
"filter bob\nconfirm\n",
&["--input-format", "csv"],
);
assert_eq!(code, 0, "expected exit 0, stderr: {_stderr}");
assert!(
stdout.contains("bob"),
"expected bob in stdout, got: {stdout}"
);
}
#[test]
fn csv_multi_select() {
let (stdout, _stderr, code) = common::run_pikl(
"name,age\nalice,30\nbob,25\n",
"toggle-select\nmove-down\ntoggle-select\nconfirm\n",
&["--input-format", "csv", "--multi"],
);
assert_eq!(code, 0, "expected exit 0, stderr: {_stderr}");
assert!(
stdout.contains("alice") && stdout.contains("bob"),
"expected both alice and bob in stdout, got: {stdout}"
);
}
#[test]
fn tsv_confirm_first() {
let (stdout, _stderr, code) = common::run_pikl(
"name\tage\nalice\t30\nbob\t25\n",
"confirm\n",
&["--input-format", "tsv"],
);
assert_eq!(code, 0, "expected exit 0, stderr: {_stderr}");
assert!(
stdout.contains("alice"),
"expected alice in stdout, got: {stdout}"
);
}