use super::state_unit::{FINISH_END, lock, reading, resp, write, writer};
use crate::git_tree::{AgentState, Probe};
use tempfile::tempdir;
const LENGTH_END: &[u8] = br#"{"type":"message_start","v":1,"role":"assistant"}
{"type":"content_delta","index":0,"delta":{"thinking_delta":"hmm"}}
{"type":"finish","reason":"length"}
{"type":"end"}
"#;
#[test]
fn no_lock_and_output_limited_response_is_stopped_and_truncated() {
let dir = tempdir().unwrap();
let agent = "20260427T140000Z-llll";
write(&resp(dir.path(), agent, "001"), LENGTH_END);
assert_eq!(
reading(dir.path(), agent, &lock(Probe::Free), &writer(Probe::Free)),
(AgentState::Stopped, false, true)
);
}
#[test]
fn a_driver_at_work_over_an_output_limited_step_reads_neither() {
let dir = tempdir().unwrap();
let agent = "20260427T140000Z-mmmm";
write(&resp(dir.path(), agent, "001"), LENGTH_END);
assert_eq!(
reading(dir.path(), agent, &lock(Probe::Held), &writer(Probe::Free)),
(AgentState::Live, false, false)
);
}
#[test]
fn a_tool_use_finish_is_untouched_by_the_output_limit_reading() {
let dir = tempdir().unwrap();
let agent = "20260427T140000Z-tttt";
write(
&resp(dir.path(), agent, "001"),
br#"{"type":"finish","reason":"tool_use"}
{"type":"end"}
"#,
);
assert_eq!(
reading(dir.path(), agent, &lock(Probe::Free), &writer(Probe::Free)),
(AgentState::Quiescent, false, false)
);
}
#[test]
fn an_output_limited_step_behind_a_newer_one_is_not_the_reading() {
let dir = tempdir().unwrap();
let agent = "20260427T140000Z-nnnn";
write(&resp(dir.path(), agent, "001"), LENGTH_END);
write(&resp(dir.path(), agent, "002"), FINISH_END);
assert_eq!(
reading(dir.path(), agent, &lock(Probe::Free), &writer(Probe::Free)),
(AgentState::Quiescent, false, false)
);
}