Skip to content

Commit c4484cb

Browse files
authored
Add layer tree tests for layer arrangement (#2578)
* layer arrangement testing * changes
1 parent bcab75f commit c4484cb

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

editor/src/messages/portfolio/document/document_message_handler.rs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2785,4 +2785,51 @@ mod document_message_handler_tests {
27852785
assert!(!selected_nodes.selected_layers_contains(layers[1], document.metadata()));
27862786
assert!(selected_nodes.selected_layers_contains(layers[2], document.metadata()));
27872787
}
2788+
#[tokio::test]
2789+
async fn test_layer_rearrangement() {
2790+
let mut editor = EditorTestUtils::create();
2791+
editor.new_document().await;
2792+
// Create three rectangle layers
2793+
editor.drag_tool(ToolType::Rectangle, 0., 0., 100., 100., ModifierKeys::empty()).await;
2794+
editor.drag_tool(ToolType::Rectangle, 50., 50., 150., 150., ModifierKeys::empty()).await;
2795+
editor.drag_tool(ToolType::Rectangle, 100., 100., 200., 200., ModifierKeys::empty()).await;
2796+
2797+
// Helper function to identify layers by bounds
2798+
async fn get_layer_by_bounds(editor: &mut EditorTestUtils, min_x: f64, min_y: f64) -> Option<LayerNodeIdentifier> {
2799+
let document = editor.active_document();
2800+
for layer in document.metadata().all_layers() {
2801+
if let Some(bbox) = document.metadata().bounding_box_viewport(layer) {
2802+
if (bbox[0].x - min_x).abs() < 1.0 && (bbox[0].y - min_y).abs() < 1.0 {
2803+
return Some(layer);
2804+
}
2805+
}
2806+
}
2807+
None
2808+
}
2809+
2810+
async fn get_layer_index(editor: &mut EditorTestUtils, layer: LayerNodeIdentifier) -> Option<usize> {
2811+
let document = editor.active_document();
2812+
let parent = layer.parent(document.metadata())?;
2813+
parent.children(document.metadata()).position(|child| child == layer)
2814+
}
2815+
2816+
let layer_bottom = get_layer_by_bounds(&mut editor, 0.0, 0.0).await.unwrap();
2817+
let layer_middle = get_layer_by_bounds(&mut editor, 50.0, 50.0).await.unwrap();
2818+
let layer_top = get_layer_by_bounds(&mut editor, 100.0, 100.0).await.unwrap();
2819+
2820+
let initial_index_top = get_layer_index(&mut editor, layer_top).await.unwrap();
2821+
let initial_index_middle = get_layer_index(&mut editor, layer_middle).await.unwrap();
2822+
2823+
// Test 1: Lower the top layer
2824+
editor.handle_message(NodeGraphMessage::SelectedNodesSet { nodes: vec![layer_top.to_node()] }).await;
2825+
editor.handle_message(DocumentMessage::SelectedLayersLower).await;
2826+
let new_index_top = get_layer_index(&mut editor, layer_top).await.unwrap();
2827+
assert!(new_index_top > initial_index_top, "Top layer should have moved down");
2828+
2829+
// Test 2: Raise the middle layer
2830+
editor.handle_message(NodeGraphMessage::SelectedNodesSet { nodes: vec![layer_middle.to_node()] }).await;
2831+
editor.handle_message(DocumentMessage::SelectedLayersRaise).await;
2832+
let new_index_middle = get_layer_index(&mut editor, layer_middle).await.unwrap();
2833+
assert!(new_index_middle < initial_index_middle, "Middle layer should have moved up");
2834+
}
27882835
}

0 commit comments

Comments
 (0)