fix(ci): isolate deep layer fixture stack

This commit is contained in:
Kayshen-X 2026-06-06 14:16:13 +08:00
parent 6655b029fb
commit 43bb594065
2 changed files with 75 additions and 47 deletions

View file

@ -470,38 +470,53 @@ fn nested_frame_doc(depth: usize) -> String {
src
}
fn run_deep_layer_fixture(test: impl FnOnce() + Send + 'static) {
let handle = std::thread::Builder::new()
.name("op-layer-panel-deep-fixture".into())
.stack_size(64 * 1024 * 1024)
.spawn(test)
.expect("spawn deep layer fixture test");
if let Err(payload) = handle.join() {
std::panic::resume_unwind(payload);
}
}
#[test]
fn deep_layer_tree_exposes_horizontal_scroll_range() {
let state = state_from(&nested_frame_doc(50));
let panel = LayerPanel::from_editor(&state);
let rect = Rect {
origin: Point2D::new(0.0, 0.0),
size: Point2D::new(LAYER_PANEL_WIDTH, 700.0),
};
run_deep_layer_fixture(|| {
let state = state_from(&nested_frame_doc(50));
let panel = LayerPanel::from_editor(&state);
let rect = Rect {
origin: Point2D::new(0.0, 0.0),
size: Point2D::new(LAYER_PANEL_WIDTH, 700.0),
};
let regions = panel.regions(rect);
let regions = panel.regions(rect);
assert!(
regions.layers_content_w > rect.size.x,
"deep layer content should be wider than the fixed panel viewport"
);
assert!(
regions.layers_max_h_scroll > 0.0,
"deep layer rows need a horizontal scroll range"
);
assert!(
regions.layers_content_w > rect.size.x,
"deep layer content should be wider than the fixed panel viewport"
);
assert!(
regions.layers_max_h_scroll > 0.0,
"deep layer rows need a horizontal scroll range"
);
});
}
#[test]
fn layer_horizontal_scroll_offset_is_clamped() {
let mut state = state_from(&nested_frame_doc(50));
state.editor_ui.layer_layers_h_scroll = 10_000.0;
let panel = LayerPanel::from_editor(&state);
let rect = Rect {
origin: Point2D::new(0.0, 0.0),
size: Point2D::new(LAYER_PANEL_WIDTH, 700.0),
};
run_deep_layer_fixture(|| {
let mut state = state_from(&nested_frame_doc(50));
state.editor_ui.layer_layers_h_scroll = 10_000.0;
let panel = LayerPanel::from_editor(&state);
let rect = Rect {
origin: Point2D::new(0.0, 0.0),
size: Point2D::new(LAYER_PANEL_WIDTH, 700.0),
};
let regions = panel.regions(rect);
let regions = panel.regions(rect);
assert_eq!(regions.layers_h_scroll, regions.layers_max_h_scroll);
assert_eq!(regions.layers_h_scroll, regions.layers_max_h_scroll);
});
}

View file

@ -22,31 +22,44 @@ fn seed(host: &mut WidgetHostNative, json: &str) {
host.mark_paint_dirty_for_test();
}
fn run_deep_layer_fixture(test: impl FnOnce() + Send + 'static) {
let handle = std::thread::Builder::new()
.name("op-host-native-deep-layer-fixture".into())
.stack_size(64 * 1024 * 1024)
.spawn(test)
.expect("spawn deep layer fixture test");
if let Err(payload) = handle.join() {
std::panic::resume_unwind(payload);
}
}
#[test]
fn layer_panel_trackpad_pan_scrolls_horizontally() {
let mut host = WidgetHostNative::new();
seed(&mut host, &nested_frame_doc(50));
let viewport_w = 1200.0;
let viewport_h = 800.0;
let panel = op_editor_ui::widgets::LayerPanel::from_editor(host.editor_state());
let rect = op_editor_ui::Rect {
origin: op_editor_ui::Point2D::new(0.0, op_editor_ui::widgets::TOP_BAR_HEIGHT),
size: op_editor_ui::Point2D::new(
host.editor_state().editor_ui.layer_panel_width,
viewport_h - op_editor_ui::widgets::TOP_BAR_HEIGHT,
),
};
let regions = panel.regions(rect);
assert!(regions.layers_max_h_scroll > 0.0);
run_deep_layer_fixture(|| {
let mut host = WidgetHostNative::new();
seed(&mut host, &nested_frame_doc(50));
let viewport_w = 1200.0;
let viewport_h = 800.0;
let panel = op_editor_ui::widgets::LayerPanel::from_editor(host.editor_state());
let rect = op_editor_ui::Rect {
origin: op_editor_ui::Point2D::new(0.0, op_editor_ui::widgets::TOP_BAR_HEIGHT),
size: op_editor_ui::Point2D::new(
host.editor_state().editor_ui.layer_panel_width,
viewport_h - op_editor_ui::widgets::TOP_BAR_HEIGHT,
),
};
let regions = panel.regions(rect);
assert!(regions.layers_max_h_scroll > 0.0);
assert!(host.apply_pan_gesture(
80.0,
regions.layers_rows_top + 12.0,
-180.0,
0.0,
viewport_w,
viewport_h
));
assert!(host.apply_pan_gesture(
80.0,
regions.layers_rows_top + 12.0,
-180.0,
0.0,
viewport_w,
viewport_h
));
assert!(host.editor_state().editor_ui.layer_layers_h_scroll > 0.0);
assert!(host.editor_state().editor_ui.layer_layers_h_scroll > 0.0);
});
}