66 lines
2.7 KiB
Rust
66 lines
2.7 KiB
Rust
//! Whole-column reordering driven through real egui pointer events.
|
|
|
|
use egui::{Event, Modifiers, PointerButton, Pos2, pos2, vec2};
|
|
use gridcraft_engine::{Session, core::CellRef};
|
|
use gridcraft_ui_egui::{SheetApp, grid::Geo};
|
|
use serde_json::json;
|
|
|
|
fn harness() -> egui_kittest::Harness<'static, SheetApp> {
|
|
let mut session = Session::new();
|
|
session.new_workbook();
|
|
session.execute("range.setValues", json!({"range": "A1", "values": [["A", "B", "C", "D", "E"]]})).unwrap();
|
|
session.execute("selection.set", json!({"range": "B:C"})).unwrap();
|
|
let mut harness = egui_kittest::Harness::builder().with_step_dt(1.0 / 60.0).with_size(vec2(1200.0, 800.0)).build_ui_state(
|
|
|ui, app: &mut SheetApp| {
|
|
app.logic(ui.ctx());
|
|
app.ui(ui);
|
|
},
|
|
SheetApp::new(session, Default::default()),
|
|
);
|
|
harness.run_steps(4);
|
|
harness.state_mut().session.active_mut().unwrap().undo.clear();
|
|
harness.state_mut().session.journal.clear();
|
|
harness
|
|
}
|
|
|
|
fn header_center(harness: &egui_kittest::Harness<'_, SheetApp>, col: u32) -> Pos2 {
|
|
let app = harness.state();
|
|
let sheet = app.session.active().unwrap().wb.active().unwrap();
|
|
let geo = Geo::new(sheet, app.grid.rect.unwrap(), app.view().scroll);
|
|
pos2(geo.x(sheet, col) + sheet.col_width(col) * geo.z * 0.5, geo.rect.top() + geo.header_h * 0.5)
|
|
}
|
|
|
|
fn pointer_button(harness: &mut egui_kittest::Harness<'_, SheetApp>, pos: Pos2, pressed: bool) {
|
|
harness
|
|
.input_mut()
|
|
.events
|
|
.extend([Event::PointerMoved(pos), Event::PointerButton { pos, button: PointerButton::Primary, pressed, modifiers: Modifiers::NONE }]);
|
|
harness.step();
|
|
}
|
|
|
|
#[test]
|
|
fn dragging_selected_column_headers_reorders_the_block() {
|
|
let mut harness = harness();
|
|
let start = header_center(&harness, 1);
|
|
let target = {
|
|
let center = header_center(&harness, 4);
|
|
pos2(center.x - 20.0, center.y)
|
|
};
|
|
|
|
pointer_button(&mut harness, start, true);
|
|
harness.input_mut().events.push(Event::PointerMoved(target));
|
|
harness.step();
|
|
harness.input_mut().events.push(Event::PointerMoved(target + vec2(1.0, 0.0)));
|
|
harness.step();
|
|
pointer_button(&mut harness, target + vec2(1.0, 0.0), false);
|
|
harness.run_steps(2);
|
|
|
|
let app = harness.state();
|
|
let sheet = app.session.active().unwrap().wb.active().unwrap();
|
|
let values: Vec<_> = (0..5).map(|col| sheet.value(CellRef::new(0, col))).collect();
|
|
assert_eq!(values, vec!["A".into(), "D".into(), "B".into(), "C".into(), "E".into()]);
|
|
assert_eq!(app.session.active().unwrap().selection.current().a1(), "C:D");
|
|
assert_eq!(app.session.journal.iter().filter(|(id, _)| id == "sheet.moveColumns").count(), 1);
|
|
assert_eq!(app.session.active().unwrap().undo.len(), 1);
|
|
}
|