Sheet scroll checks run on a real sheet with its geometry (R2.16)

This commit is contained in:
ZacharyZhang-NY committed 2026-10-09 02:39:47 -04:00
1 parent 05c3eab2f8
commit 1cf81dcb44
3 files changed
+46 -41

No files matched your search

-41
View File
@@ -359,47 +359,6 @@ fn a_moved_cursor_scrolls_into_view_and_a_still_one_does_not() {
view.scroll_by(0.0, 1_000_000.0, cx);
view.apply_batch(batch(), None, cx);
assert_eq!(view.scroll.1, 0, "a still cursor leaves the scroll alone");
// Only a sheet grows past the kernel's size.
view.sheet = Some(crate::sheet::Geometry::default());
let far = view.doc_size.1 + 20_000;
let cell = crate::Cell {
cursor: Some((1418, far, 1280, 277)),
..crate::Cell::default()
};
view.apply_batch(
crate::Events {
cell,
..crate::Events::default()
},
None,
cx,
);
let height = view.geom.twips_of(view.viewport.1);
assert!(
view.scroll.1 <= far && far + 277 <= view.scroll.1 + height,
"a cell past the kernel's size still comes into view"
);
view.scroll = (0, 0);
let width = view.geom.twips_of(view.viewport.0);
view.show((width - 200, 0, 1280, 256), cx);
assert!(
view.scroll.0 > 0 && width - 200 + 1280 <= view.scroll.0 + width,
"a cell cut at the right edge comes into view"
);
view.scroll = (0, 0);
view.frozen = (0, 600);
view.show((1418, 300, 1280, 277), cx);
assert_eq!(view.scroll.1, 0, "a frozen row needs no scroll");
view.show((1418, 9000, 1280, 277), cx);
let scrolled = view.scroll.1;
assert!(scrolled > 0, "a far row scrolls the rest");
let row = view.place((0, 300)).y;
assert_eq!(f32::from(row), view.geom.px_of(300), "the frozen row stays");
let far = view.twips_at(view.place((0, 9000)));
assert!(
(far.1 - 9000).abs() <= 15,
"a scrolled row maps back: {far:?}"
);
});
});
}
+41
View File
@@ -174,3 +174,44 @@ fn zooming_far_down_a_sheet_keeps_the_rows_in_view() {
let after = middle(&mut cx);
assert!(before.abs_diff(after) <= 1, "row {before} became {after}");
}
#[test]
fn a_sheet_brings_far_cut_and_frozen_cells_into_view() {
let Some(install) = crate::client::tests::install() else {
eprintln!("SKIP: no pinned LOK build");
return;
};
let cx = gpui::TestAppContext::single();
cx.update(|app| {
let (view, worker) = live_view_of(app, &install, "short.fods", SHORT_ROWS);
let json = worker.lock().expect("the worker lock").values(&view.read(app).doc, crate::sheet::GEOMETRY).expect("geometry");
view.update(app, |view, cx| {
view.set_geometry(crate::sheet::geometry(&json).expect("parsed"), cx);
view.viewport = (800.0, 200.0);
let (width, height) = (view.geom.twips_of(view.viewport.0), view.geom.twips_of(view.viewport.1));
let shows = |view: &LokView, rect: crate::Rect| {
let (x, y, w, h) = view.tile_rect(rect);
let (fx, fy) = view.frozen_tiles();
x + w <= fx + view.scroll.0 + width && y >= fy + view.scroll.1 && y + h <= fy + view.scroll.1 + height
};
let far = (1418, view.doc_size.1 + 20_000, 1280, 277);
let cell = crate::Cell { cursor: Some(far), ..crate::Cell::default() };
view.apply_batch(crate::Events { cell, ..crate::Events::default() }, None, cx);
assert!(shows(view, far), "a cell past the kernel's size still comes into view");
view.scroll = (0, 0);
let cut = (width - 200, 0, 1280, 256);
view.show(cut, cx);
assert!(view.scroll.0 > 0 && shows(view, cut), "a cell cut at the right edge comes into view");
view.scroll = (0, 0);
view.set_frozen((0, 600), cx);
let frozen = view.place((0, 300)).y;
view.show((1418, 300, 1280, 277), cx);
assert_eq!(view.scroll.1, 0, "a frozen row needs no scroll");
view.show((1418, 9000, 1280, 277), cx);
assert!(view.scroll.1 > 0, "a far row scrolls the rest");
assert_eq!(view.place((0, 300)).y, frozen, "the frozen row stays");
let back = view.twips_at(view.place((0, 9000)));
assert!((back.1 - 9000).abs() <= 15, "a scrolled row maps back: {back:?}");
});
});
}
+5
View File
@@ -0,0 +1,5 @@
FAIL
crates/ely-lok/src/view/scroll.rs:53 — 新增 `self.sheet.is_some()` 条件后,现有滚动回归测试失败:`view/tests.rs:349` 用 Writer 视图作夹具,随后模拟表格光标越过内核尺寸,缺少工作表 geometry,滚动范围因此保持原尺寸,`:376` 的可见性断言失败。独立运行 `cargo test --offline -p ely-lok --features view --lib view::tests::a_moved_cursor_scrolls_into_view_and_a_still_one_does_not -- --exact --nocapture` 稳定退出 101;当前视图测试为 31 通过、1 失败。修复方向:将该测试的表格部分改用真实工作表并初始化 geometry,保留超出内核尺寸的光标可见性断言及 Writer 滚动断言。证据:`/tmp/r216-r2-view-current.log`、`/tmp/r216-r2-scroll-rerun.log`。
crates/ely-lok/src/view/scroll.rs:52 — 新增注释 `Only a sheet grows where it jumps; pages keep their size.` 共 11 个英文单词,超过 agents.md 的十词限制。运行 `python3 tests/scripts/comments.py` 退出 1,并定位此行。修复方向:将该注释缩短至十词以内。证据:`/tmp/r216-r2-comments-final.log`。