diff --git a/compiler/main.v b/compiler/main.v index 6342d326de..19a3c01274 100644 --- a/compiler/main.v +++ b/compiler/main.v @@ -429,8 +429,15 @@ string _STR_TMP(const char *fmt, ...) { exit(1) } } - // Generate `main` which calls every single test function else if v.pref.is_test { + if v.table.main_exists() { + cerror('test files cannot have function `main`') + } + // make sure there's at least on test function + if !v.table.has_at_least_one_test_fn() { + cerror('test files need to have at least one test function') + } + // Generate `main` which calls every single test function cgen.genln('int main() { init_consts();') for _, f in v.table.fns { if f.name.starts_with('test_') { diff --git a/compiler/table.v b/compiler/table.v index fcaa65da00..3f4d5dc75e 100644 --- a/compiler/table.v +++ b/compiler/table.v @@ -672,6 +672,15 @@ fn (t &Table) main_exists() bool { return false } +fn (t &Table) has_at_least_one_test_fn() bool { + for _, f in t.fns { + if f.name.starts_with('test_') { + return true + } + } + return false +} + fn (t &Table) find_const(name string) ?Var { //println('find const l=$t.consts.len') for c in t.consts { diff --git a/compiler/tests/module_test.v b/compiler/tests/module_test.v index be3fcf201b..e568a10daf 100644 --- a/compiler/tests/module_test.v +++ b/compiler/tests/module_test.v @@ -8,7 +8,7 @@ import ( crypto.sha512 as s5 ) -pub fn main() { +fn test_import() { assert os.SUCCESS == os.SUCCESS && t.MonthDays[0] == t.MonthDays[0] && s2.Size == s2.Size &&