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
This commit is contained in:
Rahat 2025-04-14 00:36:11 +05:30 committed by GitHub
parent 3e6021fb8f
commit 272a5ce0df
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 110 additions and 0 deletions

View File

@ -713,6 +713,7 @@ impl MessageHandler<TransformLayerMessage, TransformData<'_>> for TransformLayer
#[cfg(test)]
mod test_transform_layer {
use crate::messages::portfolio::document::utility_types::misc::GroupFolderType;
use crate::messages::{
portfolio::document::graph_operation::{
transform_utils,
@ -1150,4 +1151,113 @@ mod test_transform_layer {
assert!(new_scale_x > 0.0, "After rescaling, scale factor X should be non-zero");
assert!(new_scale_y > 0.0, "After rescaling, scale factor Y should be non-zero");
}
#[tokio::test]
async fn test_transform_with_different_selections() {
let mut editor = EditorTestUtils::create();
editor.new_document().await;
editor.draw_rect(0., 0., 100., 100.).await;
editor.draw_rect(150., 0., 250., 100.).await;
editor.draw_rect(0., 150., 100., 250.).await;
editor.draw_rect(150., 150., 250., 250.).await;
let document = editor.active_document();
let layers: Vec<LayerNodeIdentifier> = document.metadata().all_layers().collect();
assert!(layers.len() == 4);
// Creating a group with two rectangles
editor
.handle_message(NodeGraphMessage::SelectedNodesSet {
nodes: vec![layers[2].to_node(), layers[3].to_node()],
})
.await;
editor
.handle_message(DocumentMessage::GroupSelectedLayers {
group_folder_type: GroupFolderType::Layer,
})
.await;
// Get the group layer (should be the newest layer)
let document = editor.active_document();
let group_layer = document.metadata().all_layers().next().unwrap();
// Test 1: Transform single layer
editor.handle_message(NodeGraphMessage::SelectedNodesSet { nodes: vec![layers[0].to_node()] }).await;
let original_transform = get_layer_transform(&mut editor, layers[0]).await.unwrap();
editor.handle_message(TransformLayerMessage::BeginGrab).await;
editor.move_mouse(50.0, 50.0, ModifierKeys::empty(), MouseKeys::NONE).await;
editor
.handle_message(TransformLayerMessage::PointerMove {
slow_key: Key::Shift,
increments_key: Key::Control,
})
.await;
editor.handle_message(TransformLayerMessage::ApplyTransformOperation { final_transform: true }).await;
let final_transform = get_layer_transform(&mut editor, layers[0]).await.unwrap();
assert!(!final_transform.abs_diff_eq(original_transform, 1e-5), "Transform should change for single layer");
// Test 2: Transform multiple layers
editor
.handle_message(NodeGraphMessage::SelectedNodesSet {
nodes: vec![layers[0].to_node(), layers[1].to_node()],
})
.await;
let original_transform_1 = get_layer_transform(&mut editor, layers[0]).await.unwrap();
let original_transform_2 = get_layer_transform(&mut editor, layers[1]).await.unwrap();
editor.handle_message(TransformLayerMessage::BeginRotate).await;
editor.move_mouse(200.0, 50.0, ModifierKeys::empty(), MouseKeys::NONE).await;
editor
.handle_message(TransformLayerMessage::PointerMove {
slow_key: Key::Shift,
increments_key: Key::Control,
})
.await;
editor.handle_message(TransformLayerMessage::ApplyTransformOperation { final_transform: true }).await;
let final_transform_1 = get_layer_transform(&mut editor, layers[0]).await.unwrap();
let final_transform_2 = get_layer_transform(&mut editor, layers[1]).await.unwrap();
assert!(!final_transform_1.abs_diff_eq(original_transform_1, 1e-5), "Transform should change for first layer in multi-selection");
assert!(
!final_transform_2.abs_diff_eq(original_transform_2, 1e-5),
"Transform should change for second layer in multi-selection"
);
// Test 3: Transform group
editor.handle_message(NodeGraphMessage::SelectedNodesSet { nodes: vec![group_layer.to_node()] }).await;
let original_group_transform = get_layer_transform(&mut editor, group_layer).await.unwrap();
editor.handle_message(TransformLayerMessage::BeginScale).await;
editor.handle_message(TransformLayerMessage::TypeDigit { digit: 2 }).await;
editor.handle_message(TransformLayerMessage::ApplyTransformOperation { final_transform: true }).await;
let final_group_transform = get_layer_transform(&mut editor, group_layer).await.unwrap();
assert!(!final_group_transform.abs_diff_eq(original_group_transform, 1e-5), "Transform should change for group");
// Test 4: Transform layers inside transformed group
let child_layer_id = {
let mut document = editor.active_document_mut();
let group_children = document.network_interface.downstream_layers(&group_layer.to_node(), &[]);
if !group_children.is_empty() {
Some(LayerNodeIdentifier::new(group_children[0], &document.network_interface, &[]))
} else {
None
}
};
assert!(child_layer_id.is_some(), "Group should have child layers");
let child_layer_id = child_layer_id.unwrap();
editor
.handle_message(NodeGraphMessage::SelectedNodesSet {
nodes: vec![child_layer_id.to_node()],
})
.await;
let original_child_transform = get_layer_transform(&mut editor, child_layer_id).await.unwrap();
editor.handle_message(TransformLayerMessage::BeginGrab).await;
editor.move_mouse(30.0, 30.0, ModifierKeys::empty(), MouseKeys::NONE).await;
editor
.handle_message(TransformLayerMessage::PointerMove {
slow_key: Key::Shift,
increments_key: Key::Control,
})
.await;
editor.handle_message(TransformLayerMessage::ApplyTransformOperation { final_transform: true }).await;
let final_child_transform = get_layer_transform(&mut editor, child_layer_id).await.unwrap();
assert!(!final_child_transform.abs_diff_eq(original_child_transform, 1e-5), "Child layer inside transformed group should change");
}
}