checker: report error for test functions that have parameters (#12500)

pull/12503/head
zakuro 2021-11-18 14:33:28 +09:00 committed by GitHub
parent 3b612899bf
commit 26fbf1885d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 22 additions and 9 deletions

View File

@ -8298,7 +8298,7 @@ fn (mut c Checker) fn_decl(mut node ast.FnDecl) {
}
}
// TODO c.pref.is_vet
if node.language == .v && !node.is_method && node.params.len == 0 && node.is_test {
if node.language == .v && !node.is_method && node.is_test {
if !c.pref.is_test {
// simple heuristic
for st in node.stmts {
@ -8309,6 +8309,10 @@ fn (mut c Checker) fn_decl(mut node ast.FnDecl) {
}
}
}
if node.params.len != 0 {
c.error('test functions should take 0 parameters', node.pos)
}
if node.return_type != ast.void_type_idx
&& node.return_type.clear_flag(.optional) != ast.void_type_idx {
c.error('test functions should either return nothing at all, or be marked to return `?`',

View File

@ -1,7 +0,0 @@
vlib/v/checker/tests/test_functions_should_not_return_test.vv:9:1: error: test functions should either return nothing at all, or be marked to return `?`
7 |
8 | // should be disallowed:
9 | fn test_returning_int() int {
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~
10 |
11 | }

View File

@ -0,0 +1,13 @@
vlib/v/checker/tests/test_functions_wrong_signature_test.vv:9:1: error: test functions should either return nothing at all, or be marked to return `?`
7 |
8 | // should be disallowed:
9 | fn test_returning_int() int {
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~
10 | }
11 |
vlib/v/checker/tests/test_functions_wrong_signature_test.vv:19:1: error: test functions should take 0 parameters
17 |
18 | // should be disallowed:
19 | fn test_take_parameters(v int) {
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
20 | }

View File

@ -7,7 +7,6 @@ fn abc() int {
// should be disallowed:
fn test_returning_int() int {
}
// NB: this is allowed explicitly now, to allow for shorter tests
@ -15,3 +14,7 @@ fn test_returning_int() int {
fn test_returning_opt() ? {
assert true
}
// should be disallowed:
fn test_take_parameters(v int) {
}