diff options
Diffstat (limited to 'tests/test_spans.rs')
-rw-r--r-- | tests/test_spans.rs | 78 |
1 files changed, 48 insertions, 30 deletions
diff --git a/tests/test_spans.rs b/tests/test_spans.rs index 71a6c4b..0e95be0 100644 --- a/tests/test_spans.rs +++ b/tests/test_spans.rs @@ -10,7 +10,8 @@ use codespan_reporting::{ use html5tokenizer::{ offset::PosTrackingReader, reader::{IntoReader, Reader}, - NaiveParser, Token, TracingEmitter, + trace::Trace, + NaiveParser, Token, }; use insta::assert_snapshot; use similar_asserts::assert_eq; @@ -31,7 +32,7 @@ where PosTrackingReader::new( Box::new(reader.into_reader()) as Box<dyn Reader<Error = Infallible>> ), - TracingEmitter::default(), + html5tokenizer::TracingEmitter::default(), ) } @@ -76,9 +77,9 @@ fn start_tag_span() { let html = "<x> <xyz> <xyz > <xyz/>"; let labeler = |parser: Parser| { let mut labels = Vec::new(); - for token in parser.flatten() { - if let Token::StartTag(tag) = token { - labels.push((tag.span, "")); + for (_, trace) in parser.flatten() { + if let Trace::StartTag(trace) = trace { + labels.push((trace.span, "")); } } labels @@ -94,9 +95,9 @@ fn end_tag_span() { let html = "</x> </xyz> </xyz > </xyz/>"; let labeler = |parser: Parser| { let mut labels = Vec::new(); - for token in parser.flatten() { - if let Token::EndTag(tag) = token { - labels.push((tag.span, "")); + for (_, trace) in parser.flatten() { + if let Trace::EndTag(trace) = trace { + labels.push((trace.span, "")); } } labels @@ -112,9 +113,9 @@ fn start_tag_name_span() { let html = "<x> <xyz> <xyz > <xyz/>"; let labeler = |parser: Parser| { let mut labels = Vec::new(); - for token in parser.flatten() { - if let Token::StartTag(tag) = token { - labels.push((tag.name_span, "")); + for (_, trace) in parser.flatten() { + if let Trace::StartTag(trace) = trace { + labels.push((trace.name_span, "")); } } labels @@ -130,9 +131,9 @@ fn end_tag_name_span() { let html = "</x> </xyz> </xyz > </xyz/>"; let labeler = |parser: Parser| { let mut labels = Vec::new(); - for token in parser.flatten() { - if let Token::EndTag(tag) = token { - labels.push((tag.name_span, "")); + for (_, trace) in parser.flatten() { + if let Trace::EndTag(trace) = trace { + labels.push((trace.name_span, "")); } } labels @@ -148,11 +149,15 @@ fn attribute_name_span() { let html = "<test x xyz y=VAL xy=VAL z = VAL yzx = VAL>"; let labeler = |parser: Parser| { let mut labels = Vec::new(); - let Token::StartTag(tag) = parser.flatten().next().unwrap() else { + let (Token::StartTag(tag), Trace::StartTag(trace)) = parser.flatten().next().unwrap() + else { panic!("expected start tag") }; for attr in &tag.attributes { - labels.push((attr.name_span(), "")); + labels.push(( + trace.attribute_traces[attr.trace_idx().unwrap()].name_span(), + "", + )); } labels }; @@ -167,11 +172,17 @@ fn attribute_value_span() { let html = "<test x=unquoted y = unquoted z='single-quoted' zz=\"double-quoted\" empty=''>"; let labeler = |parser: Parser| { let mut labels = Vec::new(); - let Token::StartTag(tag) = parser.flatten().next().unwrap() else { + let (Token::StartTag(tag), Trace::StartTag(trace)) = parser.flatten().next().unwrap() + else { panic!("expected start tag") }; for attr in &tag.attributes { - labels.push((attr.value_span().unwrap(), "")); + labels.push(( + trace.attribute_traces[attr.trace_idx().unwrap()] + .value_span() + .unwrap(), + "", + )); } labels }; @@ -186,11 +197,17 @@ fn attribute_value_with_char_ref() { let html = "<test x=& y='&' z=\"&\">"; let labeler = |parser: Parser| { let mut labels = Vec::new(); - let Token::StartTag(tag) = parser.flatten().next().unwrap() else { + let (Token::StartTag(tag), Trace::StartTag(trace)) = parser.flatten().next().unwrap() + else { panic!("expected start tag") }; for attr in &tag.attributes { - labels.push((attr.value_span().unwrap(), "")); + labels.push(( + trace.attribute_traces[attr.trace_idx().unwrap()] + .value_span() + .unwrap(), + "", + )); } labels }; @@ -224,10 +241,10 @@ fn comment_data_span() { let mut annotated = String::new(); for case in cases { let labeler = |parser: Parser| { - let Token::Comment(comment) = parser.flatten().next().unwrap() else { + let (_, Trace::Comment(comment)) = parser.flatten().next().unwrap() else { panic!("expected comment"); }; - vec![(comment.data_span(), "")] + vec![(comment.data_span, "")] }; annotated.push_str(&test_and_annotate(case, labeler)); @@ -263,10 +280,11 @@ fn comment_data_span() { "###); for (idx, case) in cases.iter().enumerate() { - let Token::Comment(comment) = parser(*case).flatten().next().unwrap() else { + let (Token::Comment(data), Trace::Comment(trace)) = parser(*case).flatten().next().unwrap() + else { panic!("expected comment"); }; - assert_eq!(case[comment.data_span()], comment.data, "case {idx}"); + assert_eq!(case[trace.data_span], data, "case {idx}"); } } @@ -280,10 +298,10 @@ fn doctype_span() { let mut annotated = String::new(); for case in cases { let labeler = |parser: Parser| { - let Token::Doctype(doctype) = parser.flatten().next().unwrap() else { + let (_, Trace::Doctype(trace)) = parser.flatten().next().unwrap() else { panic!("expected doctype"); }; - vec![(doctype.span, "")] + vec![(trace.span(), "")] }; annotated.push_str(&test_and_annotate(case, labeler)); } @@ -304,18 +322,18 @@ fn doctype_id_spans() { let mut annotated = String::new(); for case in cases { let labeler = |parser: Parser| { - let Token::Doctype(doctype) = parser.flatten().next().unwrap() else { + let (_, Trace::Doctype(trace)) = parser.flatten().next().unwrap() else { panic!("expected doctype"); }; let mut labels = Vec::new(); - if let Some(name_span) = doctype.name_span() { + if let Some(name_span) = trace.name_span() { labels.push((name_span, "name")); } - if let Some(public_id_span) = doctype.public_id_span() { + if let Some(public_id_span) = trace.public_id_span() { labels.push((public_id_span, "public id")); } - if let Some(system_id_span) = doctype.system_id_span() { + if let Some(system_id_span) = trace.system_id_span() { labels.push((system_id_span, "system id")); } labels |