use std::str::FromStr; use super::super::sorted_template::*; fn is_comment_js(s: &str) -> bool { s.starts_with("//") } fn is_comment_html(s: &str) -> bool { // not correct but good enough for these tests s.starts_with("") } #[test] fn html_from_empty() { let inserts = ["

hello

", "

kind

", "

hello

", "

world

"]; let mut template = SortedTemplate::::from_before_after("", ""); for insert in inserts { template.append(insert.to_string()); } let template = format!("{template}"); let (template, end) = template.rsplit_once("\n").unwrap(); assert_eq!(template, "

hello

kind

world

"); assert!(is_comment_html(end)); assert!(!end.contains("\n")); } #[test] fn html_page() { let inserts = ["

hello

", "

kind

", "

world

"]; let before = ""; let after = ""; let mut template = SortedTemplate::::from_before_after(before, after); for insert in inserts { template.append(insert.to_string()); } let template = format!("{template}"); let (template, end) = template.rsplit_once("\n").unwrap(); assert_eq!(template, format!("{before}{}{after}", inserts.join(""))); assert!(is_comment_html(end)); assert!(!end.contains("\n")); } #[test] fn js_from_empty() { let inserts = ["1", "2", "2", "2", "3", "1"]; let mut template = SortedTemplate::::from_before_after("", ""); for insert in inserts { template.append(insert.to_string()); } let template = format!("{template}"); let (template, end) = template.rsplit_once("\n").unwrap(); assert_eq!(template, "1,2,3"); assert!(is_comment_js(end)); assert!(!end.contains("\n")); } #[test] fn js_empty_array() { let template = SortedTemplate::::from_before_after("[", "]"); let template = format!("{template}"); let (template, end) = template.rsplit_once("\n").unwrap(); assert_eq!(template, format!("[]")); assert!(is_comment_js(end)); assert!(!end.contains("\n")); } #[test] fn js_number_array() { let inserts = ["1", "2", "3"]; let mut template = SortedTemplate::::from_before_after("[", "]"); for insert in inserts { template.append(insert.to_string()); } let template = format!("{template}"); let (template, end) = template.rsplit_once("\n").unwrap(); assert_eq!(template, format!("[1,2,3]")); assert!(is_comment_js(end)); assert!(!end.contains("\n")); } #[test] fn magic_js_number_array() { let inserts = ["1", "1"]; let mut template = SortedTemplate::::from_template("[#]", "#").unwrap(); for insert in inserts { template.append(insert.to_string()); } let template = format!("{template}"); let (template, end) = template.rsplit_once("\n").unwrap(); assert_eq!(template, format!("[1]")); assert!(is_comment_js(end)); assert!(!end.contains("\n")); } #[test] fn round_trip_js() { let inserts = ["1", "2", "3"]; let mut template = SortedTemplate::::from_before_after("[", "]"); for insert in inserts { template.append(insert.to_string()); } let template1 = format!("{template}"); let mut template = SortedTemplate::::from_str(&template1).unwrap(); assert_eq!(template1, format!("{template}")); template.append("4".to_string()); let template = format!("{template}"); let (template, end) = template.rsplit_once("\n").unwrap(); assert_eq!(template, "[1,2,3,4]"); assert!(is_comment_js(end)); } #[test] fn round_trip_html() { let inserts = ["

hello

", "

kind

", "

world

", "

kind

"]; let before = ""; let after = ""; let mut template = SortedTemplate::::from_before_after(before, after); template.append(inserts[0].to_string()); template.append(inserts[1].to_string()); let template = format!("{template}"); let mut template = SortedTemplate::::from_str(&template).unwrap(); template.append(inserts[2].to_string()); let template = format!("{template}"); let (template, end) = template.rsplit_once("\n").unwrap(); assert_eq!(template, format!("{before}

hello

kind

world

{after}")); assert!(is_comment_html(end)); } #[test] fn blank_js() { let inserts = ["1", "2", "3"]; let template = SortedTemplate::::from_before_after("", ""); let template = format!("{template}"); let (t, _) = template.rsplit_once("\n").unwrap(); assert_eq!(t, ""); let mut template = SortedTemplate::::from_str(&template).unwrap(); for insert in inserts { template.append(insert.to_string()); } let template1 = format!("{template}"); let mut template = SortedTemplate::::from_str(&template1).unwrap(); assert_eq!(template1, format!("{template}")); template.append("4".to_string()); let template = format!("{template}"); let (template, end) = template.rsplit_once("\n").unwrap(); assert_eq!(template, "1,2,3,4"); assert!(is_comment_js(end)); }