diff options
| author | gyoder <70408179+gyoder@users.noreply.github.com> | 2025-07-21 12:26:51 -0600 |
|---|---|---|
| committer | gyoder <70408179+gyoder@users.noreply.github.com> | 2025-07-21 12:26:51 -0600 |
| commit | a07d893e6e137cc3641312e95b191a018c8643db (patch) | |
| tree | 2c0d63496db50feaac996628d84bddef08bf0049 /htmlua-parser | |
| parent | 58bcf60567fafa5b63618eca2d12b0561eb58f1f (diff) | |
fixed parser bug
Diffstat (limited to 'htmlua-parser')
| -rw-r--r-- | htmlua-parser/src/helpers.rs | 5 | ||||
| -rw-r--r-- | htmlua-parser/src/render.rs | 23 | ||||
| -rw-r--r-- | htmlua-parser/tests/components/include_base.html | 9 |
3 files changed, 34 insertions, 3 deletions
diff --git a/htmlua-parser/src/helpers.rs b/htmlua-parser/src/helpers.rs index bd99f81..3db0443 100644 --- a/htmlua-parser/src/helpers.rs +++ b/htmlua-parser/src/helpers.rs @@ -6,9 +6,10 @@ use std::{ use anyhow::Result; use kuchikiki::NodeRef; -use markup5ever::{LocalName, Namespace, QualName}; +use markup5ever::{ns, LocalName, Namespace, namespace_url, QualName}; use tendril::TendrilSink; + pub fn read_doc_from_file(path: PathBuf) -> Result<NodeRef> { let mut file = File::open(path)?; let mut reader = BufReader::new(&mut file); @@ -26,7 +27,7 @@ pub fn read_doc_from_file(path: PathBuf) -> Result<NodeRef> { if is_whole_doc { Ok(kuchikiki::parse_html().one(page_string)) } else { - let ctx_name = QualName::new(None, Namespace::from("http://www.w3.org/1999/xhtml"), LocalName::from("div")); + let ctx_name = QualName::new(None, ns!(), LocalName::from("div")); Ok(kuchikiki::parse_fragment(ctx_name, Vec::new()).one(page_string)) } } diff --git a/htmlua-parser/src/render.rs b/htmlua-parser/src/render.rs index 7046db8..e141020 100644 --- a/htmlua-parser/src/render.rs +++ b/htmlua-parser/src/render.rs @@ -215,6 +215,7 @@ pub fn generate_footnotes(document: NodeRef) -> Result<NodeRef> { #[cfg(test)] mod tests { use httptest::{Expectation, ServerPool, matchers::*, responders::*}; + use markup5ever::{ns, namespace_url}; use super::*; @@ -346,7 +347,6 @@ mod tests { let document = kuchikiki::parse_html().one(page); let d = execute_lua(expand_template(document, &p, None).unwrap()).unwrap(); let text = d.select_first("span").unwrap().as_node().text_contents(); - println!("{}", d.to_string()); assert_eq!(text, "Test from Lua!\n"); assert!(d.select_first("lua").is_err()); let text = d.select_first("#inc1").unwrap().as_node().text_contents(); @@ -405,6 +405,27 @@ mod tests { } #[test] + fn include_base() { + let page = r#" + <include path="include_base.html"> + <exportelement class="t"><title>title_test</title></exportelement> + <exportelement class="b"><span id="tb">body_el</span></exportelement> + </include> + "#; + let mut p = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + p.push("tests/components"); + let ctx_name = QualName::new(None, ns!(html), LocalName::from("div")); + let document = kuchikiki::parse_fragment(ctx_name, Vec::new()).one(page); + let d = expand_template(document, &p, None).unwrap(); + let text = d.select_first("head").unwrap().as_node().select_first("title").unwrap().as_node().text_contents(); + assert_eq!(text, "title_test"); + let text = d.select_first("#tb").unwrap().as_node().text_contents(); + assert_eq!(text, "body_el"); + assert!(d.select_first("exportelement").is_err()); + assert!(d.select_first("includeelement").is_err()); + } + + #[test] fn footnotes() { let page = r" <!DOCTYPE html> diff --git a/htmlua-parser/tests/components/include_base.html b/htmlua-parser/tests/components/include_base.html new file mode 100644 index 0000000..fa86fe6 --- /dev/null +++ b/htmlua-parser/tests/components/include_base.html @@ -0,0 +1,9 @@ +<html> + <head> + <includeelement name="t"></includeelement> + </head> + <body> + <h1>Hello World</h1> + <includeelement name="b"></includeelement> + </body> +</html> |
