-
Notifications
You must be signed in to change notification settings - Fork 13.9k
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
Tdefines the error result using theTerminationtrait.
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.