| use super::*; |
| |
| #[test] |
| fn test_comments_in_rules() { |
| let text = r#" |
| rule a {} |
| |
| rule b, c |
| // a line comment |
| {} |
| |
| rule d |
| // another line comment |
| e {} |
| |
| rule f/* a multiline |
| |
| comment*/{} |
| |
| rule g/* another multiline |
| |
| comment*/h |
| |
| i {} |
| |
| rule j/*commeeeeent |
| |
| you like things like "{}" in there? :) |
| */ |
| end {}"#; |
| |
| let against = r#" |
| rule a {} |
| |
| rule b, c {} |
| |
| rule d e {} |
| |
| rule f {} |
| |
| rule gh i {} |
| |
| rule j end {} |
| "#; |
| |
| let mut ret = Vec::new(); |
| get_differences(&load_css_paths(against).unwrap(), &load_css_paths(text).unwrap(), &mut ret); |
| assert!(ret.is_empty()); |
| } |
| |
| #[test] |
| fn test_text() { |
| let text = r#" |
| a |
| /* sdfs |
| */ b |
| c // sdf |
| d {} |
| "#; |
| let paths = load_css_paths(text).unwrap(); |
| assert!(paths.contains_key(&"a b c d".to_owned())); |
| } |
| |
| #[test] |
| fn test_comparison() { |
| let origin = r#" |
| @a { |
| b {} |
| c {} |
| } |
| "#; |
| |
| let against = r#" |
| @a { |
| b {} |
| } |
| "#; |
| |
| let origin = load_css_paths(origin).unwrap(); |
| let against = load_css_paths(against).unwrap(); |
| |
| let mut ret = Vec::new(); |
| get_differences(&against, &origin, &mut ret); |
| assert!(ret.is_empty()); |
| get_differences(&origin, &against, &mut ret); |
| assert_eq!(ret, vec![" Missing rule `c`".to_owned()]); |
| } |
| |
| #[test] |
| fn check_empty_css() { |
| let paths = load_css_paths("").unwrap(); |
| assert_eq!(paths.len(), 0); |
| } |
| |
| #[test] |
| fn check_invalid_css() { |
| let paths = load_css_paths("*").unwrap(); |
| assert_eq!(paths.len(), 0); |
| } |
| |
| #[test] |
| fn test_with_minification() { |
| let text = include_str!("../html/static/css/noscript.css"); |
| let minified = minifier::css::minify(&text).expect("CSS minification failed").to_string(); |
| |
| let against = load_css_paths(text).unwrap(); |
| let other = load_css_paths(&minified).unwrap(); |
| |
| let mut ret = Vec::new(); |
| get_differences(&against, &other, &mut ret); |
| assert!(ret.is_empty()); |
| } |
| |
| #[test] |
| fn test_media() { |
| let text = r#" |
| @media (min-width: 701px) { |
| a:hover { |
| color: #fff; |
| } |
| |
| b { |
| x: y; |
| } |
| } |
| |
| @media (max-width: 1001px) { |
| b { |
| x: y; |
| } |
| } |
| "#; |
| |
| let paths = load_css_paths(text).unwrap(); |
| let p = paths.get("@media (min-width:701px)"); |
| assert!(p.is_some()); |
| let p = p.unwrap(); |
| assert!(p.children.get("a:hover").is_some()); |
| assert!(p.children.get("b").is_some()); |
| |
| let p = paths.get("@media (max-width:1001px)"); |
| assert!(p.is_some()); |
| let p = p.unwrap(); |
| assert!(p.children.get("b").is_some()); |
| } |
| |
| #[test] |
| fn test_css_variables() { |
| let x = r#" |
| :root { |
| --a: #fff; |
| } |
| "#; |
| |
| let y = r#" |
| :root { |
| --a: #fff; |
| --b: #fff; |
| } |
| "#; |
| |
| let against = load_css_paths(x).unwrap(); |
| let other = load_css_paths(y).unwrap(); |
| |
| let mut ret = Vec::new(); |
| get_differences(&against, &other, &mut ret); |
| assert!(ret.is_empty()); |
| get_differences(&other, &against, &mut ret); |
| assert_eq!(ret, vec![" Missing CSS variable `--b` in `:root`".to_owned()]); |
| } |
| |
| #[test] |
| fn test_weird_rule_value() { |
| let x = r#" |
| a[text=("a")] { |
| b: url({;}.png); |
| c: #fff |
| } |
| "#; |
| |
| let paths = load_css_paths(&x).unwrap(); |
| let p = paths.get("a[text=(\"a\")]"); |
| assert!(p.is_some()); |
| let p = p.unwrap(); |
| assert_eq!(p.rules.get("b"), Some(&"url({;}.png)".to_owned())); |
| assert_eq!(p.rules.get("c"), Some(&"#fff".to_owned())); |
| } |