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