diff options
| author | Laurenz <laurmaedje@gmail.com> | 2019-12-07 14:42:25 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2019-12-07 14:42:25 +0100 |
| commit | f364395e1d774456500ea61bb7b931f48a62ddfa (patch) | |
| tree | b4d66bd44c619d8ff93f36686c91752910fa4768 /tests/parse.rs | |
| parent | 1099330988da78c82c6e155fab88d81fb2f1d4c0 (diff) | |
Create parsing test harness ⚡
Diffstat (limited to 'tests/parse.rs')
| -rw-r--r-- | tests/parse.rs | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/tests/parse.rs b/tests/parse.rs new file mode 100644 index 00000000..a56059d7 --- /dev/null +++ b/tests/parse.rs @@ -0,0 +1,59 @@ +use typstc::syntax::*; + +use Token::{ + Space as S, Newline as N, LeftBracket as LB, + RightBracket as RB, Text as T, * +}; + +macro_rules! tokens { + ($($src:expr =>($line:expr)=> $tokens:expr)*) => ({ + #[allow(unused_mut)] + let mut cases = Vec::new(); + $(cases.push(($line, $src, $tokens.to_vec()));)* + cases + }); +} + +fn main() { + let tests = include!("cache/parsing.rs"); + + let mut errors = false; + for (file, cases) in tests.into_iter() { + print!("Testing: {}. ", file); + + let mut okay = 0; + let mut failed = 0; + + for (line, src, expected) in cases.into_iter() { + let found: Vec<_> = tokenize(src).map(Spanned::value).collect(); + + if found == expected { + okay += 1; + } else { + if failed == 0 { + println!(); + } + + println!(" - Case failed in file {}.rs in line {}.", file, line); + println!(" - Source: {:?}", src); + println!(" - Expected: {:?}", expected); + println!(" - Found: {:?}", found); + + failed += 1; + errors = true; + } + } + + print!("{} okay, {} failed.", okay, failed); + if failed == 0 { + print!(" ✔") + } + println!(); + } + + println!(); + + if errors { + std::process::exit(-1); + } +} |
