Skip to content

Commit 272a5ce

Browse files
authored
Add GRS tests for different types of nested layer multi-selections (#2518)
* cli failing * cli failing * test_transform_with_different_selections and groups * merge conflict * Use abs_diff_eq in assertions * Added test 4 * Added test 4 * removed unnecessary changes
1 parent 3e6021f commit 272a5ce

File tree

1 file changed

+110
-0
lines changed

1 file changed

+110
-0
lines changed

editor/src/messages/tool/transform_layer/transform_layer_message_handler.rs

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -713,6 +713,7 @@ impl MessageHandler<TransformLayerMessage, TransformData<'_>> for TransformLayer
713713

714714
#[cfg(test)]
715715
mod test_transform_layer {
716+
use crate::messages::portfolio::document::utility_types::misc::GroupFolderType;
716717
use crate::messages::{
717718
portfolio::document::graph_operation::{
718719
transform_utils,
@@ -1150,4 +1151,113 @@ mod test_transform_layer {
11501151
assert!(new_scale_x > 0.0, "After rescaling, scale factor X should be non-zero");
11511152
assert!(new_scale_y > 0.0, "After rescaling, scale factor Y should be non-zero");
11521153
}
1154+
1155+
#[tokio::test]
1156+
async fn test_transform_with_different_selections() {
1157+
let mut editor = EditorTestUtils::create();
1158+
editor.new_document().await;
1159+
editor.draw_rect(0., 0., 100., 100.).await;
1160+
editor.draw_rect(150., 0., 250., 100.).await;
1161+
editor.draw_rect(0., 150., 100., 250.).await;
1162+
editor.draw_rect(150., 150., 250., 250.).await;
1163+
let document = editor.active_document();
1164+
let layers: Vec<LayerNodeIdentifier> = document.metadata().all_layers().collect();
1165+
1166+
assert!(layers.len() == 4);
1167+
1168+
// Creating a group with two rectangles
1169+
editor
1170+
.handle_message(NodeGraphMessage::SelectedNodesSet {
1171+
nodes: vec![layers[2].to_node(), layers[3].to_node()],
1172+
})
1173+
.await;
1174+
editor
1175+
.handle_message(DocumentMessage::GroupSelectedLayers {
1176+
group_folder_type: GroupFolderType::Layer,
1177+
})
1178+
.await;
1179+
1180+
// Get the group layer (should be the newest layer)
1181+
let document = editor.active_document();
1182+
let group_layer = document.metadata().all_layers().next().unwrap();
1183+
1184+
// Test 1: Transform single layer
1185+
editor.handle_message(NodeGraphMessage::SelectedNodesSet { nodes: vec![layers[0].to_node()] }).await;
1186+
let original_transform = get_layer_transform(&mut editor, layers[0]).await.unwrap();
1187+
editor.handle_message(TransformLayerMessage::BeginGrab).await;
1188+
editor.move_mouse(50.0, 50.0, ModifierKeys::empty(), MouseKeys::NONE).await;
1189+
editor
1190+
.handle_message(TransformLayerMessage::PointerMove {
1191+
slow_key: Key::Shift,
1192+
increments_key: Key::Control,
1193+
})
1194+
.await;
1195+
editor.handle_message(TransformLayerMessage::ApplyTransformOperation { final_transform: true }).await;
1196+
let final_transform = get_layer_transform(&mut editor, layers[0]).await.unwrap();
1197+
assert!(!final_transform.abs_diff_eq(original_transform, 1e-5), "Transform should change for single layer");
1198+
1199+
// Test 2: Transform multiple layers
1200+
editor
1201+
.handle_message(NodeGraphMessage::SelectedNodesSet {
1202+
nodes: vec![layers[0].to_node(), layers[1].to_node()],
1203+
})
1204+
.await;
1205+
let original_transform_1 = get_layer_transform(&mut editor, layers[0]).await.unwrap();
1206+
let original_transform_2 = get_layer_transform(&mut editor, layers[1]).await.unwrap();
1207+
editor.handle_message(TransformLayerMessage::BeginRotate).await;
1208+
editor.move_mouse(200.0, 50.0, ModifierKeys::empty(), MouseKeys::NONE).await;
1209+
editor
1210+
.handle_message(TransformLayerMessage::PointerMove {
1211+
slow_key: Key::Shift,
1212+
increments_key: Key::Control,
1213+
})
1214+
.await;
1215+
editor.handle_message(TransformLayerMessage::ApplyTransformOperation { final_transform: true }).await;
1216+
let final_transform_1 = get_layer_transform(&mut editor, layers[0]).await.unwrap();
1217+
let final_transform_2 = get_layer_transform(&mut editor, layers[1]).await.unwrap();
1218+
assert!(!final_transform_1.abs_diff_eq(original_transform_1, 1e-5), "Transform should change for first layer in multi-selection");
1219+
assert!(
1220+
!final_transform_2.abs_diff_eq(original_transform_2, 1e-5),
1221+
"Transform should change for second layer in multi-selection"
1222+
);
1223+
1224+
// Test 3: Transform group
1225+
editor.handle_message(NodeGraphMessage::SelectedNodesSet { nodes: vec![group_layer.to_node()] }).await;
1226+
let original_group_transform = get_layer_transform(&mut editor, group_layer).await.unwrap();
1227+
editor.handle_message(TransformLayerMessage::BeginScale).await;
1228+
editor.handle_message(TransformLayerMessage::TypeDigit { digit: 2 }).await;
1229+
editor.handle_message(TransformLayerMessage::ApplyTransformOperation { final_transform: true }).await;
1230+
let final_group_transform = get_layer_transform(&mut editor, group_layer).await.unwrap();
1231+
assert!(!final_group_transform.abs_diff_eq(original_group_transform, 1e-5), "Transform should change for group");
1232+
1233+
// Test 4: Transform layers inside transformed group
1234+
let child_layer_id = {
1235+
let mut document = editor.active_document_mut();
1236+
let group_children = document.network_interface.downstream_layers(&group_layer.to_node(), &[]);
1237+
if !group_children.is_empty() {
1238+
Some(LayerNodeIdentifier::new(group_children[0], &document.network_interface, &[]))
1239+
} else {
1240+
None
1241+
}
1242+
};
1243+
assert!(child_layer_id.is_some(), "Group should have child layers");
1244+
let child_layer_id = child_layer_id.unwrap();
1245+
editor
1246+
.handle_message(NodeGraphMessage::SelectedNodesSet {
1247+
nodes: vec![child_layer_id.to_node()],
1248+
})
1249+
.await;
1250+
let original_child_transform = get_layer_transform(&mut editor, child_layer_id).await.unwrap();
1251+
editor.handle_message(TransformLayerMessage::BeginGrab).await;
1252+
editor.move_mouse(30.0, 30.0, ModifierKeys::empty(), MouseKeys::NONE).await;
1253+
editor
1254+
.handle_message(TransformLayerMessage::PointerMove {
1255+
slow_key: Key::Shift,
1256+
increments_key: Key::Control,
1257+
})
1258+
.await;
1259+
editor.handle_message(TransformLayerMessage::ApplyTransformOperation { final_transform: true }).await;
1260+
let final_child_transform = get_layer_transform(&mut editor, child_layer_id).await.unwrap();
1261+
assert!(!final_child_transform.abs_diff_eq(original_child_transform, 1e-5), "Child layer inside transformed group should change");
1262+
}
11531263
}

0 commit comments

Comments
 (0)