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() });
}
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]
fn goto_def_for_extern_crate() {
check(
@ -927,15 +934,10 @@ fn f() -> impl Iterator<Item$0 = u8> {}
}
#[test]
#[should_panic = "unresolved reference"]
fn unknown_assoc_ty() {
check(
check_unresolved(
r#"
trait Iterator {
type Item;
//^^^^
}
trait Iterator { type Item; }
fn f() -> impl Iterator<Invalid$0 = u8> {}
"#,
)

View file

@ -66,26 +66,12 @@ mod tests {
}
#[test]
#[should_panic]
fn flip_comma_before_punct() {
// 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
// declaration body.
check_assist_target(
flip_comma,
"pub enum Test { \
A,$0 \
}",
",",
);
check_assist_target(
flip_comma,
"pub struct Test { \
foo: usize,$0 \
}",
",",
);
check_assist_not_applicable(flip_comma, "pub enum Test { A,$0 }");
check_assist_not_applicable(flip_comma, "pub struct Test { foo: usize,$0 }");
}
#[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.
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