1 use racer_testutils::*;
2 
3 #[test]
completes_pub_fn_from_local_package()4 fn completes_pub_fn_from_local_package() {
5     let src = "
6     extern crate fixtures;
7 
8     use fixtures::foo;
9 
10     fn main() {
11         let x = foo::~
12     }
13     ";
14 
15     with_test_project(|dir| {
16         let srcdir = dir.nested_dir("src");
17         let got = get_one_completion(src, Some(srcdir));
18         assert_eq!("test", got.matchstr);
19     })
20 }
21 
22 #[test]
completes_pub_fn_from_local_submodule_package()23 fn completes_pub_fn_from_local_submodule_package() {
24     let src = "
25     extern crate fixtures;
26 
27     use fixtures::bar;
28 
29     fn main() {
30         let x = bar::~
31     }
32     ";
33 
34     with_test_project(|dir| {
35         let srcdir = dir.nested_dir("src");
36         let got = get_one_completion(src, Some(srcdir));
37         assert_eq!("bartest", got.matchstr);
38     })
39 }
40 
41 #[test]
follows_use_local_package()42 fn follows_use_local_package() {
43     let src = "
44     extern crate fixtures;
45 
46     use fixtures::~
47     ";
48 
49     with_test_project(|dir| {
50         let srcdir = dir.nested_dir("src");
51         let got = get_all_completions(src, Some(srcdir));
52         assert!(got.into_iter().any(|ma| ma.matchstr == "foo"));
53     })
54 }
55 
56 #[test]
follows_use_local_package_2018()57 fn follows_use_local_package_2018() {
58     let src = "
59     use test_crat~
60     ";
61 
62     with_test_project(|dir| {
63         let cratedir = dir.nested_dir("test-crate4");
64         let testdir = cratedir.nested_dir("tests");
65         let got = get_all_completions(src, Some(testdir));
66         assert!(got.into_iter().any(|ma| ma.matchstr == "test_crate4"));
67     })
68 }
69 
70 #[test]
finds_extern_crate()71 fn finds_extern_crate() {
72     let src = "
73     extern crate fixtures;
74     f~ixtures
75     ";
76 
77     with_test_project(|dir| {
78         let srcdir = dir.nested_dir("src");
79         let got = get_definition(src, Some(srcdir));
80         assert_eq!(got.matchstr, "fixtures");
81     })
82 }
83 
84 // regression test for #800
85 #[test]
completes_typedef_in_external_crate()86 fn completes_typedef_in_external_crate() {
87     let src = "
88     extern crate fixtures;
89 
90     use fixtures::Usize~
91     ";
92 
93     with_test_project(|dir| {
94         let srcdir = dir.nested_dir("src");
95         let got = get_only_completion(src, Some(srcdir));
96         assert_eq!(got.matchstr, "UsizeVec");
97         assert_eq!(got.contextstr, "pub type UsizeVec = Vec<usize>;");
98     })
99 }
100 
101 #[test]
follows_external_re_export()102 fn follows_external_re_export() {
103     let src = "
104     extern crate rayon;
105     fn main() {
106         rayon::sco~
107     }
108     ";
109     with_test_project(|dir| {
110         let src_dir = dir.nested_dir("test-crate3").nested_dir("src");
111         let got = get_only_completion(src, Some(src_dir));
112         assert_eq!(got.matchstr, "scope");
113     });
114 }
115 
116 #[test]
follows_rand_crate()117 fn follows_rand_crate() {
118     let src = "
119     extern crate rand;
120     use rand::{Rng, thread_rng};
121     fn main() {
122         let mut rng: Box<Rng> = Box::new(thread_rng());
123         rng.gen_rang~
124     }
125     ";
126     with_test_project(|dir| {
127         let src_dir = dir.nested_dir("test-crate3").nested_dir("src");
128         let got = get_only_completion(src, Some(src_dir));
129         assert_eq!(got.matchstr, "gen_range");
130     });
131 }
132 
133 // For issue 826
134 #[test]
find_crate_doc()135 fn find_crate_doc() {
136     let src = "
137     extern crate fixtures;
138     use fixtur~
139     ";
140     let doc_str = r#"This is a test project for racer.
141 
142 # Example:
143 Basic Usage.
144 
145 ```
146 extern crate fixtures;
147 use fixtures::foo;
148 fn main {
149     println!("Racer")
150 }
151 ```
152 
153 ## Notes:
154 - We should check racer can parse rust doc style comments
155 - and some comments..."#;
156     with_test_project(|dir| {
157         let srcdir = dir.nested_dir("src");
158         let got = get_one_completion(src, Some(srcdir));
159         assert_eq!(doc_str, got.docs);
160     })
161 }
162 
163 // test for re-export
164 #[test]
follows_use_for_reexport()165 fn follows_use_for_reexport() {
166     let src = "
167     extern crate fixtures;
168 
169     use fixtures::use~;
170     ";
171     with_test_project(|dir| {
172         let srcdir = dir.nested_dir("src");
173         let got = get_only_completion(src, Some(srcdir));
174         assert_eq!(got.matchstr, "useless_func");
175     })
176 }
177 
178 #[test]
completes_cratename_without_extern()179 fn completes_cratename_without_extern() {
180     let src = "
181     fn main() {
182         rayon::sco~
183     }
184     ";
185     with_test_project(|dir| {
186         let src_dir = dir.nested_dir("test-crate4").nested_dir("src");
187         let got = get_only_completion(src, Some(src_dir));
188         assert_eq!(got.matchstr, "scope");
189     });
190 }
191 
192 #[test]
doesnt_complete_cratename_without_extern_in_2015()193 fn doesnt_complete_cratename_without_extern_in_2015() {
194     let src = "
195     fn main() {
196         rayon::sco~
197     }
198     ";
199     with_test_project(|dir| {
200         let src_dir = dir.nested_dir("test-crate3").nested_dir("src");
201         let got = get_all_completions(src, Some(src_dir));
202         assert!(got.is_empty());
203     });
204 }
205 
206 #[test]
complete_extern_crate()207 fn complete_extern_crate() {
208     let src = "
209     extern crate ray~
210     ";
211     with_test_project(|dir| {
212         let src_dir = dir.nested_dir("test-crate3").nested_dir("src");
213         let got = get_only_completion(src, Some(src_dir));
214         assert_eq!(got.matchstr, "rayon");
215     });
216 }
217