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
This commit is contained in:
Rahat 2025-04-06 19:12:15 +05:30 committed by GitHub
parent e11b57a7af
commit 1001ec2740
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 47 additions and 5 deletions

8
Cargo.lock generated
View file

@ -4423,9 +4423,9 @@ dependencies = [
[[package]]
name = "openssl"
version = "0.10.71"
version = "0.10.72"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e14130c6a98cd258fdcb0fb6d744152343ff729cbfcb28c656a9d12b999fbcd"
checksum = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da"
dependencies = [
"bitflags 2.9.0",
"cfg-if",
@ -4455,9 +4455,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e"
[[package]]
name = "openssl-sys"
version = "0.9.106"
version = "0.9.107"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8bb61ea9811cc39e3c2069f40b8b8e2e70d8569b361f879786cc7ed48b777cdd"
checksum = "8288979acd84749c744a9014b4382d42b8f7b2592847b5afb2ed29e5d16ede07"
dependencies = [
"cc",
"libc",

View file

@ -703,7 +703,10 @@ impl MessageHandler<TransformLayerMessage, TransformData<'_>> for TransformLayer
#[cfg(test)]
mod test_transform_layer {
use crate::messages::{
portfolio::document::graph_operation::{transform_utils, utility_types::ModifyInputsContext},
portfolio::document::graph_operation::{
transform_utils,
utility_types::{ModifyInputsContext, TransformIn},
},
prelude::Message,
tool::transform_layer::transform_layer_message_handler::VectorModificationType,
};
@ -1097,4 +1100,43 @@ mod test_transform_layer {
let final_transform = get_layer_transform(&mut editor, layer).await;
assert!(final_transform.is_some(), "Transform node should exist after grab operation");
}
#[tokio::test]
async fn test_scale_to_zero_then_rescale() {
let mut editor = EditorTestUtils::create();
editor.new_document().await;
editor.drag_tool(ToolType::Rectangle, 0., 0., 100., 100., ModifierKeys::empty()).await;
let document = editor.active_document();
let layer = document.metadata().all_layers().next().unwrap();
// First scale to near-zero
editor.handle_message(TransformLayerMessage::BeginScale).await;
editor.handle_message(TransformLayerMessage::TypeDigit { digit: 0 }).await;
editor.handle_message(TransformLayerMessage::TypeDecimalPoint).await;
editor.handle_message(TransformLayerMessage::TypeDigit { digit: 0 }).await;
editor.handle_message(TransformLayerMessage::TypeDigit { digit: 0 }).await;
editor.handle_message(TransformLayerMessage::TypeDigit { digit: 0 }).await;
editor.handle_message(TransformLayerMessage::TypeDigit { digit: 1 }).await;
editor.handle_message(TransformLayerMessage::ApplyTransformOperation { final_transform: true }).await;
let near_zero_transform = get_layer_transform(&mut editor, layer).await.unwrap();
// Verify scale is near zero.
let scale_x = near_zero_transform.matrix2.x_axis.length();
let scale_y = near_zero_transform.matrix2.y_axis.length();
assert!(scale_x < 0.001, "Scale factor X should be near zero, got: {}", scale_x);
assert!(scale_y < 0.001, "Scale factor Y should be near zero, got: {}", scale_y);
assert!(scale_x > 0.0, "Scale factor X should not be exactly zero");
assert!(scale_y > 0.0, "Scale factor Y should not be exactly zero");
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_transform = get_layer_transform(&mut editor, layer).await.unwrap();
assert!(final_transform.is_finite(), "Transform should be finite after rescaling");
let new_scale_x = final_transform.matrix2.x_axis.length();
let new_scale_y = final_transform.matrix2.y_axis.length();
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");
}
}