| 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("<!--") && s.ends_with("-->") |
| } |
| |
| #[test] |
| fn html_from_empty() { |
| let inserts = ["<p>hello</p>", "<p>kind</p>", "<p>hello</p>", "<p>world</p>"]; |
| let mut template = SortedTemplate::<Html>::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, "<p>hello</p><p>kind</p><p>world</p>"); |
| assert!(is_comment_html(end)); |
| assert!(!end.contains("\n")); |
| } |
| |
| #[test] |
| fn html_page() { |
| let inserts = ["<p>hello</p>", "<p>kind</p>", "<p>world</p>"]; |
| let before = "<html><head></head><body>"; |
| let after = "</body>"; |
| let mut template = SortedTemplate::<Html>::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::<Js>::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::<Js>::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::<Js>::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::<Js>::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::<Js>::from_before_after("[", "]"); |
| for insert in inserts { |
| template.append(insert.to_string()); |
| } |
| let template1 = format!("{template}"); |
| let mut template = SortedTemplate::<Js>::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 = ["<p>hello</p>", "<p>kind</p>", "<p>world</p>", "<p>kind</p>"]; |
| let before = "<html><head></head><body>"; |
| let after = "</body>"; |
| let mut template = SortedTemplate::<Html>::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::<Html>::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}<p>hello</p><p>kind</p><p>world</p>{after}")); |
| assert!(is_comment_html(end)); |
| } |
| |
| #[test] |
| fn blank_js() { |
| let inserts = ["1", "2", "3"]; |
| let template = SortedTemplate::<Js>::from_before_after("", ""); |
| let template = format!("{template}"); |
| let (t, _) = template.rsplit_once("\n").unwrap(); |
| assert_eq!(t, ""); |
| let mut template = SortedTemplate::<Js>::from_str(&template).unwrap(); |
| for insert in inserts { |
| template.append(insert.to_string()); |
| } |
| let template1 = format!("{template}"); |
| let mut template = SortedTemplate::<Js>::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)); |
| } |