This crate allows you to write parser's tests like follows:
rust
let input = "#( a b #items x y )*";
let spans = " ^ ^ ^----^ ^ ^ ";
let expected = [
Rule::token,
Rule::token,
Rule::interpolate,
Rule::token,
Rule::token,
];
Highlight each token with ^
, ^^
or ^---^
to indicate it's span.
Any parser can be used, as long as you implement TestToken
trait for it's output.
For example:
```rust struct TestToken { start: usize, end: usize, rule: Rule, }
impl parser_test::Token for TestToken { type Rule = Rule;
fn start(&self) -> usize {
self.start
}
fn end(&self) -> usize {
self.end
}
fn rule(&self) -> Self::Rule {
self.rule
}
} ```
So far this crate is used to test pest parsers:
rust
let mut output = Lexer::parse(Rule::interpolate_repetition, input).unwrap();
let output = output.next().unwrap().into_inner().map(|t| {
let span = t.as_span();
TestToken {
start: span.start(),
end: span.end() - 1,
rule: t.as_rule()
}
});
assert!(parser_test::test(output, expected, spans));