You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

137 lines
2.4 KiB

use crate::lexer::*;
use crate::parser::*;
#[test]
fn test_parse_empty_function() {
let raw = "fn main() {}";
let tokens = tokenize(raw);
let tree = parse(tokens, Some(raw.to_string()));
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, Some(raw.to_string()));
assert!(tree.is_ok())
}
#[test]
fn test_parse_missing_semicolon() {
let raw = "
fn main() {
return 1
}
";
let tokens = tokenize(raw);
let tree = parse(tokens, Some(raw.to_string()));
assert!(tree.is_err())
}
#[test]
fn test_parse_no_function_context() {
let raw = "
let x = 1;
";
let tokens = tokenize(raw);
let tree = parse(tokens, Some(raw.to_string()));
assert!(tree.is_err())
}
#[test]
fn test_parse_multiple_functions() {
let raw = "
fn foo() {
let x = 2;
return x;
}
fn bar() {
let y = 5;
return y;
}
";
let tokens = tokenize(raw);
let tree = parse(tokens, Some(raw.to_string()));
assert!(tree.is_ok())
}
#[test]
fn test_parse_variable_declaration() {
let raw = "
fn main() {
let x = 1;
return x;
}
";
let tokens = tokenize(raw);
let tree = parse(tokens, Some(raw.to_string()));
assert!(tree.is_ok())
}
#[test]
fn test_parse_function_with_args() {
let raw = "
fn main(foo) {
return foo;
}
";
let tokens = tokenize(raw);
let tree = parse(tokens, Some(raw.to_string()));
assert!(tree.is_ok())
}
#[test]
fn test_parse_function_call() {
let raw = "
fn main(foo) {
foo();
}
fn foo() {
foo(2);
}
";
let tokens = tokenize(raw);
let tree = parse(tokens, Some(raw.to_string()));
assert!(tree.is_ok())
}
#[test]
#[ignore]
fn test_parse_return_function_call() {
let raw = "
fn main() {
return fib();
}
fn fib() {
return fib(2);
}
";
let tokens = tokenize(raw);
let tree = parse(tokens, Some(raw.to_string()));
assert!(tree.is_ok())
}
#[test]
#[ignore]
fn test_parse_function_call_multiple_arguments() {
let raw = "
fn main() {
fib(1, 2, 3);
}
fn fib() {
return 2;
}
";
let tokens = tokenize(raw);
let tree = parse(tokens, Some(raw.to_string()));
assert!(tree.is_ok())
}