use std::collections::HashMap;
use crate::ast::{AttrVal, ElementClosingTag, NodeData};
use crate::common::spec::tag::ns::Namespace;
use crate::common::spec::tag::EMPTY_SLICE;
use crate::parse::element::{parse_element, parse_tag, ParsedTag};
use crate::parse::Code;
fn val(v: &[u8]) -> AttrVal {
AttrVal {
value: v.to_vec(),
quote: None,
}
}
#[test]
fn test_parse_tag() {
let mut code = Code::new(
br###""###,
);
let tag = parse_tag(&mut code);
assert_eq!(
tag,
ParsedTag {
attributes: {
let mut map = HashMap::, AttrVal>::new();
map.insert(b"type".to_vec(), val(b"password"));
map.insert(b"\"a\"".to_vec(), val(b" b "));
map.insert(b":cd".to_vec(), val(b""));
map.insert(b"e".to_vec(), val(b""));
map.insert(b"=fg".to_vec(), val(b"/\\h"));
map.insert(b"i".to_vec(), val(b""));
map.insert(b"j".to_vec(), val(b""));
map.insert(b"k".to_vec(), val(b""));
map.insert(b"l".to_vec(), val(b""));
map.insert(b"m".to_vec(), val(b"n=o"));
map.insert(b"q".to_vec(), val(b"=\\r/s/"));
map.insert(b"t]".to_vec(), val(b"/u"));
map.insert(b"w".to_vec(), val(b"//"));
map
},
name: b"input".to_vec(),
self_closing: false,
}
);
}
#[test]
fn test_parse_element() {
let mut code = Code::new(br#""#);
let elem = parse_element(&mut code, Namespace::Html, EMPTY_SLICE);
assert_eq!(
elem,
NodeData::Element {
attributes: {
let mut map = HashMap::, AttrVal>::new();
map.insert(b"b".to_vec(), val(br#"\"c\""#));
map
},
children: vec![],
closing_tag: ElementClosingTag::Present,
name: b"a".to_vec(),
namespace: Namespace::Html,
next_sibling_element_name: Vec::new(),
}
);
}