#[cfg(test)]
mod tests {
use const_css_minify::{minify, minify_str};
#[test]
fn is_const() {
const RESULT: &str = minify_str!("#{color:#fff}");
assert_eq!(RESULT, "#{color:#fff}");
}
#[test]
fn finds_css_file() {
assert_eq!(minify!("./test.css"), "#{color:#fff}");
}
#[test]
fn empty_str() {
assert_eq!(minify_str!(""), "",);
}
#[test]
fn already_minified() {
assert_eq!(minify_str!("#{color:#fff}"), "#{color:#fff}",);
}
#[test]
fn unneeded_whitespace() {
assert_eq!(minify_str!("# {color:#fff}"), "#{color:#fff}",);
}
#[test]
fn required_whitespace() {
assert_eq!(minify_str!("#{margin:1px 1px}"), "#{margin:1px 1px}",)
}
#[test]
fn trailing_semicolon() {
assert_eq!(minify_str!("#{margin:1px;}"), "#{margin:1px}",);
}
#[test]
fn comments() {
assert_eq!(minify_str!("#{margin:1px /*1px*/}"), "#{margin:1px}",);
}
#[test]
fn quotes() {
assert_eq!(
minify_str!(r#"#{font-family:"Times New Roman", "Courier New"}"#),
r#"#{font-family:"Times New Roman","Courier New"}"#,
);
assert_eq!(
minify_str!("#{font-family:\"Times New Roman\", \"Courier New\"}"),
"#{font-family:\"Times New Roman\",\"Courier New\"}",
);
assert_eq!(
minify_str!("#{font-family:'Times New Roman', 'Courier New'}"),
"#{font-family:'Times New Roman','Courier New'}",
);
assert_eq!(
minify_str!("#{font-family:'/*comment*/'}"),
"#{font-family:'/*comment*/'}"
);
}
#[test]
fn unclosed_comments_quotes() {
assert_eq!(minify_str!("\""), "\"");
assert_eq!(minify_str!("'"), "'");
assert_eq!(minify_str!("/*"), "");
}
#[test]
fn pseudo_selectors() {
assert_eq!(minify_str!("div :hover ::after{}"), "div :hover ::after{}");
}
#[test]
fn nested_classes() {
assert_eq!(
minify_str!("div { span {margin:1px}}"),
"div{span{margin:1px}}"
);
}
#[test]
fn hexcode_colors() {
assert_eq!(minify_str!("#{color:#000}"), "#{color:#000}");
assert_eq!(minify_str!("#{color:#abc}"), "#{color:#abc}");
assert_eq!(minify_str!("#{color:#DEFG}"), "#{color:#DEFG}");
assert_eq!(minify_str!("#{color:#aabbcc}"), "#{color:#abc}");
assert_eq!(minify_str!("#{color:#aabbccdd}"), "#{color:#abcd}");
assert_eq!(minify_str!("#{color:#aabbb}"), "#{color:#aabbb}");
assert_eq!(minify_str!("#{color:#DDEEFFF}"), "#{color:#DDEEFFF}");
assert_eq!(minify_str!("#{color:#aabbccddd}"), "#{color:#aabbccddd}");
}
#[test]
fn hslfunc_legacy_style() {
assert_eq!(minify_str!("#{color:hsl(0, 0%, 0%)}"), "#{color:#000}");
assert_eq!(minify_str!("#{color:hsl(0, 0%, 100%)}"), "#{color:#fff}");
assert_eq!(minify_str!("#{color:hsl(0, 50%, 50%)}"), "#{color:#bf4040}");
assert_eq!(
minify_str!("#{color:hsl(60, 50%, 50%)}"),
"#{color:#bfbf40}"
);
assert_eq!(
minify_str!("#{color:hsl(120, 50%, 50%)}"),
"#{color:#40bf40}"
);
assert_eq!(
minify_str!("#{color:hsl(180, 50%, 50%)}"),
"#{color:#40bfbf}"
);
assert_eq!(
minify_str!("#{color:hsl(240, 50%, 50%)}"),
"#{color:#4040bf}"
);
assert_eq!(
minify_str!("#{color:hsl(300, 50%, 50%)}"),
"#{color:#bf40bf}"
);
assert_eq!(
minify_str!("#{color:hsl(360, 50%, 50%)}"),
"#{color:#bf4040}"
);
assert_eq!(
minify_str!("#{color:hsla(30, 100%, 40%, 0.2)}"),
"#{color:#c603}"
);
assert_eq!(
minify_str!("#{color:hsla(120, 100%, 25%, 0.5)}"),
"#{color:#00800080}"
);
}
#[test]
fn hslfunc_modern_style() {
assert_eq!(minify_str!("#{color:hsl(180 100 60)}"), "#{color:#3ff}");
assert_eq!(
minify_str!("#{color:hsl(180 80 60 / 0.6)}"),
"#{color:#47ebeb99}"
);
}
#[test]
fn rgbfunc_legacy_style() {
assert_eq!(minify_str!("#{color:rgb(0, 0, 0)}"), "#{color:#000}");
assert_eq!(minify_str!("#{color:rgb(255,255,254)}"), "#{color:#fffffe}");
assert_eq!(minify_str!("#{color:rgb(255,255,255)}"), "#{color:#fff}");
assert_eq!(minify_str!("#{color:rgb(0%, 0%, 0%)}"), "#{color:#000}");
assert_eq!(minify_str!("#{color:rgb(1%, 2%, 3%)}"), "#{color:#030508}");
assert_eq!(minify_str!("#{color:rgb(4%, 5%, 6%)}"), "#{color:#0a0d0f}");
assert_eq!(minify_str!("#{color:rgb(7%, 8%, 9%)}"), "#{color:#121417}");
assert_eq!(minify_str!("#{color:rgb(20%, 20%, 20%)}"), "#{color:#333}");
assert_eq!(minify_str!("#{color:rgb(40%, 40%, 40%)}"), "#{color:#666}");
assert_eq!(
minify_str!("#{color:rgb(50%, 50%, 50%)}"),
"#{color:#808080}"
);
assert_eq!(minify_str!("#{color:rgb(60%, 60%, 60%)}"), "#{color:#999}");
assert_eq!(minify_str!("#{color:rgb(80%, 80%, 80%)}"), "#{color:#ccc}");
assert_eq!(
minify_str!("#{color:rgb(100%, 100%, 100%)}"),
"#{color:#fff}"
);
assert_eq!(
minify_str!("#{color:rgba(0%, 0%, 0%, 0)}"),
"#{color:#0000}"
);
assert_eq!(
minify_str!("#{color:rgba(100%, 100%, 100%, 0.5)}"),
"#{color:#ffffff80}"
);
assert_eq!(
minify_str!("#{color:rgba(100%, 100%, 100%, 1)}"),
"#{color:#fff}"
);
assert_eq!(
minify_str!("#{color:rgba(80%, 80%, 80%, 0.8)}"),
"#{color:#cccc}"
);
}
#[test]
fn rgbfunc_modern_style() {
assert_eq!(minify_str!("#{color:rgb(0 0 0)}"), "#{color:#000}");
assert_eq!(minify_str!("#{color:rgba(0 0 0)}"), "#{color:#000}");
assert_eq!(minify_str!("#{color:rgb(0 100% 255)}"), "#{color:#0ff}");
assert_eq!(
minify_str!("#{color:rgb(0 0 0 / 0.5)}"),
"#{color:#00000080}"
);
}
#[test]
fn shakedown() {
assert_eq!(
minify!("./w3_source.css").to_string() + "\n",
include_str!("./w3_expected.css").to_string()
);
}
}