Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-completion/src/tests/item.rs')
-rw-r--r--crates/ide-completion/src/tests/item.rs172
1 files changed, 172 insertions, 0 deletions
diff --git a/crates/ide-completion/src/tests/item.rs b/crates/ide-completion/src/tests/item.rs
new file mode 100644
index 0000000000..ed341b361a
--- /dev/null
+++ b/crates/ide-completion/src/tests/item.rs
@@ -0,0 +1,172 @@
+//! Completion tests for item specifics overall.
+//!
+//! Except for use items which are tested in [super::use_tree] and mod declarations with are tested
+//! in [crate::completions::mod_].
+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!("{}{}", BASE_ITEMS_FIXTURE, ra_fixture));
+ expect.assert_eq(&actual)
+}
+
+#[test]
+fn target_type_or_trait_in_impl_block() {
+ check(
+ r#"
+impl Tra$0
+"#,
+ expect![[r#"
+ kw self
+ kw super
+ kw crate
+ tt Trait
+ en Enum
+ st Record
+ st Tuple
+ md module
+ st Unit
+ ma makro!(…) macro_rules! makro
+ un Union
+ bt u32
+ "#]],
+ )
+}
+
+#[test]
+fn target_type_in_trait_impl_block() {
+ check(
+ r#"
+impl Trait for Str$0
+"#,
+ expect![[r#"
+ kw self
+ kw super
+ kw crate
+ tt Trait
+ en Enum
+ st Record
+ st Tuple
+ md module
+ st Unit
+ ma makro!(…) macro_rules! makro
+ un Union
+ bt u32
+ "#]],
+ )
+}
+
+#[test]
+fn after_trait_name_in_trait_def() {
+ check(
+ r"trait A $0",
+ expect![[r#"
+ kw where
+ "#]],
+ );
+}
+
+#[test]
+fn after_target_name_in_impl() {
+ check(
+ r"impl Trait $0",
+ expect![[r#"
+ kw where
+ kw for
+ "#]],
+ );
+ // FIXME: This should not emit `kw for`
+ check(
+ r"impl Trait for Type $0",
+ expect![[r#"
+ kw where
+ kw for
+ "#]],
+ );
+}
+
+#[test]
+fn after_struct_name() {
+ // FIXME: This should emit `kw where` only
+ check(
+ r"struct Struct $0",
+ expect![[r#"
+ kw pub(crate)
+ kw pub(super)
+ kw pub
+ kw unsafe
+ kw fn
+ kw const
+ kw type
+ kw impl
+ kw extern
+ kw use
+ kw trait
+ kw static
+ kw mod
+ kw enum
+ kw struct
+ kw union
+ sn tmod (Test module)
+ sn tfn (Test function)
+ sn macro_rules
+ kw self
+ kw super
+ kw crate
+ md module
+ ma makro!(…) macro_rules! makro
+ "#]],
+ );
+}
+
+#[test]
+fn after_fn_name() {
+ // FIXME: This should emit `kw where` only
+ check(
+ r"fn func() $0",
+ expect![[r#"
+ kw pub(crate)
+ kw pub(super)
+ kw pub
+ kw unsafe
+ kw fn
+ kw const
+ kw type
+ kw impl
+ kw extern
+ kw use
+ kw trait
+ kw static
+ kw mod
+ kw enum
+ kw struct
+ kw union
+ sn tmod (Test module)
+ sn tfn (Test function)
+ sn macro_rules
+ kw self
+ kw super
+ kw crate
+ md module
+ ma makro!(…) macro_rules! makro
+ "#]],
+ );
+}
+
+#[test]
+fn before_record_field() {
+ check(
+ r#"
+struct Foo {
+ $0
+ pub f: i32,
+}
+"#,
+ expect![[r#"
+ kw pub(crate)
+ kw pub(super)
+ kw pub
+ "#]],
+ )
+}