summaryrefslogtreecommitdiffstats
path: root/servo/tests/unit/style/logical_geometry.rs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--servo/tests/unit/style/logical_geometry.rs75
1 files changed, 75 insertions, 0 deletions
diff --git a/servo/tests/unit/style/logical_geometry.rs b/servo/tests/unit/style/logical_geometry.rs
new file mode 100644
index 0000000000..8d6c06ec9a
--- /dev/null
+++ b/servo/tests/unit/style/logical_geometry.rs
@@ -0,0 +1,75 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+use euclid::{Size2D, Point2D, SideOffsets2D, Rect};
+use style::logical_geometry::{WritingMode, LogicalSize, LogicalPoint, LogicalMargin, LogicalRect};
+
+#[cfg(test)]
+fn modes() -> Vec<WritingMode> {
+ vec![
+ WritingMode::empty(),
+ WritingMode::VERTICAL,
+ WritingMode::VERTICAL | WritingMode::VERTICAL_LR,
+ WritingMode::VERTICAL | WritingMode::VERTICAL_LR | WritingMode::VERTICAL_SIDEWAYS,
+ WritingMode::VERTICAL | WritingMode::VERTICAL_LR | WritingMode::TEXT_SIDEWAYS,
+ WritingMode::VERTICAL | WritingMode::VERTICAL_SIDEWAYS,
+ WritingMode::VERTICAL | WritingMode::TEXT_SIDEWAYS,
+ WritingMode::VERTICAL | WritingMode::UPRIGHT,
+ WritingMode::RTL,
+ WritingMode::VERTICAL | WritingMode::RTL,
+ WritingMode::VERTICAL | WritingMode::VERTICAL_LR | WritingMode::RTL,
+ WritingMode::VERTICAL | WritingMode::VERTICAL_LR | WritingMode::VERTICAL_SIDEWAYS | WritingMode::RTL,
+ WritingMode::VERTICAL | WritingMode::VERTICAL_LR | WritingMode::TEXT_SIDEWAYS | WritingMode::RTL,
+ WritingMode::VERTICAL | WritingMode::VERTICAL_LR | WritingMode::UPRIGHT | WritingMode::RTL,
+ WritingMode::VERTICAL | WritingMode::VERTICAL_SIDEWAYS | WritingMode::RTL,
+ WritingMode::VERTICAL | WritingMode::TEXT_SIDEWAYS | WritingMode::RTL,
+ WritingMode::VERTICAL | WritingMode::UPRIGHT | WritingMode::RTL,
+ ]
+}
+
+#[test]
+fn test_size_round_trip() {
+ let physical = Size2D::new(1u32, 2u32);
+ for &mode in modes().iter() {
+ let logical = LogicalSize::from_physical(mode, physical);
+ assert_eq!(logical.to_physical(mode), physical);
+ assert_eq!(logical.width(mode), 1);
+ assert_eq!(logical.height(mode), 2);
+ }
+}
+
+#[test]
+fn test_point_round_trip() {
+ let physical = Point2D::new(1u32, 2u32);
+ let container = Size2D::new(100, 200);
+ for &mode in modes().iter() {
+ let logical = LogicalPoint::from_physical(mode, physical, container);
+ assert_eq!(logical.to_physical(mode, container), physical);
+ assert_eq!(logical.x(mode, container), 1);
+ assert_eq!(logical.y(mode, container), 2);
+ }
+}
+
+#[test]
+fn test_margin_round_trip() {
+ let physical = SideOffsets2D::new(1u32, 2u32, 3u32, 4u32);
+ for &mode in modes().iter() {
+ let logical = LogicalMargin::from_physical(mode, physical);
+ assert_eq!(logical.to_physical(mode), physical);
+ assert_eq!(logical.top(mode), 1);
+ assert_eq!(logical.right(mode), 2);
+ assert_eq!(logical.bottom(mode), 3);
+ assert_eq!(logical.left(mode), 4);
+ }
+}
+
+#[test]
+fn test_rect_round_trip() {
+ let physical = Rect::new(Point2D::new(1u32, 2u32), Size2D::new(3u32, 4u32));
+ let container = Size2D::new(100, 200);
+ for &mode in modes().iter() {
+ let logical = LogicalRect::from_physical(mode, physical, container);
+ assert_eq!(logical.to_physical(mode, container), physical);
+ }
+}