checker: add error for _test.v file without test_ functions
parent
974cac2037
commit
30e0c478d7
|
@ -157,11 +157,12 @@ pub fn (mut c Checker) check_files(ast_files []ast.File) {
|
||||||
}
|
}
|
||||||
if has_main_mod_file && !has_main_fn && files_from_main_module.len > 0 {
|
if has_main_mod_file && !has_main_fn && files_from_main_module.len > 0 {
|
||||||
if c.pref.is_script && !c.pref.is_test {
|
if c.pref.is_script && !c.pref.is_test {
|
||||||
mut first_main_file := files_from_main_module[0]
|
// files_from_main_module contain preludes at the start
|
||||||
first_main_file.stmts << ast.FnDecl{
|
mut the_main_file := files_from_main_module.last()
|
||||||
|
the_main_file.stmts << ast.FnDecl{
|
||||||
name: 'main.main'
|
name: 'main.main'
|
||||||
mod: 'main'
|
mod: 'main'
|
||||||
file: first_main_file.path
|
file: the_main_file.path
|
||||||
return_type: table.void_type
|
return_type: table.void_type
|
||||||
scope: &ast.Scope{
|
scope: &ast.Scope{
|
||||||
parent: 0
|
parent: 0
|
||||||
|
@ -171,6 +172,8 @@ pub fn (mut c Checker) check_files(ast_files []ast.File) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
c.timers.start('checker_post_process_generic_fns')
|
c.timers.start('checker_post_process_generic_fns')
|
||||||
|
last_file := c.file
|
||||||
|
last_mod := c.mod
|
||||||
// post process generic functions. must be done after all files have been
|
// post process generic functions. must be done after all files have been
|
||||||
// checked, to eunsure all generic calls are processed as this information
|
// checked, to eunsure all generic calls are processed as this information
|
||||||
// is needed when the generic type is auto inferred from the call argument
|
// is needed when the generic type is auto inferred from the call argument
|
||||||
|
@ -182,12 +185,29 @@ pub fn (mut c Checker) check_files(ast_files []ast.File) {
|
||||||
c.post_process_generic_fns()
|
c.post_process_generic_fns()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// restore the original c.file && c.mod after post processing
|
||||||
|
c.file = last_file
|
||||||
|
c.mod = last_mod
|
||||||
c.timers.show('checker_post_process_generic_fns')
|
c.timers.show('checker_post_process_generic_fns')
|
||||||
//
|
//
|
||||||
c.timers.start('checker_verify_all_vweb_routes')
|
c.timers.start('checker_verify_all_vweb_routes')
|
||||||
c.verify_all_vweb_routes()
|
c.verify_all_vweb_routes()
|
||||||
c.timers.show('checker_verify_all_vweb_routes')
|
c.timers.show('checker_verify_all_vweb_routes')
|
||||||
//
|
//
|
||||||
|
if c.pref.is_test {
|
||||||
|
mut n_test_fns := 0
|
||||||
|
for _, f in c.table.fns {
|
||||||
|
if f.name.contains('.test_') {
|
||||||
|
n_test_fns++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if n_test_fns == 0 {
|
||||||
|
c.add_error_detail('The name of a test function in V, should start with `test_`.')
|
||||||
|
c.add_error_detail('The test function should take 0 parameters, and no return type. Example:')
|
||||||
|
c.add_error_detail('fn test_xyz(){ assert 2 + 2 == 4 }')
|
||||||
|
c.error('a _test.v file should have *at least* one `test_` function', token.Position{})
|
||||||
|
}
|
||||||
|
}
|
||||||
// Make sure fn main is defined in non lib builds
|
// Make sure fn main is defined in non lib builds
|
||||||
if c.pref.build_mode == .build_module || c.pref.is_test {
|
if c.pref.build_mode == .build_module || c.pref.is_test {
|
||||||
return
|
return
|
||||||
|
|
Loading…
Reference in New Issue