parent
4f2b27f944
commit
8778976018
|
@ -367,13 +367,15 @@ where
|
|||
Transition(st).ok(XirfToken::Comment(sym, span))
|
||||
}
|
||||
|
||||
(PreRoot(_), tok @ XirToken::Open(..)) => {
|
||||
Self::parse_node(tok, stack)
|
||||
// Ignore whitespace before or after root.
|
||||
(st @ (PreRoot(_) | Done), XirToken::Text(sym, _))
|
||||
if is_whitespace(sym) =>
|
||||
{
|
||||
Transition(st).incomplete()
|
||||
}
|
||||
|
||||
// Ignore whitespace before root.
|
||||
(st @ PreRoot(_), XirToken::Text(sym, _)) if is_whitespace(sym) => {
|
||||
Transition(st).incomplete()
|
||||
(PreRoot(_), tok @ XirToken::Open(..)) => {
|
||||
Self::parse_node(tok, stack)
|
||||
}
|
||||
|
||||
(st @ PreRoot(_), tok) => {
|
||||
|
@ -419,7 +421,7 @@ where
|
|||
PreRoot(_) => write!(f, "expecting document root"),
|
||||
NodeExpected => write!(f, "expecting a node"),
|
||||
AttrExpected(sa) => Display::fmt(sa, f),
|
||||
Done => write!(f, "done parsing"),
|
||||
Done => write!(f, "done parsing document root"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -449,6 +449,34 @@ fn comment_before_or_after_root_ok() {
|
|||
);
|
||||
}
|
||||
|
||||
// Similar to above,
|
||||
// but with whitespace.
|
||||
#[test]
|
||||
fn whitespace_before_or_after_root_ok() {
|
||||
let name = "root";
|
||||
let ws = " ".unwrap_into();
|
||||
|
||||
let toks = [
|
||||
XirToken::Text(ws, S),
|
||||
xir_open(name, S2),
|
||||
xir_close_empty(S3),
|
||||
XirToken::Text(ws, S4),
|
||||
]
|
||||
.into_iter();
|
||||
|
||||
let sut = parse::<1, RefinedText>(toks);
|
||||
|
||||
assert_eq!(
|
||||
Ok(vec![
|
||||
Parsed::Incomplete,
|
||||
Parsed::Object(open(name, S2, Depth(0))),
|
||||
Parsed::Object(close_empty(S3, Depth(0))),
|
||||
Parsed::Incomplete,
|
||||
]),
|
||||
sut.collect(),
|
||||
);
|
||||
}
|
||||
|
||||
// But there must be no content at the end of the document after the closing
|
||||
// root node.
|
||||
// This does not test every applicable token;
|
||||
|
|
Loading…
Reference in New Issue