Refactor name-analysis tests.

This commit is contained in:
Jesse Brault 2025-05-19 20:22:13 -05:00
parent 0c2d9f8b2f
commit 02d6a16cf8

View File

@ -43,7 +43,11 @@ mod tests {
use pest::Parser;
use std::collections::HashMap;
fn assert_no_diagnostics(sources: HashMap<&str, &str>, symbol_table: &mut SymbolTable) {
fn assert_number_of_diagnostics(
sources: HashMap<&str, &str>,
symbol_table: &mut SymbolTable,
n_diagnostics: usize,
) {
let mut files = SimpleFiles::new();
let mut compilation_units = vec![];
@ -63,6 +67,8 @@ mod tests {
let diagnostics = analyze_names(&mut compilation_units, symbol_table);
assert_eq!(n_diagnostics, diagnostics.len());
if !diagnostics.is_empty() {
let writer = StandardStream::stderr(ColorChoice::Always);
let config = term::Config::default();
@ -72,7 +78,6 @@ mod tests {
}
eprintln!("{}", symbol_table);
panic!("Diagnostics was not empty!");
}
for compilation_unit in &compilation_units {
@ -80,6 +85,10 @@ mod tests {
}
}
fn assert_no_diagnostics(sources: HashMap<&str, &str>, symbol_table: &mut SymbolTable) {
assert_number_of_diagnostics(sources, symbol_table, 0);
}
#[test]
fn params_seen() {
let sources: HashMap<&str, &str> = HashMap::from([(
@ -130,4 +139,29 @@ mod tests {
add_std_core_symbols(&mut symbol_table).expect("Failed to add std::core symbols.");
assert_no_diagnostics(sources, &mut symbol_table);
}
#[test]
fn sees_duplicate_fn() {
let sources: HashMap<&str, &str> = HashMap::from([(
"main.dm",
indoc! {"
fn main(args: Array<String>) {}
fn main(args: Array<String>) {}
"},
)]);
assert_number_of_diagnostics(sources, &mut SymbolTable::new(), 1);
}
#[test]
fn symbol_shadows_import() {
let sources: HashMap<&str, &str> = HashMap::from([(
"main.dm",
indoc! {"
platform fn println(msg: Any) -> Void;
"}
)]);
let mut symbol_table = SymbolTable::new();
add_std_core_symbols(&mut symbol_table).expect("Failed to add std::core symbols.");
assert_no_diagnostics(sources, &mut symbol_table);
}
}