diff options
Diffstat (limited to 'src/tools/rust-analyzer/crates/ide-completion/src/tests/predicate.rs')
-rw-r--r-- | src/tools/rust-analyzer/crates/ide-completion/src/tests/predicate.rs | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/src/tools/rust-analyzer/crates/ide-completion/src/tests/predicate.rs b/src/tools/rust-analyzer/crates/ide-completion/src/tests/predicate.rs new file mode 100644 index 000000000..a8676e2f2 --- /dev/null +++ b/src/tools/rust-analyzer/crates/ide-completion/src/tests/predicate.rs @@ -0,0 +1,131 @@ +//! Completion tests for predicates and bounds. +use expect_test::{expect, Expect}; + +use crate::tests::{completion_list, BASE_ITEMS_FIXTURE}; + +fn check(ra_fixture: &str, expect: Expect) { + let actual = completion_list(&format!("{}\n{}", BASE_ITEMS_FIXTURE, ra_fixture)); + expect.assert_eq(&actual) +} + +#[test] +fn predicate_start() { + // FIXME: `for` kw + check( + r#" +struct Foo<'lt, T, const C: usize> where $0 {} +"#, + expect![[r#" + en Enum + ma makro!(…) macro_rules! makro + md module + st Foo<…> + st Record + st Tuple + st Unit + tt Trait + un Union + bt u32 + kw crate:: + kw self:: + "#]], + ); +} + +#[test] +fn bound_for_type_pred() { + check( + r#" +struct Foo<'lt, T, const C: usize> where T: $0 {} +"#, + expect![[r#" + ma makro!(…) macro_rules! makro + md module + tt Trait + kw crate:: + kw self:: + "#]], + ); +} + +#[test] +fn bound_for_lifetime_pred() { + // FIXME: should only show lifetimes here, that is we shouldn't get any completions here when not typing + // a `'` + check( + r#" +struct Foo<'lt, T, const C: usize> where 'lt: $0 {} +"#, + expect![[r#" + ma makro!(…) macro_rules! makro + md module + tt Trait + kw crate:: + kw self:: + "#]], + ); +} + +#[test] +fn bound_for_for_pred() { + check( + r#" +struct Foo<'lt, T, const C: usize> where for<'a> T: $0 {} +"#, + expect![[r#" + ma makro!(…) macro_rules! makro + md module + tt Trait + kw crate:: + kw self:: + "#]], + ); +} + +#[test] +fn param_list_for_for_pred() { + check( + r#" +struct Foo<'lt, T, const C: usize> where for<'a> $0 {} +"#, + expect![[r#" + en Enum + ma makro!(…) macro_rules! makro + md module + st Foo<…> + st Record + st Tuple + st Unit + tt Trait + un Union + bt u32 + kw crate:: + kw self:: + "#]], + ); +} + +#[test] +fn pred_on_fn_in_impl() { + check( + r#" +impl Record { + fn method(self) where $0 {} +} +"#, + expect![[r#" + en Enum + ma makro!(…) macro_rules! makro + md module + sp Self + st Record + st Tuple + st Unit + tt Trait + un Union + bt u32 + kw crate:: + kw self:: + "#]], + ); +} |