mirror of
https://github.com/erg-lang/erg.git
synced 2025-07-24 13:34:52 +00:00
128 lines
3 KiB
Rust
128 lines
3 KiB
Rust
use erg_common::config::{ErgConfig, Input};
|
|
use erg_common::error::MultiErrorDisplay;
|
|
use erg_common::spawn::exec_new_thread;
|
|
use erg_common::traits::{Runnable, Stream};
|
|
|
|
use erg_parser::error::ParserRunnerErrors;
|
|
use erg_parser::lex::Lexer;
|
|
use erg_parser::ParserRunner;
|
|
|
|
#[test]
|
|
fn parse_args() -> Result<(), ()> {
|
|
expect_success("tests/args.er")
|
|
}
|
|
|
|
#[test]
|
|
fn parse_containers() -> Result<(), ()> {
|
|
expect_success("tests/containers.er")
|
|
}
|
|
|
|
#[test]
|
|
fn parse_dependent() -> Result<(), ()> {
|
|
expect_success("tests/dependent.er")
|
|
}
|
|
|
|
#[test]
|
|
fn parse_fib() -> Result<(), ()> {
|
|
expect_success("tests/fib.er")
|
|
}
|
|
|
|
#[test]
|
|
fn parse_hello_world() -> Result<(), ()> {
|
|
expect_success("tests/hello_world.er")
|
|
}
|
|
|
|
#[test]
|
|
fn parse_simple_if() -> Result<(), ()> {
|
|
expect_success("tests/simple_if.er")
|
|
}
|
|
|
|
#[test]
|
|
fn parse_stream() -> Result<(), ()> {
|
|
expect_success("tests/stream.er")
|
|
}
|
|
|
|
#[test]
|
|
fn parse_test1_basic_syntax() -> Result<(), ()> {
|
|
expect_success("tests/test1_basic_syntax.er")
|
|
}
|
|
|
|
#[test]
|
|
fn parse_test2_advanced_syntax() -> Result<(), ()> {
|
|
expect_success("tests/test2_advanced_syntax.er")
|
|
}
|
|
|
|
#[test]
|
|
fn parse_stack() -> Result<(), ()> {
|
|
expect_failure("tests/stack.er", 2)
|
|
}
|
|
|
|
#[test]
|
|
fn parse_str_literal() -> Result<(), ()> {
|
|
expect_failure("tests/failed_str_lit.er", 2)
|
|
}
|
|
|
|
#[test]
|
|
fn exec_invalid_chunk_prs_err() -> Result<(), ()> {
|
|
expect_failure("tests/invalid_chunk.er", 62)
|
|
}
|
|
|
|
#[test]
|
|
fn expect_failure_collections_err() -> Result<(), ()> {
|
|
expect_failure("tests/invalid_collections.er", 30)
|
|
}
|
|
|
|
#[test]
|
|
fn expect_failure_class_def_err() -> Result<(), ()> {
|
|
expect_failure("tests/invalid_class_definition.er", 6)
|
|
}
|
|
|
|
fn _parse_test_from_code(file_path: &'static str) -> Result<(), ParserRunnerErrors> {
|
|
let input = Input::file(file_path.into());
|
|
let cfg = ErgConfig {
|
|
input: input.clone(),
|
|
py_server_timeout: 100,
|
|
..ErgConfig::default()
|
|
};
|
|
let lexer = Lexer::new(input.clone());
|
|
let mut parser = ParserRunner::new(cfg);
|
|
match parser.parse_token_stream(
|
|
lexer
|
|
.lex()
|
|
.map_err(|errs| ParserRunnerErrors::convert(&input, errs))?,
|
|
) {
|
|
Ok(module) => {
|
|
println!("{module}");
|
|
Ok(())
|
|
}
|
|
Err(e) => {
|
|
e.fmt_all_stderr();
|
|
Err(e)
|
|
}
|
|
}
|
|
}
|
|
|
|
fn parse_test_from_code(file_path: &'static str) -> Result<(), ParserRunnerErrors> {
|
|
exec_new_thread(move || _parse_test_from_code(file_path), file_path)
|
|
}
|
|
|
|
fn expect_success(file_path: &'static str) -> Result<(), ()> {
|
|
match parse_test_from_code(file_path) {
|
|
Ok(_) => Ok(()),
|
|
Err(_) => Err(()),
|
|
}
|
|
}
|
|
|
|
fn expect_failure(file_path: &'static str, errs_len: usize) -> Result<(), ()> {
|
|
match parse_test_from_code(file_path) {
|
|
Ok(_) => Err(()),
|
|
Err(errs) => {
|
|
if errs.len() == errs_len {
|
|
Ok(())
|
|
} else {
|
|
println!("err: error length is not {errs_len} but {}", errs.len());
|
|
Err(())
|
|
}
|
|
}
|
|
}
|
|
}
|