143 lines
4.0 KiB
Rust
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}"
|
|
);
|
|
}
|