use rbatis_codegen::codegen::loader_html::{Element, load_html, as_element};
use std::collections::HashMap;
use html_parser::Dom;
#[test]
fn test_element_display() {
let text_element = Element {
tag: "".to_string(),
data: "这是一个文本节点".to_string(),
attrs: HashMap::new(),
childs: vec![],
};
assert_eq!(text_element.to_string(), "这是一个文本节点");
let mut attrs = HashMap::new();
attrs.insert("id".to_string(), "test_id".to_string());
attrs.insert("class".to_string(), "test_class".to_string());
let tag_element = Element {
tag: "div".to_string(),
data: "".to_string(),
attrs,
childs: vec![
Element {
tag: "".to_string(),
data: "子文本".to_string(),
attrs: HashMap::new(),
childs: vec![],
}
],
};
let display = tag_element.to_string();
assert!(display.contains("<div"));
assert!(display.contains("id=\"test_id\""));
assert!(display.contains("class=\"test_class\""));
assert!(display.contains(">子文本</div>"));
}
#[test]
fn test_load_html() {
let html = "<div>测试文本</div>";
let elements = load_html(html).unwrap();
assert_eq!(elements.len(), 1);
assert_eq!(elements[0].tag, "div");
assert_eq!(elements[0].childs.len(), 1);
assert_eq!(elements[0].childs[0].data, "测试文本");
let html = "<break>测试break标签</break>";
let elements = load_html(html).unwrap();
assert_eq!(elements.len(), 1);
assert_eq!(elements[0].tag, "break");
assert_eq!(elements[0].childs.len(), 1);
assert_eq!(elements[0].childs[0].data, "测试break标签");
let html = "<div id=\"test_id\">带id属性的div</div>";
let elements = load_html(html).unwrap();
assert_eq!(elements.len(), 1);
assert_eq!(elements[0].tag, "div");
assert!(elements[0].attrs.contains_key("id"));
assert_eq!(elements[0].attrs.get("id").unwrap(), "test_id");
assert_eq!(elements[0].childs.len(), 1);
assert_eq!(elements[0].childs[0].data, "带id属性的div");
}
#[test]
fn test_element_child_strings() {
let element = Element {
tag: "div".to_string(),
data: "".to_string(),
attrs: HashMap::new(),
childs: vec![
Element {
tag: "".to_string(),
data: "文本节点1".to_string(),
attrs: HashMap::new(),
childs: vec![],
},
Element {
tag: "p".to_string(),
data: "".to_string(),
attrs: HashMap::new(),
childs: vec![
Element {
tag: "".to_string(),
data: "文本节点2".to_string(),
attrs: HashMap::new(),
childs: vec![],
}
],
},
],
};
let strings = element.child_strings();
assert_eq!(strings.len(), 2);
assert_eq!(strings[0], "文本节点1");
assert_eq!(strings[1], "文本节点2");
let string_capacity = element.child_string_cup();
assert_eq!(string_capacity, "文本节点1".len() + "文本节点2".len());
}
#[test]
fn test_as_element() {
let html = "<div>文本<p>段落</p></div>";
let dom = Dom::parse(html).unwrap();
let elements = as_element(&dom.children);
assert_eq!(elements.len(), 1);
assert_eq!(elements[0].tag, "div");
assert_eq!(elements[0].childs.len(), 2);
assert_eq!(elements[0].childs[0].data, "文本");
assert_eq!(elements[0].childs[1].tag, "p");
assert_eq!(elements[0].childs[1].childs[0].data, "段落");
}