Skip to content

Commit 9c063db

Browse files
committed
test: Add test for 'clean --workspace -p FOO'
1 parent 3a3bd98 commit 9c063db

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

tests/testsuite/clean.rs

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,78 @@ fn clean_workspace_does_not_touch_non_workspace_packages() {
267267
);
268268
}
269269

270+
#[cargo_test]
271+
fn clean_workspace_with_extra_package_specifiers() {
272+
Package::new("external_dependency_1", "0.1.0").publish();
273+
Package::new("external_dependency_2", "0.1.0").publish();
274+
let foo_manifest = r#"
275+
[package]
276+
name = "foo"
277+
version = "0.1.0"
278+
edition = "2015"
279+
280+
[dependencies]
281+
external_dependency_1 = "0.1.0"
282+
external_dependency_2 = "0.1.0"
283+
"#;
284+
let p = project()
285+
.file(
286+
"Cargo.toml",
287+
r#"
288+
[workspace]
289+
members = [
290+
"foo",
291+
"foo_core",
292+
"foo-base",
293+
]
294+
"#,
295+
)
296+
.file("foo/Cargo.toml", foo_manifest)
297+
.file("foo/src/lib.rs", "//! foo")
298+
.file("foo_core/Cargo.toml", &basic_manifest("foo_core", "0.1.0"))
299+
.file("foo_core/src/lib.rs", "//! foo_core")
300+
.file("foo-base/Cargo.toml", &basic_manifest("foo-base", "0.1.0"))
301+
.file("foo-base/src/lib.rs", "//! foo-base")
302+
.build();
303+
304+
let fingerprint_path = &p.build_dir().join("debug").join(".fingerprint");
305+
306+
p.cargo("check -p foo -p foo_core -p foo-base").run();
307+
308+
let mut fingerprint_names = get_fingerprints_without_hashes(fingerprint_path);
309+
310+
// Artifacts present for all after building
311+
assert!(fingerprint_names.iter().any(|e| e == "foo"));
312+
assert!(fingerprint_names.iter().any(|e| e == "foo_core"));
313+
assert!(fingerprint_names.iter().any(|e| e == "foo-base"));
314+
315+
let num_external_dependency_2_artifacts = fingerprint_names
316+
.iter()
317+
.filter(|&e| e == "external_dependency_2")
318+
.count();
319+
assert_ne!(num_external_dependency_2_artifacts, 0);
320+
321+
p.cargo("clean -p foo -p foo_core -p foo-base -p external_dependency_1")
322+
.run();
323+
324+
fingerprint_names = get_fingerprints_without_hashes(fingerprint_path);
325+
326+
// Cleaning workspace members and external_dependency_1 leaves artifacts for the external_dependency_2
327+
assert!(
328+
!fingerprint_names.iter().any(|e| e == "foo"
329+
|| e == "foo_core"
330+
|| e == "foo-base"
331+
|| e == "external_dependency_1")
332+
);
333+
assert_eq!(
334+
fingerprint_names
335+
.iter()
336+
.filter(|&e| e == "external_dependency_2")
337+
.count(),
338+
num_external_dependency_2_artifacts,
339+
);
340+
}
341+
270342
fn get_fingerprints_without_hashes(fingerprint_path: &Path) -> Vec<String> {
271343
std::fs::read_dir(fingerprint_path)
272344
.expect("Build dir should be readable")

0 commit comments

Comments
 (0)