@@ -147,3 +147,156 @@ fn module_chain_to_containing_module_file(
147147
148148 path
149149}
150+
151+ #[ cfg( test) ]
152+ mod tests {
153+ use crate :: completion:: { test_utils:: completion_list, CompletionKind } ;
154+ use expect_test:: { expect, Expect } ;
155+
156+ fn check ( ra_fixture : & str , expect : Expect ) {
157+ let actual = completion_list ( ra_fixture, CompletionKind :: Magic ) ;
158+ expect. assert_eq ( & actual) ;
159+ }
160+
161+ #[ test]
162+ fn lib_module_completion ( ) {
163+ check (
164+ r#"
165+ //- /lib.rs
166+ mod <|>
167+ //- /foo.rs
168+ fn foo() {}
169+ //- /foo/ignored_foo.rs
170+ fn ignored_foo() {}
171+ //- /bar/mod.rs
172+ fn bar() {}
173+ //- /bar/ignored_bar.rs
174+ fn ignored_bar() {}
175+ "# ,
176+ expect ! [ [ r#"
177+ md bar;
178+ md foo;
179+ "# ] ] ,
180+ ) ;
181+ }
182+
183+ #[ test]
184+ fn main_module_completion ( ) {
185+ check (
186+ r#"
187+ //- /main.rs
188+ mod <|>
189+ //- /foo.rs
190+ fn foo() {}
191+ //- /foo/ignored_foo.rs
192+ fn ignored_foo() {}
193+ //- /bar/mod.rs
194+ fn bar() {}
195+ //- /bar/ignored_bar.rs
196+ fn ignored_bar() {}
197+ "# ,
198+ expect ! [ [ r#"
199+ md bar;
200+ md foo;
201+ "# ] ] ,
202+ ) ;
203+ }
204+
205+ #[ test]
206+ fn main_test_module_completion ( ) {
207+ check (
208+ r#"
209+ //- /main.rs
210+ mod tests {
211+ mod <|>;
212+ }
213+ //- /tests/foo.rs
214+ fn foo() {}
215+ "# ,
216+ expect ! [ [ r#"
217+ md foo
218+ "# ] ] ,
219+ ) ;
220+ }
221+
222+ #[ test]
223+ fn directly_nested_module_completion ( ) {
224+ check (
225+ r#"
226+ //- /lib.rs
227+ mod foo;
228+ //- /foo.rs
229+ mod <|>;
230+ //- /foo/bar.rs
231+ fn bar() {}
232+ //- /foo/bar/ignored_bar.rs
233+ fn ignored_bar() {}
234+ //- /foo/baz/mod.rs
235+ fn baz() {}
236+ //- /foo/moar/ignored_moar.rs
237+ fn ignored_moar() {}
238+ "# ,
239+ expect ! [ [ r#"
240+ md bar
241+ md baz
242+ "# ] ] ,
243+ ) ;
244+ }
245+
246+ #[ test]
247+ fn nested_in_source_module_completion ( ) {
248+ check (
249+ r#"
250+ //- /lib.rs
251+ mod foo;
252+ //- /foo.rs
253+ mod bar {
254+ mod <|>
255+ }
256+ //- /foo/bar/baz.rs
257+ fn baz() {}
258+ "# ,
259+ expect ! [ [ r#"
260+ md baz;
261+ "# ] ] ,
262+ ) ;
263+ }
264+
265+ // FIXME binart modules are not picked up in tests
266+ // #[test]
267+ // fn regular_bin_module_completion() {
268+ // check(
269+ // r#"
270+ // //- /src/main.rs
271+ // fn main() {}
272+ // //- /src/main/foo.rs
273+ // mod <|>
274+ // //- /src/main/bar.rs
275+ // fn bar() {}
276+ // //- /src/main/bar/bar_ignored.rs
277+ // fn bar_ignored() {}
278+ // "#,
279+ // expect![[r#"
280+ // md bar;
281+ // "#]],
282+ // );
283+ // }
284+
285+ #[ test]
286+ fn already_declared_bin_module_completion_omitted ( ) {
287+ check (
288+ r#"
289+ //- /src/main.rs
290+ fn main() {}
291+ //- /src/main/foo.rs
292+ mod <|>
293+ //- /src/main/bar.rs
294+ mod foo;
295+ fn bar() {}
296+ //- /src/main/bar/bar_ignored.rs
297+ fn bar_ignored() {}
298+ "# ,
299+ expect ! [ [ r#""# ] ] ,
300+ ) ;
301+ }
302+ }
0 commit comments