Add layer tree tests for layer arrangement (#2578)

* layer arrangement testing

* changes
This commit is contained in:
Rahat 2025-04-17 03:35:03 +05:30 committed by GitHub
parent bcab75f3c5
commit c4484cb6cd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -2785,4 +2785,51 @@ mod document_message_handler_tests {
assert!(!selected_nodes.selected_layers_contains(layers[1], document.metadata()));
assert!(selected_nodes.selected_layers_contains(layers[2], document.metadata()));
}
#[tokio::test]
async fn test_layer_rearrangement() {
let mut editor = EditorTestUtils::create();
editor.new_document().await;
// Create three rectangle layers
editor.drag_tool(ToolType::Rectangle, 0., 0., 100., 100., ModifierKeys::empty()).await;
editor.drag_tool(ToolType::Rectangle, 50., 50., 150., 150., ModifierKeys::empty()).await;
editor.drag_tool(ToolType::Rectangle, 100., 100., 200., 200., ModifierKeys::empty()).await;
// Helper function to identify layers by bounds
async fn get_layer_by_bounds(editor: &mut EditorTestUtils, min_x: f64, min_y: f64) -> Option<LayerNodeIdentifier> {
let document = editor.active_document();
for layer in document.metadata().all_layers() {
if let Some(bbox) = document.metadata().bounding_box_viewport(layer) {
if (bbox[0].x - min_x).abs() < 1.0 && (bbox[0].y - min_y).abs() < 1.0 {
return Some(layer);
}
}
}
None
}
async fn get_layer_index(editor: &mut EditorTestUtils, layer: LayerNodeIdentifier) -> Option<usize> {
let document = editor.active_document();
let parent = layer.parent(document.metadata())?;
parent.children(document.metadata()).position(|child| child == layer)
}
let layer_bottom = get_layer_by_bounds(&mut editor, 0.0, 0.0).await.unwrap();
let layer_middle = get_layer_by_bounds(&mut editor, 50.0, 50.0).await.unwrap();
let layer_top = get_layer_by_bounds(&mut editor, 100.0, 100.0).await.unwrap();
let initial_index_top = get_layer_index(&mut editor, layer_top).await.unwrap();
let initial_index_middle = get_layer_index(&mut editor, layer_middle).await.unwrap();
// Test 1: Lower the top layer
editor.handle_message(NodeGraphMessage::SelectedNodesSet { nodes: vec![layer_top.to_node()] }).await;
editor.handle_message(DocumentMessage::SelectedLayersLower).await;
let new_index_top = get_layer_index(&mut editor, layer_top).await.unwrap();
assert!(new_index_top > initial_index_top, "Top layer should have moved down");
// Test 2: Raise the middle layer
editor.handle_message(NodeGraphMessage::SelectedNodesSet { nodes: vec![layer_middle.to_node()] }).await;
editor.handle_message(DocumentMessage::SelectedLayersRaise).await;
let new_index_middle = get_layer_index(&mut editor, layer_middle).await.unwrap();
assert!(new_index_middle < initial_index_middle, "Middle layer should have moved up");
}
}