123 lines
2.7 KiB
Rust

//! Completion tests for predicates and bounds.
use expect_test::{expect, Expect};
use crate::tests::{completion_list, BASE_FIXTURE};
fn check(ra_fixture: &str, expect: Expect) {
let actual = completion_list(&format!("{}\n{}", BASE_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##"
tt Trait
en Enum
st Record
st Tuple
md module
st Foo<…>
st Unit
ma makro!(…) #[macro_export] macro_rules! makro
ma makro!(…) #[macro_export] macro_rules! makro
bt u32
"##]],
);
}
#[test]
fn bound_for_type_pred() {
// FIXME: only show traits, macros and modules
check(
r#"
struct Foo<'lt, T, const C: usize> where T: $0 {}
"#,
expect![[r##"
tt Trait
md module
ma makro!(…) #[macro_export] macro_rules! makro
ma makro!(…) #[macro_export] macro_rules! makro
"##]],
);
}
#[test]
fn bound_for_lifetime_pred() {
// FIXME: should only show lifetimes here
check(
r#"
struct Foo<'lt, T, const C: usize> where 'lt: $0 {}
"#,
expect![[r##"
tt Trait
md module
ma makro!(…) #[macro_export] macro_rules! makro
ma makro!(…) #[macro_export] macro_rules! makro
"##]],
);
}
#[test]
fn bound_for_for_pred() {
check(
r#"
struct Foo<'lt, T, const C: usize> where for<'a> T: $0 {}
"#,
expect![[r##"
tt Trait
md module
ma makro!(…) #[macro_export] macro_rules! makro
ma makro!(…) #[macro_export] macro_rules! makro
"##]],
);
}
#[test]
fn param_list_for_for_pred() {
check(
r#"
struct Foo<'lt, T, const C: usize> where for<'a> $0 {}
"#,
expect![[r##"
tt Trait
en Enum
st Record
st Tuple
md module
st Foo<…>
st Unit
ma makro!(…) #[macro_export] macro_rules! makro
ma makro!(…) #[macro_export] macro_rules! makro
bt u32
"##]],
);
}
#[test]
fn pred_on_fn_in_impl() {
check(
r#"
impl Record {
fn method(self) where $0 {}
}
"#,
expect![[r##"
sp Self
tt Trait
en Enum
st Record
st Tuple
ma makro!(…) #[macro_export] macro_rules! makro
md module
st Unit
ma makro!(…) #[macro_export] macro_rules! makro
bt u32
"##]],
);
}