tor-browser

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

position.rs (8578B)


      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 parsing::{parse, parse_entirely};
      6 use style::parser::Parse;
      7 use style::values::specified::position::*;
      8 use style_traits::ToCss;
      9 
     10 #[test]
     11 fn test_position() {
     12    // Serialization is not actually specced
     13    // though these are the values expected by basic-shape
     14    // https://github.com/w3c/csswg-drafts/issues/368
     15    assert_roundtrip_with_context!(Position::parse, "center", "center center");
     16    assert_roundtrip_with_context!(Position::parse, "top left", "left top");
     17    assert_roundtrip_with_context!(Position::parse, "left top", "left top");
     18    assert_roundtrip_with_context!(Position::parse, "top right", "right top");
     19    assert_roundtrip_with_context!(Position::parse, "right top", "right top");
     20    assert_roundtrip_with_context!(Position::parse, "bottom left", "left bottom");
     21    assert_roundtrip_with_context!(Position::parse, "left bottom", "left bottom");
     22    assert_roundtrip_with_context!(Position::parse, "left center", "left center");
     23    assert_roundtrip_with_context!(Position::parse, "right center", "right center");
     24    assert_roundtrip_with_context!(Position::parse, "center top", "center top");
     25    assert_roundtrip_with_context!(Position::parse, "center bottom", "center bottom");
     26    assert_roundtrip_with_context!(Position::parse, "center 10px", "center 10px");
     27    assert_roundtrip_with_context!(Position::parse, "center 10%", "center 10%");
     28    assert_roundtrip_with_context!(Position::parse, "right 10%", "right 10%");
     29 
     30    // Only keywords can be reordered
     31    assert!(parse_entirely(Position::parse, "top 40%").is_err());
     32    assert!(parse_entirely(Position::parse, "40% left").is_err());
     33 
     34    // 3 and 4 value serialization
     35    assert_roundtrip_with_context!(Position::parse, "left 10px top 15px", "left 10px top 15px");
     36    assert_roundtrip_with_context!(Position::parse, "top 15px left 10px", "left 10px top 15px");
     37    assert_roundtrip_with_context!(Position::parse, "left 10% top 15px", "left 10% top 15px");
     38    assert_roundtrip_with_context!(Position::parse, "top 15px left 10%", "left 10% top 15px");
     39    assert_roundtrip_with_context!(Position::parse, "left top 15px", "left top 15px");
     40    assert_roundtrip_with_context!(Position::parse, "top 15px left", "left top 15px");
     41    assert_roundtrip_with_context!(Position::parse, "left 10px top", "left 10px top");
     42    assert_roundtrip_with_context!(Position::parse, "top left 10px", "left 10px top");
     43    assert_roundtrip_with_context!(Position::parse, "right 10px bottom", "right 10px bottom");
     44    assert_roundtrip_with_context!(Position::parse, "bottom right 10px", "right 10px bottom");
     45    assert_roundtrip_with_context!(Position::parse, "center right 10px", "right 10px center");
     46    assert_roundtrip_with_context!(Position::parse, "center bottom 10px", "center bottom 10px");
     47 
     48    // Invalid 3 value positions
     49    assert!(parse_entirely(Position::parse, "20px 30px 20px").is_err());
     50    assert!(parse_entirely(Position::parse, "top 30px 20px").is_err());
     51    assert!(parse_entirely(Position::parse, "50% bottom 20%").is_err());
     52 
     53    // Only horizontal and vertical keywords can have positions
     54    assert!(parse_entirely(Position::parse, "center 10px left 15px").is_err());
     55    assert!(parse_entirely(Position::parse, "center 10px 15px").is_err());
     56    assert!(parse_entirely(Position::parse, "center 10px bottom").is_err());
     57 
     58    // "Horizontal Horizontal" or "Vertical Vertical" positions cause error
     59    assert!(parse_entirely(Position::parse, "left right").is_err());
     60    assert!(parse_entirely(Position::parse, "left 10px right").is_err());
     61    assert!(parse_entirely(Position::parse, "left 10px right 15%").is_err());
     62    assert!(parse_entirely(Position::parse, "top bottom").is_err());
     63    assert!(parse_entirely(Position::parse, "top 10px bottom").is_err());
     64    assert!(parse_entirely(Position::parse, "top 10px bottom 15%").is_err());
     65 
     66    // Logical keywords are not supported in Position yet.
     67    assert!(parse(Position::parse, "x-start").is_err());
     68    assert!(parse(Position::parse, "y-end").is_err());
     69    assert!(parse(Position::parse, "x-start y-end").is_err());
     70    assert!(parse(Position::parse, "x-end 10px").is_err());
     71    assert!(parse(Position::parse, "y-start 20px").is_err());
     72    assert!(parse(Position::parse, "x-start bottom 10%").is_err());
     73    assert!(parse_entirely(Position::parse, "left y-start 10%").is_err());
     74    assert!(parse(Position::parse, "x-start 20px y-end 10%").is_err());
     75 }
     76 
     77 #[test]
     78 fn test_horizontal_position() {
     79    // One value serializations.
     80    assert_roundtrip_with_context!(HorizontalPosition::parse, "20px", "20px");
     81    assert_roundtrip_with_context!(HorizontalPosition::parse, "25%", "25%");
     82    assert_roundtrip_with_context!(HorizontalPosition::parse, "center", "center");
     83    assert_roundtrip_with_context!(HorizontalPosition::parse, "left", "left");
     84    assert_roundtrip_with_context!(HorizontalPosition::parse, "right", "right");
     85 
     86    // Two value serializations.
     87    assert_roundtrip_with_context!(HorizontalPosition::parse, "right 10px", "right 10px");
     88 
     89    // Invalid horizontal positions.
     90    assert!(parse(HorizontalPosition::parse, "top").is_err());
     91    assert!(parse(HorizontalPosition::parse, "bottom").is_err());
     92    assert!(parse(HorizontalPosition::parse, "y-start").is_err());
     93    assert!(parse(HorizontalPosition::parse, "y-end").is_err());
     94    assert!(parse(HorizontalPosition::parse, "y-end 20px ").is_err());
     95    assert!(parse(HorizontalPosition::parse, "bottom 20px").is_err());
     96    assert!(parse(HorizontalPosition::parse, "bottom top").is_err());
     97    assert!(parse_entirely(HorizontalPosition::parse, "20px y-end").is_err());
     98    assert!(parse_entirely(HorizontalPosition::parse, "20px top").is_err());
     99    assert!(parse_entirely(HorizontalPosition::parse, "left center").is_err());
    100    assert!(parse_entirely(HorizontalPosition::parse, "left top").is_err());
    101    assert!(parse_entirely(HorizontalPosition::parse, "left right").is_err());
    102    assert!(parse_entirely(HorizontalPosition::parse, "20px 30px").is_err());
    103    assert!(parse_entirely(HorizontalPosition::parse, "10px left").is_err());
    104    assert!(parse_entirely(HorizontalPosition::parse, "x-end 20%").is_err());
    105    assert!(parse_entirely(HorizontalPosition::parse, "20px x-start").is_err());
    106 
    107    // Logical keywords are not supported in Position yet.
    108    assert!(parse(HorizontalPosition::parse, "x-start").is_err());
    109    assert!(parse(HorizontalPosition::parse, "x-end").is_err());
    110 }
    111 
    112 #[test]
    113 fn test_vertical_position() {
    114    // One value serializations.
    115    assert_roundtrip_with_context!(VerticalPosition::parse, "20px", "20px");
    116    assert_roundtrip_with_context!(VerticalPosition::parse, "25%", "25%");
    117    assert_roundtrip_with_context!(VerticalPosition::parse, "center", "center");
    118    assert_roundtrip_with_context!(VerticalPosition::parse, "top", "top");
    119    assert_roundtrip_with_context!(VerticalPosition::parse, "bottom", "bottom");
    120 
    121    // Two value serializations.
    122    assert_roundtrip_with_context!(VerticalPosition::parse, "bottom 10px", "bottom 10px");
    123 
    124    // Invalid vertical positions.
    125    assert!(parse(VerticalPosition::parse, "left").is_err());
    126    assert!(parse(VerticalPosition::parse, "right").is_err());
    127    assert!(parse(VerticalPosition::parse, "x-start").is_err());
    128    assert!(parse(VerticalPosition::parse, "x-end").is_err());
    129    assert!(parse(VerticalPosition::parse, "x-end 20px").is_err());
    130    assert!(parse(VerticalPosition::parse, "left 20px").is_err());
    131    assert!(parse(VerticalPosition::parse, "left center").is_err());
    132    assert!(parse(VerticalPosition::parse, "left top").is_err());
    133    assert!(parse(VerticalPosition::parse, "left right").is_err());
    134    assert!(parse_entirely(VerticalPosition::parse, "20px x-end").is_err());
    135    assert!(parse_entirely(VerticalPosition::parse, "20px right").is_err());
    136    assert!(parse_entirely(VerticalPosition::parse, "bottom top").is_err());
    137    assert!(parse_entirely(VerticalPosition::parse, "20px 30px").is_err());
    138    assert!(parse_entirely(VerticalPosition::parse, "10px top").is_err());
    139    assert!(parse_entirely(VerticalPosition::parse, "y-end 20%").is_err());
    140    assert!(parse_entirely(VerticalPosition::parse, "20px y-start").is_err());
    141 
    142    // Logical keywords are not supported in Position yet.
    143    assert!(parse(VerticalPosition::parse, "y-start").is_err());
    144    assert!(parse(VerticalPosition::parse, "y-end").is_err());
    145 }