diff --git a/src/html.rs b/src/html.rs index d34f599..76730ab 100644 --- a/src/html.rs +++ b/src/html.rs @@ -390,7 +390,10 @@ mod tests { #[test] fn test_is_icon() { assert_eq!(is_icon("icon"), true); + assert_eq!(is_icon("Shortcut Icon"), true); + assert_eq!(is_icon("ICON"), true); assert_eq!(is_icon("stylesheet"), false); + assert_eq!(is_icon(""), false); } #[test] @@ -407,4 +410,122 @@ mod tests { assert_eq!(has_protocol(""), false); assert_eq!(has_protocol("MAILTO:somebody@somewhere.com?subject=hello"), true); } + + #[test] + fn test_get_parent_node_name() { + let html = "

"; + let dom = html_to_dom(&html); + let mut count = 0; + + fn test_walk(node: &Handle, i: &mut i8) { + *i += 1; + + match &node.data { + NodeData::Document => { + for child in node.children.borrow().iter() { + test_walk(child, &mut *i); + } + } + NodeData::Doctype { .. } => (), + NodeData::Text { .. } => (), + NodeData::Comment { .. } => (), + NodeData::Element { ref name, attrs: _, .. } => { + let node_name = name.local.as_ref().to_string(); + let parent_node_name = get_parent_node_name(node); + if node_name == "head" || node_name == "body" { + assert_eq!(parent_node_name, "html"); + } else if node_name == "div" { + assert_eq!(parent_node_name, "body"); + } else if node_name == "p" { + assert_eq!(parent_node_name, "div"); + } + + println!("{}", node_name); + + for child in node.children.borrow().iter() { + test_walk(child, &mut *i); + } + } + NodeData::ProcessingInstruction { .. } => unreachable!() + }; + } + + test_walk(&dom.document, &mut count); + + assert_eq!(count, 7); + } + + #[test] + fn test_walk_and_embed_assets() { + let html = "

"; + let dom = html_to_dom(&html); + let url = "http://localhost"; + + walk_and_embed_assets(&url, &dom.document, true, true, "", true, true); + + let mut buf: Vec = Vec::new(); + serialize(&mut buf, &dom.document, SerializeOpts::default()).unwrap(); + + assert_eq!( + buf.iter().map(|&c| c as char).collect::(), + "

" + ); + } + + #[test] + fn test_walk_and_embed_assets_iframe() { + let html = "

"; + let dom = html_to_dom(&html); + let url = "http://localhost"; + + walk_and_embed_assets(&url, &dom.document, true, true, "", true, true); + + let mut buf: Vec = Vec::new(); + serialize(&mut buf, &dom.document, SerializeOpts::default()).unwrap(); + + assert_eq!( + buf.iter().map(|&c| c as char).collect::(), + "

" + ); + } + + #[test] + fn test_walk_and_embed_assets_img() { + let html = "
"; + let dom = html_to_dom(&html); + let url = "http://localhost"; + + walk_and_embed_assets(&url, &dom.document, true, true, "", true, true); + + let mut buf: Vec = Vec::new(); + serialize(&mut buf, &dom.document, SerializeOpts::default()).unwrap(); + + assert_eq!( + buf.iter().map(|&c| c as char).collect::(), + "
\ + \ +
" + ); + } + + #[test] + fn test_walk_and_embed_assets_js() { + let html = "
\ +
"; + let dom = html_to_dom(&html); + let url = "http://localhost"; + + walk_and_embed_assets(&url, &dom.document, true, true, "", true, true); + + let mut buf: Vec = Vec::new(); + serialize(&mut buf, &dom.document, SerializeOpts::default()).unwrap(); + + assert_eq!( + buf.iter().map(|&c| c as char).collect::(), + "
\ +
" + ); + } }