@@ -2785,4 +2785,51 @@ mod document_message_handler_tests {
2785
2785
assert ! ( !selected_nodes. selected_layers_contains( layers[ 1 ] , document. metadata( ) ) ) ;
2786
2786
assert ! ( selected_nodes. selected_layers_contains( layers[ 2 ] , document. metadata( ) ) ) ;
2787
2787
}
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
+ }
2788
2835
}
0 commit comments