]> git.proxmox.com Git - cargo.git/blob - tests/testsuite/rename_deps.rs
Add RegistryBuilder to help initializing test registries.
[cargo.git] / tests / testsuite / rename_deps.rs
1 //! Tests for renaming dependencies.
2
3 use cargo_test_support::git;
4 use cargo_test_support::paths;
5 use cargo_test_support::registry::{self, Package};
6 use cargo_test_support::{basic_manifest, project};
7
8 #[cargo_test]
9 fn rename_dependency() {
10 Package::new("bar", "0.1.0").publish();
11 Package::new("bar", "0.2.0").publish();
12
13 let p = project()
14 .file(
15 "Cargo.toml",
16 r#"
17 [project]
18 name = "foo"
19 version = "0.0.1"
20 authors = []
21
22 [dependencies]
23 bar = { version = "0.1.0" }
24 baz = { version = "0.2.0", package = "bar" }
25 "#,
26 )
27 .file("src/lib.rs", "extern crate bar; extern crate baz;")
28 .build();
29
30 p.cargo("build").run();
31 }
32
33 #[cargo_test]
34 fn rename_with_different_names() {
35 let p = project()
36 .file(
37 "Cargo.toml",
38 r#"
39 [project]
40 name = "foo"
41 version = "0.0.1"
42 authors = []
43
44 [dependencies]
45 baz = { path = "bar", package = "bar" }
46 "#,
47 )
48 .file("src/lib.rs", "extern crate baz;")
49 .file(
50 "bar/Cargo.toml",
51 r#"
52 [project]
53 name = "bar"
54 version = "0.0.1"
55 authors = []
56
57 [lib]
58 name = "random_name"
59 "#,
60 )
61 .file("bar/src/lib.rs", "")
62 .build();
63
64 p.cargo("build").run();
65 }
66
67 #[cargo_test]
68 fn lots_of_names() {
69 registry::alt_init();
70 Package::new("foo", "0.1.0")
71 .file("src/lib.rs", "pub fn foo1() {}")
72 .publish();
73 Package::new("foo", "0.2.0")
74 .file("src/lib.rs", "pub fn foo() {}")
75 .publish();
76 Package::new("foo", "0.1.0")
77 .file("src/lib.rs", "pub fn foo2() {}")
78 .alternative(true)
79 .publish();
80
81 let g = git::repo(&paths::root().join("another"))
82 .file("Cargo.toml", &basic_manifest("foo", "0.1.0"))
83 .file("src/lib.rs", "pub fn foo3() {}")
84 .build();
85
86 let p = project()
87 .file(
88 "Cargo.toml",
89 &format!(
90 r#"
91 [package]
92 name = "test"
93 version = "0.1.0"
94 authors = []
95
96 [dependencies]
97 foo = "0.2"
98 foo1 = {{ version = "0.1", package = "foo" }}
99 foo2 = {{ version = "0.1", registry = "alternative", package = "foo" }}
100 foo3 = {{ git = '{}', package = "foo" }}
101 foo4 = {{ path = "foo", package = "foo" }}
102 "#,
103 g.url()
104 ),
105 )
106 .file(
107 "src/lib.rs",
108 "
109 extern crate foo;
110 extern crate foo1;
111 extern crate foo2;
112 extern crate foo3;
113 extern crate foo4;
114
115 pub fn foo() {
116 foo::foo();
117 foo1::foo1();
118 foo2::foo2();
119 foo3::foo3();
120 foo4::foo4();
121 }
122 ",
123 )
124 .file("foo/Cargo.toml", &basic_manifest("foo", "0.1.0"))
125 .file("foo/src/lib.rs", "pub fn foo4() {}")
126 .build();
127
128 p.cargo("build -v").run();
129 }
130
131 #[cargo_test]
132 fn rename_and_patch() {
133 Package::new("foo", "0.1.0").publish();
134
135 let p = project()
136 .file(
137 "Cargo.toml",
138 r#"
139 [package]
140 name = "test"
141 version = "0.1.0"
142 authors = []
143
144 [dependencies]
145 bar = { version = "0.1", package = "foo" }
146
147 [patch.crates-io]
148 foo = { path = "foo" }
149 "#,
150 )
151 .file(
152 "src/lib.rs",
153 "extern crate bar; pub fn foo() { bar::foo(); }",
154 )
155 .file("foo/Cargo.toml", &basic_manifest("foo", "0.1.0"))
156 .file("foo/src/lib.rs", "pub fn foo() {}")
157 .build();
158
159 p.cargo("build -v").run();
160 }
161
162 #[cargo_test]
163 fn rename_twice() {
164 Package::new("foo", "0.1.0").publish();
165
166 let p = project()
167 .file(
168 "Cargo.toml",
169 r#"
170 [package]
171 name = "test"
172 version = "0.1.0"
173 authors = []
174
175 [dependencies]
176 bar = { version = "0.1", package = "foo" }
177 [build-dependencies]
178 foo = { version = "0.1" }
179 "#,
180 )
181 .file("src/lib.rs", "")
182 .build();
183
184 p.cargo("build -v")
185 .with_status(101)
186 .with_stderr(
187 "\
188 [UPDATING] `[..]` index
189 [DOWNLOADING] crates ...
190 [DOWNLOADED] foo v0.1.0 (registry [..])
191 error: the crate `test v0.1.0 ([CWD])` depends on crate `foo v0.1.0` multiple times with different names
192 ",
193 )
194 .run();
195 }
196
197 #[cargo_test]
198 fn rename_affects_fingerprint() {
199 Package::new("foo", "0.1.0").publish();
200
201 let p = project()
202 .file(
203 "Cargo.toml",
204 r#"
205 [package]
206 name = "test"
207 version = "0.1.0"
208 authors = []
209
210 [dependencies]
211 foo = { version = "0.1", package = "foo" }
212 "#,
213 )
214 .file("src/lib.rs", "extern crate foo;")
215 .build();
216
217 p.cargo("build -v").run();
218
219 p.change_file(
220 "Cargo.toml",
221 r#"
222 [package]
223 name = "test"
224 version = "0.1.0"
225 authors = []
226
227 [dependencies]
228 bar = { version = "0.1", package = "foo" }
229 "#,
230 );
231
232 p.cargo("build -v")
233 .with_status(101)
234 .with_stderr_contains("[..]can't find crate for `foo`")
235 .run();
236 }
237
238 #[cargo_test]
239 fn can_run_doc_tests() {
240 Package::new("bar", "0.1.0").publish();
241 Package::new("bar", "0.2.0").publish();
242
243 let foo = project()
244 .file(
245 "Cargo.toml",
246 r#"
247 [project]
248 name = "foo"
249 version = "0.0.1"
250
251 [dependencies]
252 bar = { version = "0.1.0" }
253 baz = { version = "0.2.0", package = "bar" }
254 "#,
255 )
256 .file(
257 "src/lib.rs",
258 "
259 extern crate bar;
260 extern crate baz;
261 ",
262 )
263 .build();
264
265 foo.cargo("test -v")
266 .with_stderr_contains(
267 "\
268 [DOCTEST] foo
269 [RUNNING] `rustdoc [..]--test [CWD]/src/lib.rs \
270 [..] \
271 --extern bar=[CWD]/target/debug/deps/libbar-[..].rlib \
272 --extern baz=[CWD]/target/debug/deps/libbar-[..].rlib \
273 [..]`
274 ",
275 )
276 .run();
277 }
278
279 #[cargo_test]
280 fn features_still_work() {
281 Package::new("foo", "0.1.0").publish();
282 Package::new("bar", "0.1.0").publish();
283
284 let p = project()
285 .file(
286 "Cargo.toml",
287 r#"
288 [package]
289 name = "test"
290 version = "0.1.0"
291 authors = []
292
293 [dependencies]
294 p1 = { path = 'a', features = ['b'] }
295 p2 = { path = 'b' }
296 "#,
297 )
298 .file("src/lib.rs", "")
299 .file(
300 "a/Cargo.toml",
301 r#"
302 [package]
303 name = "p1"
304 version = "0.1.0"
305 authors = []
306
307 [dependencies]
308 b = { version = "0.1", package = "foo", optional = true }
309 "#,
310 )
311 .file("a/src/lib.rs", "extern crate b;")
312 .file(
313 "b/Cargo.toml",
314 r#"
315 [package]
316 name = "p2"
317 version = "0.1.0"
318 authors = []
319
320 [dependencies]
321 b = { version = "0.1", package = "bar", optional = true }
322
323 [features]
324 default = ['b']
325 "#,
326 )
327 .file("b/src/lib.rs", "extern crate b;")
328 .build();
329
330 p.cargo("build -v").run();
331 }
332
333 #[cargo_test]
334 fn features_not_working() {
335 Package::new("foo", "0.1.0").publish();
336 Package::new("bar", "0.1.0").publish();
337
338 let p = project()
339 .file(
340 "Cargo.toml",
341 r#"
342 [package]
343 name = "test"
344 version = "0.1.0"
345 authors = []
346
347 [dependencies]
348 a = { path = 'a', package = 'p1', optional = true }
349
350 [features]
351 default = ['p1']
352 "#,
353 )
354 .file("src/lib.rs", "")
355 .file("a/Cargo.toml", &basic_manifest("p1", "0.1.0"))
356 .build();
357
358 p.cargo("build -v")
359 .with_status(101)
360 .with_stderr(
361 "\
362 error: failed to parse manifest at `[..]`
363
364 Caused by:
365 feature `default` includes `p1` which is neither a dependency nor another feature
366 ",
367 )
368 .run();
369 }
370
371 #[cargo_test]
372 fn rename_with_dash() {
373 let p = project()
374 .file(
375 "Cargo.toml",
376 r#"
377 [package]
378 name = "qwerty"
379 version = "0.1.0"
380
381 [dependencies]
382 foo-bar = { path = 'a', package = 'a' }
383 "#,
384 )
385 .file("src/lib.rs", "extern crate foo_bar;")
386 .file("a/Cargo.toml", &basic_manifest("a", "0.1.0"))
387 .file("a/src/lib.rs", "")
388 .build();
389
390 p.cargo("build").run();
391 }