diff --git a/src/geometry.rs b/src/geometry.rs
index e043ec180..223103bb1 100644
--- a/src/geometry.rs
+++ b/src/geometry.rs
@@ -256,3 +256,37 @@ impl Point<f32> {
Self { x: 0.0, y: 0.0 }
}
}
+
+#[cfg(test)]
+mod tests {
+ mod test_resolve_size {
+ use crate::geometry::Size;
+ use crate::style::Dimension;
+ use rstest::rstest;
+
+ #[rstest]
+ #[case(Size { width: Dimension::Undefined, height: Dimension::Undefined }, Size { width: None, height: None }, Size { width: None, height: None })]
+ #[case(Size { width: Dimension::Undefined, height: Dimension::Undefined }, Size { width: Some(0.0), height: Some(0.0) }, Size { width: None, height: None })]
+ #[case(Size { width: Dimension::Undefined, height: Dimension::Undefined }, Size { width: Some(1.0), height: Some(1.0) }, Size { width: None, height: None })]
+ #[case(Size { width: Dimension::Undefined, height: Dimension::Undefined }, Size { width: Some(-1.0), height: Some(-1.0) }, Size { width: None, height: None })]
+ #[case(Size { width: Dimension::Auto, height: Dimension::Auto }, Size { width: None, height: None }, Size { width: None, height: None })]
+ #[case(Size { width: Dimension::Auto, height: Dimension::Auto }, Size { width: Some(0.0), height: Some(0.0) }, Size { width: None, height: None })]
+ #[case(Size { width: Dimension::Auto, height: Dimension::Auto }, Size { width: Some(1.0), height: Some(1.0) }, Size { width: None, height: None })]
+ #[case(Size { width: Dimension::Auto, height: Dimension::Auto }, Size { width: Some(-1.0), height: Some(-1.0) }, Size { width: None, height: None })]
+ #[case(Size { width: Dimension::Points(5.0), height: Dimension::Points(5.0) }, Size { width: None, height: None }, Size { width: Some(5.0), height: Some(5.0) })]
+ #[case(Size { width: Dimension::Points(5.0), height: Dimension::Points(5.0) }, Size { width: Some(0.0), height: Some(0.0) }, Size { width: Some(5.0), height: Some(5.0) })]
+ #[case(Size { width: Dimension::Points(5.0), height: Dimension::Points(5.0) }, Size { width: Some(1.0), height: Some(1.0) }, Size { width: Some(5.0), height: Some(5.0) })]
+ #[case(Size { width: Dimension::Points(5.0), height: Dimension::Points(5.0) }, Size { width: Some(-1.0), height: Some(-1.0) }, Size { width: Some(5.0), height: Some(5.0) })]
+ #[case(Size { width: Dimension::Percent(50.0), height: Dimension::Percent(50.0) }, Size { width: None, height: None }, Size { width: None, height: None })]
+ #[case(Size { width: Dimension::Percent(50.0), height: Dimension::Percent(50.0) }, Size { width: Some(0.0), height: Some(0.0) }, Size { width: Some(0.0), height: Some(0.0) })]
+ #[case(Size { width: Dimension::Percent(50.0), height: Dimension::Percent(50.0) }, Size { width: Some(1.0), height: Some(1.0) }, Size { width: Some(50.0), height: Some(50.0) })]
+ #[case(Size { width: Dimension::Percent(50.0), height: Dimension::Percent(50.0) }, Size { width: Some(-1.0), height: Some(-1.0) }, Size { width: Some(-50.0), height: Some(-50.0) })]
+ fn resolve_size(
+ #[case] input: Size<Dimension>,
+ #[case] parent: Size<Option<f32>>,
+ #[case] expected: Size<Option<f32>>,
+ ) {
+ assert_eq!(input.resolve(parent), expected);
+ }
+ }
+}
diff --git a/src/style.rs b/src/style.rs
index 82431f973..2db95c15b 100644
--- a/src/style.rs
+++ b/src/style.rs
@@ -486,3 +486,47 @@ impl FlexboxLayout {
}
}
}
+
+#[cfg(test)]
+mod tests {
+ mod test_resolve_dimensions {
+ use crate::style::Dimension;
+ use rstest::rstest;
+
+ #[rstest]
+ #[case(Dimension::Undefined, None, None)]
+ #[case(Dimension::Undefined, Some(5.0), None)]
+ #[case(Dimension::Undefined, Some(-5.0), None)]
+ #[case(Dimension::Undefined, Some(0.), None)]
+ fn resolve_undefined(#[case] input: Dimension, #[case] parent: Option<f32>, #[case] expected: Option<f32>) {
+ assert_eq!(input.resolve(parent), expected);
+ }
+
+ #[rstest]
+ #[case(Dimension::Auto, None, None)]
+ #[case(Dimension::Auto, Some(5.0), None)]
+ #[case(Dimension::Auto, Some(-5.0), None)]
+ #[case(Dimension::Auto, Some(0.), None)]
+ fn resolve_auto(#[case] input: Dimension, #[case] parent: Option<f32>, #[case] expected: Option<f32>) {
+ assert_eq!(input.resolve(parent), expected);
+ }
+
+ #[rstest]
+ #[case(Dimension::Points(0.), None, Some(0.))]
+ #[case(Dimension::Points(1.), Some(5.0), Some(1.))]
+ #[case(Dimension::Points(-1.), Some(-5.0), Some(-1.))]
+ #[case(Dimension::Points(1.0), Some(0.), Some(1.0))]
+ fn resolve_points(#[case] input: Dimension, #[case] parent: Option<f32>, #[case] expected: Option<f32>) {
+ assert_eq!(input.resolve(parent), expected);
+ }
+
+ #[rstest]
+ #[case(Dimension::Percent(1.0), None, None)]
+ #[case(Dimension::Percent(1.0), Some(5.0), Some(5.0))]
+ #[case(Dimension::Percent(1.0), Some(-5.0), Some(-5.0))]
+ #[case(Dimension::Percent(10.0), Some(5.0), Some(50.0))]
+ fn resolve_percent(#[case] input: Dimension, #[case] parent: Option<f32>, #[case] expected: Option<f32>) {
+ assert_eq!(input.resolve(parent), expected);
+ }
+ }
+}