improvise-7mro: the matrix covers x and p, and a cell inside the held window

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
This commit is contained in:
Edward Langley
2026-09-23 19:16:22 -07:00
parent c1e5a4aaae
commit 2007a21557
+55 -4
View File
@@ -2712,12 +2712,14 @@ fn sent(
/// held. See `context/test-evidence/clients.md`.
#[test]
fn keys_sent_before_a_scroll_is_answered_agree_with_the_tui() {
let cases: [Pipelined; 5] = [
let cases: [Pipelined; 7] = [
("wrap", (2, 6), ((2, 0), 1, 0), &["i", "Enter", "8", "Enter"]),
("horizontal wrap", (2, 1), ((2, 0), 1, 0), &["i", "Enter", "8", "Enter"]),
("G", (2, 6), ((0, 0), 0, 0), &["G", "i", "7", "Enter"]),
("$", (2, 1), ((0, 0), 0, 0), &["$", "i", "7", "Enter"]),
("gg", (2, 6), ((2, 0), 1, 0), &["g", "g", "i", "7", "Enter"]),
("$ x", (2, 1), ((0, 0), 0, 0), &["$", "x"]),
("gg p", (2, 6), ((2, 0), 1, 0), &["y", "y", "g", "g", "p"]),
];
for (name, window, (at, row_offset, col_offset), keys) in cases {
let mut tui = wrapping_host();
@@ -2764,13 +2766,15 @@ fn keys_sent_before_a_scroll_is_answered_agree_with_the_tui() {
"{what}: a write was composed before its target was projected"
);
assert!(
client.view.mode.is_editing() && !client.view.status_msg.is_empty(),
"{what}: Enter must wait out loud with the editor open: {:?}, {:?}",
client.view.mode.is_editing() == keys.contains(&"i")
&& !client.view.status_msg.is_empty(),
"{what}: the last key must wait out loud, any editor open: {:?}, {:?}",
client.view.mode,
client.view.status_msg
);
deliver(replies, session, &mut client);
let reply = sent(&mut host, session, &mut client, "Enter");
let retry = keys.last().expect("a key");
let reply = sent(&mut host, session, &mut client, retry);
deliver(reply, session, &mut client);
}
assert_eq!(
@@ -2800,3 +2804,50 @@ fn keys_sent_before_a_scroll_is_answered_agree_with_the_tui() {
}
}
}
/// improvise-7mro: a cell inside the held window whose offsets the client has
/// moved is read at its own position. See `context/test-evidence/clients.md`.
#[test]
fn a_held_cell_is_read_at_its_position_and_not_its_cache_index() {
let keys = ["k", "k", "j", "i"];
let mut tui = wrapping_host();
tui.cursor_mut().selected = (2, 0);
for k in keys {
reduce_key(&mut tui, BrowserKey::new(k).to_key_event().unwrap());
}
assert_eq!(tui.view_state.cursor().selected, (1, 0), "setup: on Profit/Jan");
let mut host = improvise_command::ui::host::Host::new(wrapping_host());
let (session, welcome) = host.connect(2, 6);
let mut client = ClientState {
window: (2, 6),
..ClientState::default()
};
deliver(vec![welcome], session, &mut client);
let placed = vec![
improvise_protocol::Command::SetSelected { row: 2, col: 0 },
improvise_protocol::Command::SetRowOffset(1),
];
client.fold_outgoing(&placed);
deliver(
host.handle(session, ClientFrame::Commands(placed)),
session,
&mut client,
);
for k in keys {
let _held = sent(&mut host, session, &mut client, k);
}
let cursor = client.view.cursor();
assert_eq!(
(cursor.selected, cursor.row_offset, client.grid.row_frame.first),
((1, 0), 0, 1),
"setup: inside the held window, offsets ahead of it"
);
assert_eq!(
format!("{:?}", client.view.mode),
format!("{:?}", tui.view_state.mode),
"the client read another row's cell: {:?}",
client.view.buffers.get("edit")
);
assert_eq!(client.view.status_msg, tui.view_state.status_msg);
}