fix(ci): isolate deep layer fixture stack
This commit is contained in:
parent
6655b029fb
commit
43bb594065
|
|
@ -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);
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
});
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue