internal: don't use #[should_panic] for tests

This commit is contained in:
Aleksey Kladov 2021-04-13 12:20:54 +03:00
parent 06a633ff42
commit db2a989565
3 changed files with 22 additions and 24 deletions

View file

@ -110,6 +110,13 @@ mod tests {
assert_eq!(expected, FileRange { file_id: nav.file_id, range: nav.focus_or_full_range() }); assert_eq!(expected, FileRange { file_id: nav.file_id, range: nav.focus_or_full_range() });
} }
fn check_unresolved(ra_fixture: &str) {
let (analysis, position) = fixture::position(ra_fixture);
let navs = analysis.goto_definition(position).unwrap().expect("no definition found").info;
assert!(navs.is_empty(), "didn't expect this to resolve anywhere: {:?}", navs)
}
#[test] #[test]
fn goto_def_for_extern_crate() { fn goto_def_for_extern_crate() {
check( check(
@ -927,17 +934,12 @@ fn f() -> impl Iterator<Item$0 = u8> {}
} }
#[test] #[test]
#[should_panic = "unresolved reference"]
fn unknown_assoc_ty() { fn unknown_assoc_ty() {
check( check_unresolved(
r#" r#"
trait Iterator { trait Iterator { type Item; }
type Item;
//^^^^
}
fn f() -> impl Iterator<Invalid$0 = u8> {} fn f() -> impl Iterator<Invalid$0 = u8> {}
"#, "#,
) )
} }

View file

@ -66,26 +66,12 @@ mod tests {
} }
#[test] #[test]
#[should_panic]
fn flip_comma_before_punct() { fn flip_comma_before_punct() {
// See https://github.com/rust-analyzer/rust-analyzer/issues/1619 // See https://github.com/rust-analyzer/rust-analyzer/issues/1619
// "Flip comma" assist shouldn't be applicable to the last comma in enum or struct // "Flip comma" assist shouldn't be applicable to the last comma in enum or struct
// declaration body. // declaration body.
check_assist_target( check_assist_not_applicable(flip_comma, "pub enum Test { A,$0 }");
flip_comma, check_assist_not_applicable(flip_comma, "pub struct Test { foo: usize,$0 }");
"pub enum Test { \
A,$0 \
}",
",",
);
check_assist_target(
flip_comma,
"pub struct Test { \
foo: usize,$0 \
}",
",",
);
} }
#[test] #[test]

View file

@ -152,6 +152,16 @@ Do not reuse marks between several tests.
**Rationale:** marks provide an easy way to find the canonical test for each bit of code. **Rationale:** marks provide an easy way to find the canonical test for each bit of code.
This makes it much easier to understand. This makes it much easier to understand.
More than one mark per test / code branch doesn't add significantly to understanding.
## `#[should_panic]`
Do not use `#[should_panic]` tests.
Instead, explicitly check for `None`, `Err`, etc.
**Rationale:**a `#[should_panic]` is a tool for library authors, to makes sure that API does not fail silently, when misused.
`rust-analyzer` is not a library, we don't need to test for API misuse, and we have to handle any user input without panics.
Panic messages in the logs from the `#[should_panic]` tests are confusing.
## Function Preconditions ## Function Preconditions