@@ -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