From e14f5cfff04942f45a4af3b45152df9672b3458a Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Thu, 17 Jun 2021 13:13:12 +0200 Subject: Move out and rewrite UseTree completion tests --- crates/ide_completion/src/tests/use_tree.rs | 261 ++++++++++++++++++++++++++++ 1 file changed, 261 insertions(+) create mode 100644 crates/ide_completion/src/tests/use_tree.rs (limited to 'crates/ide_completion/src/tests') diff --git a/crates/ide_completion/src/tests/use_tree.rs b/crates/ide_completion/src/tests/use_tree.rs new file mode 100644 index 000000000..156ca244d --- /dev/null +++ b/crates/ide_completion/src/tests/use_tree.rs @@ -0,0 +1,261 @@ +use expect_test::{expect, Expect}; + +use crate::tests::completion_list; + +fn check(ra_fixture: &str, expect: Expect) { + let actual = completion_list(ra_fixture); + expect.assert_eq(&actual) +} + +#[test] +fn use_tree_start() { + cov_mark::check!(only_completes_modules_in_import); + check( + r#" +//- /lib.rs crate:main deps:other_crate +use f$0 + +struct Foo; +mod foo {} +//- /other_crate/lib.rs crate:other_crate +// nothing here +"#, + // FIXME: self in this case should also get the colons + expect![[r#" + kw crate:: + kw self + kw super:: + md foo + md other_crate + "#]], + ); +} + +#[test] +fn dont_complete_current_use() { + cov_mark::check!(dont_complete_current_use); + // FIXME: self shouldn't be here + check( + r#"use self::foo$0;"#, + expect![[r#" + kw self + "#]], + ); + check( + r#" +mod foo { pub struct S; } +use self::{foo::*, bar$0}; +"#, + expect![[r#" + kw self + st S + md foo + "#]], + ); +} + +#[test] +fn nested_use_tree() { + // FIXME: self shouldn't be here + check( + r#" +mod foo { + pub mod bar { + pub struct FooBar; + } +} +use foo::{bar::$0} +"#, + expect![[r#" + kw self + st FooBar + "#]], + ); + check( + r#" +mod foo { + pub mod bar { + pub struct FooBar; + } +} +use foo::{$0} +"#, + expect![[r#" + kw self + md bar + "#]], + ); +} + +#[test] +fn deeply_nested_use_tree() { + // FIXME: self shouldn't be here + check( + r#" +mod foo { + pub mod bar { + pub mod baz { + pub struct FooBarBaz; + } + } +} +use foo::{bar::{baz::$0}} +"#, + expect![[r#" + kw self + st FooBarBaz + "#]], + ); + check( + r#" +mod foo { + pub mod bar { + pub mod baz { + pub struct FooBarBaz; + } + } +} +use foo::{bar::{$0}} +"#, + expect![[r#" + kw self + md baz + "#]], + ); +} + +#[test] +fn plain_qualified_use_tree() { + // FIXME: self shouldn't be here + check( + r#" +use foo::$0 + +mod foo { + struct Private; + pub struct Foo; +} +struct Bar; +"#, + expect![[r#" + kw self + st Foo + "#]], + ); +} + +#[test] +fn self_qualified_use_tree() { + // FIXME: self shouldn't be here + check( + r#" +use self::$0 + +mod foo {} +struct Bar; +"#, + expect![[r#" + kw self + md foo + st Bar + "#]], + ); +} + +#[test] +fn super_qualified_use_tree() { + // FIXME: self shouldn't be here + check( + r#" +mod bar { + use super::$0 +} + +mod foo {} +struct Bar; +"#, + expect![[r#" + kw self + kw super:: + st Bar + md bar + md foo + "#]], + ); +} + +#[test] +fn super_super_qualified_use_tree() { + // FIXME: self shouldn't be here + check( + r#" +mod a { + const A: usize = 0; + mod b { + const B: usize = 0; + mod c { use super::super::$0 } + } +} +"#, + expect![[r#" + kw self + kw super:: + md b + ct A + "#]], + ); +} + +#[test] +fn crate_qualified_use_tree() { + // FIXME: self shouldn't be here + check( + r#" +use crate::$0 + +mod foo {} +struct Bar; +"#, + expect![[r#" + kw self + md foo + st Bar + "#]], + ); +} + +#[test] +fn extern_crate_qualified_use_tree() { + // FIXME: self shouldn't be here + check( + r#" +//- /lib.rs crate:main deps:other_crate +use other_crate::$0 +//- /other_crate/lib.rs crate:other_crate +pub struct Foo; +pub mod foo {} +"#, + expect![[r#" + kw self + st Foo + md foo + "#]], + ); +} + +#[test] +fn pub_use_tree() { + check( + r#" +pub struct X; +pub mod bar {} +pub use $0; +"#, + expect![[r#" + kw crate:: + kw self + kw super:: + md bar + "#]], + ); +} -- cgit v1.2.3