tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 }