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