diff options
Diffstat (limited to 'tests/test_spans.rs')
-rw-r--r-- | tests/test_spans.rs | 46 |
1 files changed, 12 insertions, 34 deletions
diff --git a/tests/test_spans.rs b/tests/test_spans.rs index f2cdc5f..64cc250 100644 --- a/tests/test_spans.rs +++ b/tests/test_spans.rs @@ -221,12 +221,7 @@ fn comment_data_span() { let mut annotated = String::new(); for case in cases { let labeler = |parser: Parser| { - let Token::Comment(comment) = parser - .flatten() - .filter(|t| !matches!(t, Token::Error { .. })) - .next() - .unwrap() - else { + let Token::Comment(comment) = parser.flatten().next().unwrap() else { panic!("expected comment"); }; vec![(comment.data_span(), "")] @@ -265,12 +260,7 @@ fn comment_data_span() { "###); for (idx, case) in cases.iter().enumerate() { - let Token::Comment(comment) = parser(*case) - .flatten() - .filter(|t| !matches!(t, Token::Error { .. })) - .next() - .unwrap() - else { + let Token::Comment(comment) = parser(*case).flatten().next().unwrap() else { panic!("expected comment"); }; assert_eq!(case[comment.data_span()], comment.data, "case {idx}"); @@ -287,12 +277,7 @@ fn doctype_span() { let mut annotated = String::new(); for case in cases { let labeler = |parser: Parser| { - let Token::Doctype(doctype) = parser - .flatten() - .filter(|t| !matches!(t, Token::Error { .. })) - .next() - .unwrap() - else { + let Token::Doctype(doctype) = parser.flatten().next().unwrap() else { panic!("expected doctype"); }; vec![(doctype.span, "")] @@ -316,12 +301,7 @@ fn doctype_id_spans() { let mut annotated = String::new(); for case in cases { let labeler = |parser: Parser| { - let Token::Doctype(doctype) = parser - .flatten() - .filter(|t| !matches!(t, Token::Error { .. })) - .next() - .unwrap() - else { + let Token::Doctype(doctype) = parser.flatten().next().unwrap() else { panic!("expected doctype"); }; @@ -351,10 +331,11 @@ fn doctype_id_spans() { } fn annotate_errors(html: &'static str) -> String { - for token in parser(html).flatten() { - let Token::Error { span, .. } = token else { - continue; - }; + let mut parser = parser(html); + for _ in parser.by_ref() {} + let errors: Vec<_> = parser.emitter_mut().drain_errors().collect(); + + for (_, span) in errors { if span.start == span.end { if span.start != html.len() { panic!("empty error spans are only allowed at the very end of the source (for eof errors)"); @@ -365,13 +346,10 @@ fn annotate_errors(html: &'static str) -> String { } } - let labeler = |parser: Parser| { + let labeler = |mut parser: Parser| { let mut labels = Vec::new(); - for token in parser.flatten() { - let Token::Error { error, span } = token else { - continue; - }; - + for _ in parser.by_ref() {} + for (error, span) in parser.emitter_mut().drain_errors() { labels.push((span, error.code())); } labels |