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:
parent
3e6021fb8f
commit
272a5ce0df
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue