WIP improvise-6p8q: records yank/paste lockstep
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:
@@ -1233,6 +1233,62 @@ fn page_selections(app: &App) -> Vec<(String, Option<String>)> {
|
||||
.collect()
|
||||
}
|
||||
|
||||
/// improvise-6p8q: the TUI yanked and pasted through the synthetic records key.
|
||||
/// See `context/test-evidence/command.md`.
|
||||
#[test]
|
||||
fn yy_then_p_in_records_mode_writes_the_record_the_host_writes() {
|
||||
let r = KeyEvent::new(KeyCode::Char('R'), KeyModifiers::NONE);
|
||||
let two_records = || {
|
||||
let mut app = furnished_host();
|
||||
let south = north_revenue().with("Region", "South");
|
||||
app.model_state
|
||||
.workbook
|
||||
.model
|
||||
.set_cell(south, improvise_protocol::CellValue::Number(900.0));
|
||||
app.rebuild_layout();
|
||||
reduce_key(&mut app, r);
|
||||
app
|
||||
};
|
||||
let (mut app, mut twin) = (two_records(), two_records());
|
||||
let revenue = (0..app.layout.col_count())
|
||||
.find(|&c| app.layout.col_label(c) == "Revenue")
|
||||
.expect("a Revenue column");
|
||||
let south = 1;
|
||||
assert_eq!(
|
||||
app.layout.record_row(south).unwrap().coords.get("Region"),
|
||||
Some("South")
|
||||
);
|
||||
for host in [&mut app, &mut twin] {
|
||||
host.cursor_mut().selected = (0, revenue);
|
||||
}
|
||||
let mut client = records_client(&app);
|
||||
|
||||
both_ends(&mut app, &mut twin, &mut client, "y");
|
||||
both_ends(&mut app, &mut twin, &mut client, "y");
|
||||
assert_eq!(
|
||||
(client.view.yanked.clone(), app.view_state.yanked.clone()),
|
||||
(
|
||||
Some(improvise_protocol::CellValue::Number(1200.0)),
|
||||
Some(improvise_protocol::CellValue::Number(1200.0))
|
||||
),
|
||||
"both ends yank North's stored Revenue"
|
||||
);
|
||||
|
||||
for host in [&mut app, &mut twin] {
|
||||
host.cursor_mut().selected = (south, revenue);
|
||||
}
|
||||
client.view.cursor_mut().selected = (south, revenue);
|
||||
both_ends(&mut app, &mut twin, &mut client, "p");
|
||||
assert_eq!(
|
||||
app.model_state
|
||||
.workbook
|
||||
.model
|
||||
.get_cell(&north_revenue().with("Region", "South")),
|
||||
Some(&improvise_protocol::CellValue::Number(1200.0)),
|
||||
"the paste must land on South's real record"
|
||||
);
|
||||
}
|
||||
|
||||
/// Both hosts driven into records mode the way a user gets there, so the
|
||||
/// `_Records` view and its `_Index`/`_Dim` axes are the real ones.
|
||||
fn records_pair() -> (App, App) {
|
||||
|
||||
Reference in New Issue
Block a user