logical_geometry.rs (3216B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ 4 5 use euclid::{Point2D, Rect, SideOffsets2D, Size2D}; 6 use style::logical_geometry::{LogicalMargin, LogicalPoint, LogicalRect, LogicalSize, WritingMode}; 7 8 #[cfg(test)] 9 fn modes() -> Vec<WritingMode> { 10 vec![ 11 WritingMode::empty(), 12 WritingMode::VERTICAL, 13 WritingMode::VERTICAL | WritingMode::VERTICAL_LR, 14 WritingMode::VERTICAL | WritingMode::VERTICAL_LR | WritingMode::VERTICAL_SIDEWAYS, 15 WritingMode::VERTICAL | WritingMode::VERTICAL_LR | WritingMode::TEXT_SIDEWAYS, 16 WritingMode::VERTICAL | WritingMode::VERTICAL_SIDEWAYS, 17 WritingMode::VERTICAL | WritingMode::TEXT_SIDEWAYS, 18 WritingMode::VERTICAL | WritingMode::UPRIGHT, 19 WritingMode::RTL, 20 WritingMode::VERTICAL | WritingMode::RTL, 21 WritingMode::VERTICAL | WritingMode::VERTICAL_LR | WritingMode::RTL, 22 WritingMode::VERTICAL 23 | WritingMode::VERTICAL_LR 24 | WritingMode::VERTICAL_SIDEWAYS 25 | WritingMode::RTL, 26 WritingMode::VERTICAL 27 | WritingMode::VERTICAL_LR 28 | WritingMode::TEXT_SIDEWAYS 29 | WritingMode::RTL, 30 WritingMode::VERTICAL | WritingMode::VERTICAL_LR | WritingMode::UPRIGHT | WritingMode::RTL, 31 WritingMode::VERTICAL | WritingMode::VERTICAL_SIDEWAYS | WritingMode::RTL, 32 WritingMode::VERTICAL | WritingMode::TEXT_SIDEWAYS | WritingMode::RTL, 33 WritingMode::VERTICAL | WritingMode::UPRIGHT | WritingMode::RTL, 34 ] 35 } 36 37 #[test] 38 fn test_size_round_trip() { 39 let physical = Size2D::new(1u32, 2u32); 40 for &mode in modes().iter() { 41 let logical = LogicalSize::from_physical(mode, physical); 42 assert_eq!(logical.to_physical(mode), physical); 43 assert_eq!(logical.width(mode), 1); 44 assert_eq!(logical.height(mode), 2); 45 } 46 } 47 48 #[test] 49 fn test_point_round_trip() { 50 let physical = Point2D::new(1u32, 2u32); 51 let container = Size2D::new(100, 200); 52 for &mode in modes().iter() { 53 let logical = LogicalPoint::from_physical(mode, physical, container); 54 assert_eq!(logical.to_physical(mode, container), physical); 55 assert_eq!(logical.x(mode, container), 1); 56 assert_eq!(logical.y(mode, container), 2); 57 } 58 } 59 60 #[test] 61 fn test_margin_round_trip() { 62 let physical = SideOffsets2D::new(1u32, 2u32, 3u32, 4u32); 63 for &mode in modes().iter() { 64 let logical = LogicalMargin::from_physical(mode, physical); 65 assert_eq!(logical.to_physical(mode), physical); 66 assert_eq!(logical.top(mode), 1); 67 assert_eq!(logical.right(mode), 2); 68 assert_eq!(logical.bottom(mode), 3); 69 assert_eq!(logical.left(mode), 4); 70 } 71 } 72 73 #[test] 74 fn test_rect_round_trip() { 75 let physical = Rect::new(Point2D::new(1u32, 2u32), Size2D::new(3u32, 4u32)); 76 let container = Size2D::new(100, 200); 77 for &mode in modes().iter() { 78 let logical = LogicalRect::from_physical(mode, physical, container); 79 assert_eq!(logical.to_physical(mode, container), physical); 80 } 81 }