From c7682a95e6a440d7317b1ab429af73125d307288 Mon Sep 17 00:00:00 2001 From: honbin Date: Mon, 19 Oct 2026 19:54:36 +0900 Subject: [PATCH] window: add CLI tests for --field Cover the JSONL path end to end: in-range records pass through verbatim, records missing the field or holding a non-string value count as unparseable, and an empty field name is rejected. --- crates/window/tests/cli.rs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/crates/window/tests/cli.rs b/crates/window/tests/cli.rs index 7e26fc7..e1f1e07 100644 --- a/crates/window/tests/cli.rs +++ b/crates/window/tests/cli.rs @@ -69,3 +69,34 @@ fn rejects_bad_bound() { let stderr = String::from_utf8(out.stderr).unwrap(); assert!(stderr.contains("--from:"), "stderr:\n{stderr}"); } + +#[test] +fn field_reads_jsonl_and_keeps_records_verbatim() { + let input = r#"{"time":"2026-09-03T10:21:29+09:00","status":502} +{"time":"2026-09-03T10:21:31+09:00","status":502} +{"status":200} +{"time":1788398491} +"#; + let out = run( + &["--field", "time", "--from", "2026-09-03T10:21:30+09:00"], + input, + ); + assert!(out.status.success()); + assert_eq!( + String::from_utf8(out.stdout).unwrap(), + "{\"time\":\"2026-09-03T10:21:31+09:00\",\"status\":502}\n" + ); + let stderr = String::from_utf8(out.stderr).unwrap(); + assert!( + stderr.contains("kept 1 / 4 lines (skipped 2 unparseable)"), + "stderr:\n{stderr}" + ); +} + +#[test] +fn rejects_empty_field() { + let out = run(&["--field", "", "--from", "2026-09-03T10:21:30+09:00"], ""); + assert!(!out.status.success()); + let stderr = String::from_utf8(out.stderr).unwrap(); + assert!(stderr.contains("non-empty field name"), "stderr:\n{stderr}"); +}