| 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())); | |
| } |