-
Notifications
You must be signed in to change notification settings - Fork 13.6k
Closed
Labels
E-easyCall for participation: Easy difficulty. Experience needed to fix: Not much. Good first issue.Call for participation: Easy difficulty. Experience needed to fix: Not much. Good first issue.E-mentorCall for participation: This issue has a mentor. Use #t-compiler/help on Zulip for discussion.Call for participation: This issue has a mentor. Use #t-compiler/help on Zulip for discussion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.
Description
Per this comment, we want to alter the design of unit tests with non-()
type. The new design is:
#[should_panic]
can only be applied to tests with()
return type and continues to have the same meaning.- For non-should-panic tests, the return type
T
defines the error result using theTermination
trait.
Achieving these changes should be relatively straight-forward. Basically the only thing we have to do is to make it an error to apply #[should_panic]
unless the test has ()
. Currently we check that the test has the correct signature here:
Lines 330 to 355 in 9afed64
fn has_test_signature(cx: &TestCtxt, i: &ast::Item) -> HasTestSignature { | |
match i.node { | |
ast::ItemKind::Fn(ref decl, _, _, _, ref generics, _) => { | |
// If the termination trait is active, the compiler will check that the output | |
// type implements the `Termination` trait as `libtest` enforces that. | |
let output_matches = if cx.features.termination_trait_test { | |
true | |
} else { | |
let no_output = match decl.output { | |
ast::FunctionRetTy::Default(..) => true, | |
ast::FunctionRetTy::Ty(ref t) if t.node == ast::TyKind::Tup(vec![]) => true, | |
_ => false | |
}; | |
no_output && !generics.is_parameterized() | |
}; | |
if decl.inputs.is_empty() && output_matches { | |
Yes | |
} else { | |
No | |
} | |
} | |
_ => NotEvenAFunction, | |
} | |
} |
In any case, we just have to extend that function to also check whether there is a should_panic
attribute -- if so, we can report an error, sort of like this:
Line 365 in 9afed64
diag.span_err(i.span, "functions used as tests must have signature fn() -> ()"); |
Metadata
Metadata
Assignees
Labels
E-easyCall for participation: Easy difficulty. Experience needed to fix: Not much. Good first issue.Call for participation: Easy difficulty. Experience needed to fix: Not much. Good first issue.E-mentorCall for participation: This issue has a mentor. Use #t-compiler/help on Zulip for discussion.Call for participation: This issue has a mentor. Use #t-compiler/help on Zulip for discussion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.