chore: audit components

This commit is contained in:
2026-11-10 15:06:16 +07:00
parent af2177c6c8
commit 03369f501e
92 changed files with 2744 additions and 1947 deletions
+33 -12
View File
@@ -2,7 +2,7 @@ use std::cell::RefCell;
use std::rc::Rc;
use gpui::{
AppContext as _, Context, Entity, IntoElement, MouseButton, MouseDownEvent, MouseUpEvent,
App, AppContext as _, Context, Entity, IntoElement, MouseButton, MouseDownEvent, MouseUpEvent,
ParentElement as _, Render, Styled as _, TestAppContext, VisualTestContext, Window, div, point,
px,
};
@@ -363,6 +363,19 @@ fn view_window(source: &str) -> (TestAppContext, VisualTestContext, Entity<Markd
(cx, visual, state)
}
/// The stable id string of the block at `block_index`. Leaks so the id can
/// feed `debug_bounds`, which requires `&'static str`.
fn block_id(state: &Entity<MarkdownViewState>, cx: &App, block_index: usize) -> &'static str {
Box::<str>::leak(
state
.read(cx)
.block_id(block_index)
.expect("the block has an id")
.to_string()
.into_boxed_str(),
)
}
#[test]
fn blocks_render_virtualized_and_scroll_to_a_block() {
let mut source = String::new();
@@ -371,12 +384,16 @@ fn blocks_render_virtualized_and_scroll_to_a_block() {
}
let (_cx, mut visual, state) = view_window(&source);
let first_id = _cx.update(|cx| block_id(&state, cx, 0));
let target_id = _cx.update(|cx| block_id(&state, cx, 150));
let last_id = _cx.update(|cx| block_id(&state, cx, 199));
assert!(
visual.debug_bounds("test-md-block-0").is_some(),
visual.debug_bounds(first_id).is_some(),
"the first block renders"
);
assert!(
visual.debug_bounds("test-md-block-150").is_none(),
visual.debug_bounds(target_id).is_none(),
"blocks past the viewport never render"
);
@@ -388,25 +405,26 @@ fn blocks_render_virtualized_and_scroll_to_a_block() {
});
assert!(
visual.debug_bounds("test-md-block-150").is_some(),
visual.debug_bounds(target_id).is_some(),
"scrolling brings the target block in"
);
assert!(
visual.debug_bounds("test-md-block-0").is_none(),
visual.debug_bounds(first_id).is_none(),
"the first block scrolled out"
);
assert!(
visual.debug_bounds("test-md-block-199").is_none(),
visual.debug_bounds(last_id).is_none(),
"blocks past the target stay unrendered"
);
}
#[test]
fn clicking_a_link_opens_its_destination() {
let (_cx, mut visual, _state) = view_window("[click me](https://example.com/welcome)");
let (_cx, mut visual, state) = view_window("[click me](https://example.com/welcome)");
let first_id = _cx.update(|cx| block_id(&state, cx, 0));
let block = visual
.debug_bounds("test-md-block-0")
.debug_bounds(first_id)
.expect("the paragraph renders");
visual.simulate_event(MouseDownEvent {
@@ -461,21 +479,24 @@ fn a_large_document_swaps_and_renders_without_freezing() {
window.draw(cx).clear(cx);
});
let elapsed = started.elapsed();
let elapsed = std::hint::black_box(started.elapsed());
assert!(
elapsed < std::time::Duration::from_secs(15),
elapsed < std::time::Duration::from_secs(30),
"swapping to a large document took {elapsed:?}; the frame must not
measure every block"
);
let count = _cx.update(|cx| state.read(cx).blocks().len());
assert_eq!(count, 5000, "five blocks per section");
let first_id = _cx.update(|cx| block_id(&state, cx, 0));
let last_id = _cx.update(|cx| block_id(&state, cx, 4999));
assert!(
visual.debug_bounds("test-md-block-0").is_some(),
visual.debug_bounds(first_id).is_some(),
"the first block renders after the swap"
);
assert!(
visual.debug_bounds("test-md-block-4999").is_none(),
visual.debug_bounds(last_id).is_none(),
"blocks past the viewport never render"
);
}