Skip to content

Commit 1001ec2

Browse files
authored
Add test for scaling objects to zero without any crash (#2491)
* Add test for scaling objects to zero * added non zero scale after near zero scale to check if everything is working ifine * unnecessary change * cli failing * chore: upgrade openssl to fix RUSTSEC-2025-0022 * cli failing * new changes
1 parent e11b57a commit 1001ec2

File tree

2 files changed

+47
-5
lines changed

2 files changed

+47
-5
lines changed

Cargo.lock

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -703,7 +703,10 @@ impl MessageHandler<TransformLayerMessage, TransformData<'_>> for TransformLayer
703703
#[cfg(test)]
704704
mod test_transform_layer {
705705
use crate::messages::{
706-
portfolio::document::graph_operation::{transform_utils, utility_types::ModifyInputsContext},
706+
portfolio::document::graph_operation::{
707+
transform_utils,
708+
utility_types::{ModifyInputsContext, TransformIn},
709+
},
707710
prelude::Message,
708711
tool::transform_layer::transform_layer_message_handler::VectorModificationType,
709712
};
@@ -1097,4 +1100,43 @@ mod test_transform_layer {
10971100
let final_transform = get_layer_transform(&mut editor, layer).await;
10981101
assert!(final_transform.is_some(), "Transform node should exist after grab operation");
10991102
}
1103+
#[tokio::test]
1104+
async fn test_scale_to_zero_then_rescale() {
1105+
let mut editor = EditorTestUtils::create();
1106+
editor.new_document().await;
1107+
editor.drag_tool(ToolType::Rectangle, 0., 0., 100., 100., ModifierKeys::empty()).await;
1108+
let document = editor.active_document();
1109+
let layer = document.metadata().all_layers().next().unwrap();
1110+
1111+
// First scale to near-zero
1112+
editor.handle_message(TransformLayerMessage::BeginScale).await;
1113+
editor.handle_message(TransformLayerMessage::TypeDigit { digit: 0 }).await;
1114+
editor.handle_message(TransformLayerMessage::TypeDecimalPoint).await;
1115+
editor.handle_message(TransformLayerMessage::TypeDigit { digit: 0 }).await;
1116+
editor.handle_message(TransformLayerMessage::TypeDigit { digit: 0 }).await;
1117+
editor.handle_message(TransformLayerMessage::TypeDigit { digit: 0 }).await;
1118+
editor.handle_message(TransformLayerMessage::TypeDigit { digit: 1 }).await;
1119+
editor.handle_message(TransformLayerMessage::ApplyTransformOperation { final_transform: true }).await;
1120+
1121+
let near_zero_transform = get_layer_transform(&mut editor, layer).await.unwrap();
1122+
// Verify scale is near zero.
1123+
let scale_x = near_zero_transform.matrix2.x_axis.length();
1124+
let scale_y = near_zero_transform.matrix2.y_axis.length();
1125+
assert!(scale_x < 0.001, "Scale factor X should be near zero, got: {}", scale_x);
1126+
assert!(scale_y < 0.001, "Scale factor Y should be near zero, got: {}", scale_y);
1127+
assert!(scale_x > 0.0, "Scale factor X should not be exactly zero");
1128+
assert!(scale_y > 0.0, "Scale factor Y should not be exactly zero");
1129+
1130+
editor.handle_message(TransformLayerMessage::BeginScale).await;
1131+
editor.handle_message(TransformLayerMessage::TypeDigit { digit: 2 }).await;
1132+
editor.handle_message(TransformLayerMessage::ApplyTransformOperation { final_transform: true }).await;
1133+
1134+
let final_transform = get_layer_transform(&mut editor, layer).await.unwrap();
1135+
assert!(final_transform.is_finite(), "Transform should be finite after rescaling");
1136+
1137+
let new_scale_x = final_transform.matrix2.x_axis.length();
1138+
let new_scale_y = final_transform.matrix2.y_axis.length();
1139+
assert!(new_scale_x > 0.0, "After rescaling, scale factor X should be non-zero");
1140+
assert!(new_scale_y > 0.0, "After rescaling, scale factor Y should be non-zero");
1141+
}
11001142
}

0 commit comments

Comments
 (0)