attr.rs (3036B)
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 app_units::Au; 6 use style::attr::{parse_length, AttrValue, LengthPercentageOrAuto}; 7 use style::values::computed::{CalcLengthPercentage, Percentage}; 8 9 #[test] 10 fn test_length_calc() { 11 let calc = CalcLengthPercentage::new(Au(10).into(), Some(Percentage(0.2))); 12 assert_eq!(calc.to_used_value(Some(Au(10))), Some(Au(12))); 13 assert_eq!(calc.to_used_value(Some(Au(0))), Some(Au(10))); 14 assert_eq!(calc.to_used_value(None), None); 15 16 let calc = CalcLengthPercentage::new(Au(10).into(), None); 17 assert_eq!(calc.to_used_value(Some(Au(0))), Some(Au(10))); 18 assert_eq!(calc.to_used_value(None), Some(Au(10))); 19 } 20 21 #[test] 22 fn test_parse_double() { 23 let value = String::from("432.5e2"); 24 match AttrValue::from_double(value, 0.0) { 25 AttrValue::Double(_, num) => assert_eq!(num, 43250f64), 26 _ => panic!("expected a double value"), 27 } 28 } 29 30 #[test] 31 fn test_parse_double_negative_prefix() { 32 let value = String::from("-5.6"); 33 match AttrValue::from_double(value, 0.0) { 34 AttrValue::Double(_, num) => assert_eq!(num, -5.6f64), 35 _ => panic!("expected a double value"), 36 } 37 } 38 39 #[test] 40 fn test_parse_double_positive_prefix() { 41 let value = String::from("+5.6"); 42 match AttrValue::from_double(value, 0.0) { 43 AttrValue::Double(_, num) => assert_eq!(num, 5.6f64), 44 _ => panic!("expected a double value"), 45 } 46 } 47 48 #[test] 49 fn test_from_limited_i32_should_be_default_when_less_than_0() { 50 let value = String::from("-1"); 51 match AttrValue::from_limited_i32(value, 0) { 52 AttrValue::Int(_, 0) => (), 53 _ => panic!("expected an IndexSize error"), 54 } 55 } 56 57 #[test] 58 fn test_from_limited_i32_should_parse_a_uint_when_value_is_0_or_greater() { 59 match AttrValue::from_limited_i32(String::from("1"), 0) { 60 AttrValue::Int(_, 1) => (), 61 _ => panic!("expected an successful parsing"), 62 } 63 } 64 65 #[test] 66 fn test_from_limited_i32_should_keep_parsed_value_when_not_an_int() { 67 match AttrValue::from_limited_i32(String::from("parsed-value"), 0) { 68 AttrValue::Int(p, 0) => { 69 assert_eq!(p, String::from("parsed-value")) 70 }, 71 _ => panic!("expected an successful parsing"), 72 } 73 } 74 75 #[test] 76 pub fn test_parse_length() { 77 fn check(input: &str, expected: LengthPercentageOrAuto) { 78 let parsed = parse_length(input); 79 assert_eq!(parsed, expected); 80 } 81 82 check("0", LengthPercentageOrAuto::Length(Au::from_px(0))); 83 check("0.000%", LengthPercentageOrAuto::Percentage(0.0)); 84 check("+5.82%", LengthPercentageOrAuto::Percentage(0.0582)); 85 check( 86 "5.82", 87 LengthPercentageOrAuto::Length(Au::from_f64_px(5.82)), 88 ); 89 check("invalid", LengthPercentageOrAuto::Auto); 90 check( 91 "12 followed by invalid", 92 LengthPercentageOrAuto::Length(Au::from_px(12)), 93 ); 94 }