gioser

tawasuyu/taffy

A high performance rust-powered UI layout library

Rust 1061HTML 997Markdown 12TOML 83120 Definitions

Add unit-tests to `resolve` (#173)

3f26d38a5bcdb782dc0b3f74e987a927ad7ec477 · by Andreas Weibye · (4 years ago) · parent a753f2910 · browse the tree at this commit

Semantic delta · 9

src/geometry.rs

src/style.rs

2 files · +78 −0

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);
+        }
+    }
+}