Skip to content

Commit

Permalink
Add test for test function signature verification.
Browse files Browse the repository at this point in the history
  • Loading branch information
Lukas Markeffsky committed Jun 6, 2023
1 parent 774f782 commit 5049743
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 0 deletions.
31 changes: 31 additions & 0 deletions tests/ui/test-attrs/test-function-signature.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// compile-flags: --test

#[test]
fn foo() -> Result<(), ()> {
Ok(())
}

#[test]
fn bar() -> i32 { //~ ERROR the trait bound `i32: Termination` is not satisfied
0
}

#[test]
fn baz(val: i32) {} //~ ERROR functions used as tests can not have any arguments

#[test]
fn lifetime_generic<'a>() -> Result<(), &'a str> {
Err("coerce me to any lifetime")
}

#[test]
fn type_generic<T>() {} //~ ERROR functions used as tests can not have any non-lifetime generic parameters

#[test]
fn const_generic<const N: usize>() {} //~ ERROR functions used as tests can not have any non-lifetime generic parameters

// Regression test for <https://github.com/rust-lang/rust/issues/112360>. This used to ICE.
fn nested() {
#[test]
fn foo(arg: ()) {} //~ ERROR functions used as tests can not have any arguments
}
39 changes: 39 additions & 0 deletions tests/ui/test-attrs/test-function-signature.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
error: functions used as tests can not have any arguments
--> $DIR/test-function-signature.rs:14:1
|
LL | fn baz(val: i32) {}
| ^^^^^^^^^^^^^^^^^^^

error: functions used as tests can not have any non-lifetime generic parameters
--> $DIR/test-function-signature.rs:22:1
|
LL | fn type_generic<T>() {}
| ^^^^^^^^^^^^^^^^^^^^^^^

error: functions used as tests can not have any non-lifetime generic parameters
--> $DIR/test-function-signature.rs:25:1
|
LL | fn const_generic<const N: usize>() {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: functions used as tests can not have any arguments
--> $DIR/test-function-signature.rs:30:5
|
LL | fn foo(arg: ()) {}
| ^^^^^^^^^^^^^^^^^^

error[E0277]: the trait bound `i32: Termination` is not satisfied
--> $DIR/test-function-signature.rs:9:13
|
LL | #[test]
| ------- in this procedural macro expansion
LL | fn bar() -> i32 {
| ^^^ the trait `Termination` is not implemented for `i32`
|
note: required by a bound in `assert_test_result`
--> $SRC_DIR/test/src/lib.rs:LL:COL
= note: this error originates in the attribute macro `test` (in Nightly builds, run with -Z macro-backtrace for more info)

error: aborting due to 5 previous errors

For more information about this error, try `rustc --explain E0277`.

0 comments on commit 5049743

Please sign in to comment.