use crate::tests::eval; use crate::tests::{eval_with_css_min, eval_with_js_min}; #[test] fn test_collapse_whitespace() { eval(b" \n ", b" "); // Tag names should be case insensitive. eval(b" \n ", b" "); eval(b" \n ", b" "); } #[test] fn test_collapse_and_trim_whitespace() { eval(b"", b""); eval(b"", b""); eval(b"", b""); // Tag names should be case insensitive. eval(b"", b""); } #[test] fn test_collapse_destroy_whole_and_trim_whitespace() { eval(b"", b""); eval(b"", b""); eval(b"", b""); eval( b"", b"", ); eval( b" ", b"", ); // Tag names should be case insensitive. eval(b"", b""); } #[test] fn test_no_whitespace_minification() { eval(b"
   \n  \t   
", b"
   \n  \t   
"); eval( b"", b"", ); // Tag names should be case insensitive. eval(b"
   \n  \t   
", b"
   \n  \t   
"); eval( b"
    1    2     
", b"
    1    2     
", ); eval( b"
    1 
\n
2
", b"
    1 
\n
2
", ); eval( b"
    1 
\n
2
", b"
    1 
\n
2
", ); eval( br#"
fn main() {
  println!("Hello, world!");
  loop {
    println!("Hello, world!");
  }
}
"#, br#"
fn main() {
  println!("Hello, world!");
  loop {
    println!("Hello, world!");
  }
}
"#, ); } #[test] fn test_parsing_omitted_closing_tag() { eval(b"", b""); eval(b" \n", b""); eval(b" \n", b""); eval( b"

Foo

", b"

Foo

", ); } #[test] fn test_self_closing_svg_tag_whitespace_removal() { eval(b"", b""); eval(b"", b""); eval(b"", b""); eval(b"", b""); eval(b"", b""); eval(b"", b""); } #[test] fn test_parsing_with_omitted_tags() { eval(b"", b""); eval(b"", b""); eval(b"1
", b"1
"); eval(b"
", b"
"); eval(b"", b""); eval(b"", b""); // Tag names should be case insensitive. eval(b"", b""); } #[test] fn test_removal_of_optional_tags() { eval( b"
  • 1
  • 2
  • 3
", b"
  • 1
  • 2
  • 3
", ); eval(b"", b""); eval( b"1
", b"1
", ); eval(b"
", b"
"); eval( br#" "#, b"", ); // Tag names should be case insensitive. eval(b"", b""); } #[test] fn test_removal_of_optional_closing_p_tag() { eval(b"

", b"

"); eval(b"

", b"

"); eval(b"

", b"

"); eval( b"

", b"

", ); } #[test] fn test_attr_double_quoted_value_minification() { eval(b"", b""); eval(b"", b""); eval(br#""#, br#""#); eval(br#""#, br#""#); eval(b"", b""); eval(b"", b""); } #[test] fn test_attr_single_quoted_value_minification() { eval(b"", b""); eval(b"", b""); eval(b"", b"a\">"); eval( b"", b"", ); } #[test] fn test_attr_unquoted_value_minification() { eval(b"", b""); eval(b"", b""); eval(b"", b""); eval(b"", b""); eval(b"", br#""#); eval(b"", br#""#); eval(b"", b""); } #[test] fn test_class_attr_value_minification() { eval(b"", b""); eval( b"", b"", ); eval(b"", b""); eval(b"", b""); eval(b"", b""); eval(b"", b""); eval(b"", b""); eval(b"", b""); eval(b"", b""); // Attribute names should be case insensitive. eval(b"", b""); } #[test] fn test_d_attr_value_minification() { eval(b"", b""); eval( b"", b"", ); eval( b"", b"", ); eval( b"", b"", ); eval( b"", b"", ); eval( b"", b"", ); eval( b"", b"", ); eval( b"", b"", ); eval(b"", b""); // Attribute names should be case insensitive. eval(b"", b""); } #[test] fn test_boolean_attr_value_removal() { eval(b"", b""); eval(b"", b""); eval(b"", b""); eval(b"", b""); eval(b"", b""); eval(b"", b""); eval(b"", b""); // Attribute names should be case insensitive. eval(b"", b""); } #[test] fn test_empty_attr_removal() { eval(b"
", b"
"); eval(b"
", b"
"); eval(b"
", b"
"); eval(b"
", b"
"); eval(b"
", b"
"); } #[test] fn test_default_attr_value_removal() { eval(b"", b""); eval(b"", b""); eval(b"", b""); // Attribute names should be case insensitive. eval(b"", b""); } #[test] fn test_script_type_attr_value_removal() { eval( b"", b"", ); eval( b"", b"", ); eval( b"", b"", ); eval( b"", b"", ); // Tag and attribute names should be case insensitive. eval( b"", b"", ); } #[test] fn test_empty_attr_value_removal() { eval(b"
", b"
"); eval(b"
", b"
"); eval(b"
", b"
"); eval(b"
", b"
"); eval(b"
", b"
"); } #[test] fn test_hexadecimal_entity_decoding() { eval(b".", b"."); eval(b"/", b"/"); eval(b"/", b"/"); eval(b"�", b"\0"); eval(b"0", b"0"); eval(b"0", b"0"); eval(b"0", b"0"); eval(b"0", b"0"); eval(b"0", b"0"); eval(b"0", b"0"); eval(b"ᅑ", b"\xe1\x85\x91"); eval(b"�", b"\xef\xbf\xbd"); eval( b"�", b"\xef\xbf\xbd", ); } #[test] fn test_decimal_entity_decoding() { eval(b"0", b"0"); eval(b"0", b"0"); eval(b"0", b"0"); eval(b"0", b"0"); eval(b"0", b"0"); eval(b"0", b"0"); eval(b"ᅑ", b"\xe1\x85\x91"); eval(b"�", b"\xef\xbf\xbd"); eval( b"�", b"\xef\xbf\xbd", ); } #[test] fn test_named_entity_decoding() { eval(b">", b">"); eval(b">", b">"); eval(b"&", b"&"); eval(b"&", b"&"); eval(b"&xxxyyyzzz", b"&xxxyyyzzz"); eval(b"&ere", b"&ere"); eval(b"They & Co.", b"They & Co."); eval(b"if (this && that)", b"if (this && that)"); // These entities decode to longer UTF-8 sequences, so we keep them encoded. eval(b"≪⃒", b"≪⃒"); eval(b"≪⃒abc", b"≪⃒abc"); eval(b"≫⃒", b"≫⃒"); // Named entities not ending with ';' in attr values are not decoded if immediately // followed by an alphanumeric or `=` character. (See parser for more details.) eval( br#""#, br#""#, ); eval( br#""#, br#""#, ); eval( br#""#, br#""#, ); } #[test] fn test_unintentional_entity_prevention() { eval(b"&amp", b"&amp"); eval(b"&", b"&"); eval(b"&amp", b"&amp"); eval(b"&", b"&"); eval(b"&", b"&"); eval(b"&", b"&"); eval(b"&amp", b"&amp"); eval(b"&amp", b"&amp"); eval(b"&", b"&"); eval(b"&", b"&"); eval(b"&", b"&"); eval(b"&", b"&"); eval(b"&lt", b"&lt"); eval(b"&lt", b"&lt"); eval(b"<", b"<"); eval(b"<", b"<"); eval(b"&lt", b"&lt"); eval(b"<", b"<"); eval(b"&am&amp", b"&am&amp"); eval(b"&am&", b"&am&"); eval(b"&≪⃒", b"&≪⃒"); eval(b"&am≪⃒", b"&am≪⃒"); eval(b"&am≪⃒a", b"&am≪⃒a"); eval(b"&am&nLt", b"&am&nLt"); } #[test] fn test_left_chevron_in_content() { eval(b"
<
", b"
<
"); eval(b"
< 
", b"
< 
"); eval(b"
 < 
", b"
 < 
"); eval(b"
 <a 
", b"
 <a 
"); eval(b"
 <a 
", b"
 <a 
"); eval(b"
 <a 
", b"
 <a 
"); eval(b"
 <a 
", b"
 <a 
"); eval(b"
 <? 
", b"
 <? 
"); eval(b"
 <? 
", b"
 <? 
"); eval(b"
 <? 
", b"
 <? 
"); eval(b"
 <? 
", b"
 <? 
"); eval(b"
 </ 
", b"
 </ 
"); eval(b"
 <! 
", b"
 <! 
"); eval(b"<", b"<"); eval(b"<", b"<"); eval(b"<;", b"<;"); eval(b"<;", b"<;"); eval(b"<;", b"<;"); eval(b"<", b"<"); eval(b"<", b"<"); eval(b"<;", b"<;"); eval(b"<;", b"<;"); eval(b"<;", b"<;"); eval(b"<a", b"<a"); eval(b"<a", b"<a"); eval(b"<a;", b"<a;"); eval(b"<a;", b"<a;"); eval(b"<a;", b"<a;"); eval(b"<a;;", b"<a;;"); eval(b"<!", b"<!"); eval(b"<&", b"<&"); eval(b"</", b"</"); eval(b"<?", b"<?"); eval(b"<@", b"<@"); } #[test] fn test_comments_removal() { eval( b"
a   b
", b"
a   b
", ); eval(b"&amp", b"&"); eval( b"", b"", ); } #[test] fn test_processing_instructions() { eval(b"> ?>", b"> ?>"); eval(b"avg", b"avg"); } #[test] fn test_js_minification() { eval_with_js_min(b"", b""); eval_with_js_min( b"", b"", ); eval_with_js_min( br#" "#, b"", ); eval_with_js_min( b"", b"", ); eval_with_js_min( br#" "#, b"", ); } /* TODO Reenable once unintentional script closing tag escaping is implemented in minify-js. #[test] fn test_js_minification_unintentional_closing_tag() { eval_with_js_min( br#""#, br#""#, ); eval_with_js_min( br#""#, br#""#, ); eval_with_js_min( br#""#, br#""#, ); eval_with_js_min( br#""#, br#""#, ); } */ #[test] fn test_style_element_minification() { // `", b"", ); } #[test] fn test_self_closing_svg() { eval( b"
", b"
", ); eval( b"
", b"", ); }