Browse Source

Add parser tests

github-actions
Garrit Franke 3 years ago
parent
commit
55653ff0f3
  1. 5
      src/parser/mod.rs
  2. 56
      src/parser/tests.rs

5
src/parser/mod.rs

@ -6,6 +6,9 @@ use std::vec::IntoIter;
mod node_type;
#[cfg(test)]
mod tests;
pub struct Parser {
tokens: Peekable<IntoIter<Token>>,
peeked: Vec<Token>,
@ -108,7 +111,7 @@ impl Parser {
let globals = Vec::new();
while self.has_more() {
functions.push(self.parse_function().expect("Failed to parse function"))
functions.push(self.parse_function()?)
}
Ok(Program {

56
src/parser/tests.rs

@ -0,0 +1,56 @@
use crate::lexer::*;
use crate::parser::*;
#[test]
fn test_parse_empty_function() {
let tokens = tokenize("fn main() {}");
let tree = parse(tokens);
assert!(tree.is_ok())
}
#[test]
fn test_parse_function_with_return() {
let raw = "
fn main() {
return 1;
}
";
let tokens = tokenize(raw);
let tree = parse(tokens);
assert!(tree.is_ok())
}
#[test]
fn test_parse_missing_semicolon() {
let raw = "
fn main() {
return 1
}
";
let tokens = tokenize(raw);
let tree = parse(tokens);
assert!(tree.is_err())
}
#[test]
fn test_parse_no_function_context() {
let raw = "
let x = 1;
";
let tokens = tokenize(raw);
let tree = parse(tokens);
assert!(tree.is_err())
}
#[test]
fn test_parse_variable_declaration() {
let raw = "
fn main() {
let x = 1;
return x;
}
";
let tokens = tokenize(raw);
let tree = parse(tokens);
assert!(tree.is_ok())
}
Loading…
Cancel
Save