summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMartin Fischer <martin@push-f.com>2021-11-30 10:56:59 +0100
committerMartin Fischer <martin@push-f.com>2021-11-30 11:22:35 +0100
commit915530c02029f8bd4444930ed949e14f09afab03 (patch)
tree6f58b9728386dc5c1709137bc0a250640a7ce572 /tests
parent414e5838618123cb00216a7426b898aab88ee45a (diff)
report spans for errors
Diffstat (limited to 'tests')
-rw-r--r--tests/files/test.html4
-rw-r--r--tests/files/test.out38
-rw-r--r--tests/spans.rs10
3 files changed, 34 insertions, 18 deletions
diff --git a/tests/files/test.html b/tests/files/test.html
index 0dcbdbf..14493b7 100644
--- a/tests/files/test.html
+++ b/tests/files/test.html
@@ -5,3 +5,7 @@ Here is a tag: <strong >very cool</strong>
Tags can have attributes: <div id = foo >...</div>
Attribute values can be quoted: <input name = 'age' type = "number">
+
+This is malformed < test
+
+Characters can be escaped but don't forget the semicolon: &#182
diff --git a/tests/files/test.out b/tests/files/test.out
index 7127ebc..f5acb3e 100644
--- a/tests/files/test.out
+++ b/tests/files/test.out
@@ -1,17 +1,23 @@
note:
- ┌─ test.html:3:17
- │
-3 │ Here is a tag: <strong >very cool</strong>
- │ ^^^^^^ ^^^^^^ EndTag
- │ │
- │ StartTag
-4 │
-5 │ Tags can have attributes: <div id = foo >...</div>
- │ ^^ ^^^ attribute value
- │ │
- │ attribute name
-6 │
-7 │ Attribute values can be quoted: <input name = 'age' type = "number">
- │ ^^^ ^^^^^^ in double quotes
- │ │
- │ in single quotes
+ ┌─ test.html:3:17
+ │
+ 3 │ Here is a tag: <strong >very cool</strong>
+ │ ^^^^^^ ^^^^^^ EndTag
+ │ │
+ │ StartTag
+ 4 │
+ 5 │ Tags can have attributes: <div id = foo >...</div>
+ │ ^^ ^^^ attribute value
+ │ │
+ │ attribute name
+ 6 │
+ 7 │ Attribute values can be quoted: <input name = 'age' type = "number">
+ │ ^^^ ^^^^^^ in double quotes
+ │ │
+ │ in single quotes
+ 8 │
+ 9 │ This is malformed < test
+ │ ^ unexpected character: saw ' ' in state TagOpen
+10 │
+11 │ Characters can be escaped but don't forget the semicolon: &#182
+ │ ^ semicolon missing after character reference
diff --git a/tests/spans.rs b/tests/spans.rs
index bfa42f6..5615853 100644
--- a/tests/spans.rs
+++ b/tests/spans.rs
@@ -1,5 +1,5 @@
#![cfg(feature = "spans")]
-use std::include_str;
+use std::{include_str, ops::Range};
use codespan_reporting::{
self,
@@ -8,18 +8,21 @@ use codespan_reporting::{
term::{self, termcolor::Buffer},
};
use html5tokenizer::{
- BufferQueue, Tag, Token, TokenSink, TokenSinkResult, Tokenizer, TokenizerOpts,
+ error::Error, BufferQueue, Tag, Token, TokenSink, TokenSinkResult, Tokenizer, TokenizerOpts,
};
#[derive(Default)]
struct TagSink {
tags: Vec<Tag>,
+ errors: Vec<(Error, Range<usize>)>,
}
impl TokenSink for TagSink {
fn process_token(&mut self, token: Token, _line_number: u64) -> TokenSinkResult {
if let Token::TagToken(tag) = token {
self.tags.push(tag);
+ } else if let Token::ParseError { error, span } = token {
+ self.errors.push((error, span));
}
TokenSinkResult::Continue
}
@@ -61,6 +64,9 @@ fn test() {
Label::primary(file_id, tags[4].attrs[1].value_span.clone())
.with_message("in double quotes"),
);
+ for (error, span) in tok.sink.errors {
+ labels.push(Label::primary(file_id, span).with_message(format!("{}", error)));
+ }
let diagnostic = Diagnostic::note().with_labels(labels);
let mut writer = Buffer::no_color();