Skip to content

Commit 0e73eb5

Browse files
committed
test(tree): Show exiting public/priv behavior
1 parent c14c1c0 commit 0e73eb5

File tree

2 files changed

+302
-0
lines changed

2 files changed

+302
-0
lines changed

tests/testsuite/cargo_tree/deps.rs

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1901,6 +1901,147 @@ c v0.1.0 ([ROOT]/foo/c) (*)
19011901
.run();
19021902
}
19031903

1904+
#[cargo_test(nightly, reason = "exported_private_dependencies lint is unstable")]
1905+
fn depth_public() {
1906+
let p = project()
1907+
.file(
1908+
"Cargo.toml",
1909+
r#"
1910+
[workspace]
1911+
members = ["diamond", "left-pub", "right-priv", "dep"]
1912+
"#,
1913+
)
1914+
.file(
1915+
"diamond/Cargo.toml",
1916+
r#"
1917+
cargo-features = ["public-dependency"]
1918+
1919+
[package]
1920+
name = "diamond"
1921+
version = "0.1.0"
1922+
1923+
[dependencies]
1924+
left-pub = { path = "../left-pub", public = true }
1925+
right-priv = { path = "../right-priv", public = true }
1926+
"#,
1927+
)
1928+
.file("diamond/src/lib.rs", "")
1929+
.file(
1930+
"left-pub/Cargo.toml",
1931+
r#"
1932+
cargo-features = ["public-dependency"]
1933+
1934+
[package]
1935+
name = "left-pub"
1936+
version = "0.1.0"
1937+
1938+
[dependencies]
1939+
dep = { path = "../dep", public = true }
1940+
"#,
1941+
)
1942+
.file("left-pub/src/lib.rs", "")
1943+
.file(
1944+
"right-priv/Cargo.toml",
1945+
r#"
1946+
[package]
1947+
name = "right-priv"
1948+
version = "0.1.0"
1949+
1950+
[dependencies]
1951+
dep = { path = "../dep" }
1952+
"#,
1953+
)
1954+
.file("right-priv/src/lib.rs", "")
1955+
.file(
1956+
"dep/Cargo.toml",
1957+
r#"
1958+
[package]
1959+
name = "dep"
1960+
version = "0.1.0"
1961+
"#,
1962+
)
1963+
.file("dep/src/lib.rs", "")
1964+
.build();
1965+
1966+
p.cargo("tree")
1967+
.masquerade_as_nightly_cargo(&["public-dependency"])
1968+
.with_stdout_data(str![[r#"
1969+
dep v0.1.0 ([ROOT]/foo/dep)
1970+
1971+
diamond v0.1.0 ([ROOT]/foo/diamond)
1972+
├── left-pub v0.1.0 ([ROOT]/foo/left-pub)
1973+
│ └── dep v0.1.0 ([ROOT]/foo/dep)
1974+
└── right-priv v0.1.0 ([ROOT]/foo/right-priv)
1975+
└── dep v0.1.0 ([ROOT]/foo/dep)
1976+
1977+
left-pub v0.1.0 ([ROOT]/foo/left-pub) (*)
1978+
1979+
right-priv v0.1.0 ([ROOT]/foo/right-priv) (*)
1980+
1981+
"#]])
1982+
.run();
1983+
1984+
p.cargo("tree -p left-pub")
1985+
.masquerade_as_nightly_cargo(&["public-dependency"])
1986+
.with_stdout_data(str![[r#"
1987+
left-pub v0.1.0 ([ROOT]/foo/left-pub)
1988+
└── dep v0.1.0 ([ROOT]/foo/dep)
1989+
1990+
"#]])
1991+
.run();
1992+
1993+
p.cargo("tree -p right-priv")
1994+
.masquerade_as_nightly_cargo(&["public-dependency"])
1995+
.with_stdout_data(str![[r#"
1996+
right-priv v0.1.0 ([ROOT]/foo/right-priv)
1997+
└── dep v0.1.0 ([ROOT]/foo/dep)
1998+
1999+
"#]])
2000+
.run();
2001+
2002+
p.cargo("tree -p diamond")
2003+
.masquerade_as_nightly_cargo(&["public-dependency"])
2004+
.with_stdout_data(str![[r#"
2005+
diamond v0.1.0 ([ROOT]/foo/diamond)
2006+
├── left-pub v0.1.0 ([ROOT]/foo/left-pub)
2007+
│ └── dep v0.1.0 ([ROOT]/foo/dep)
2008+
└── right-priv v0.1.0 ([ROOT]/foo/right-priv)
2009+
└── dep v0.1.0 ([ROOT]/foo/dep)
2010+
2011+
"#]])
2012+
.run();
2013+
2014+
p.cargo("tree")
2015+
.masquerade_as_nightly_cargo(&["public-dependency"])
2016+
.with_stdout_data(str![[r#"
2017+
dep v0.1.0 ([ROOT]/foo/dep)
2018+
2019+
diamond v0.1.0 ([ROOT]/foo/diamond)
2020+
├── left-pub v0.1.0 ([ROOT]/foo/left-pub)
2021+
│ └── dep v0.1.0 ([ROOT]/foo/dep)
2022+
└── right-priv v0.1.0 ([ROOT]/foo/right-priv)
2023+
└── dep v0.1.0 ([ROOT]/foo/dep)
2024+
2025+
left-pub v0.1.0 ([ROOT]/foo/left-pub) (*)
2026+
2027+
right-priv v0.1.0 ([ROOT]/foo/right-priv) (*)
2028+
2029+
"#]])
2030+
.run();
2031+
2032+
p.cargo("tree --invert dep")
2033+
.masquerade_as_nightly_cargo(&["public-dependency"])
2034+
.with_stdout_data(str![[r#"
2035+
dep v0.1.0 ([ROOT]/foo/dep)
2036+
├── left-pub v0.1.0 ([ROOT]/foo/left-pub)
2037+
│ └── diamond v0.1.0 ([ROOT]/foo/diamond)
2038+
└── right-priv v0.1.0 ([ROOT]/foo/right-priv)
2039+
└── diamond v0.1.0 ([ROOT]/foo/diamond)
2040+
2041+
"#]])
2042+
.run();
2043+
}
2044+
19042045
#[cargo_test]
19052046
fn prune() {
19062047
let p = make_simple_proj();

tests/testsuite/cargo_tree/features.rs

Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,3 +350,164 @@ foo v0.1.0 ([ROOT]/foo)
350350
"#]])
351351
.run();
352352
}
353+
354+
#[cargo_test(nightly, reason = "exported_private_dependencies lint is unstable")]
355+
fn depth_public_no_features() {
356+
Package::new("pub-defaultdep", "1.0.0").publish();
357+
Package::new("priv-defaultdep", "1.0.0").publish();
358+
359+
let p = project()
360+
.file(
361+
"Cargo.toml",
362+
r#"
363+
cargo-features = ["public-dependency"]
364+
365+
[package]
366+
name = "foo"
367+
version = "0.1.0"
368+
369+
[dependencies]
370+
pub-defaultdep = { version = "1.0.0", public = true }
371+
priv-defaultdep = "1.0.0"
372+
"#,
373+
)
374+
.file("src/lib.rs", "")
375+
.build();
376+
377+
p.cargo("tree -e features")
378+
.masquerade_as_nightly_cargo(&["public-dependency"])
379+
.with_stdout_data(str![[r#"
380+
foo v0.1.0 ([ROOT]/foo)
381+
├── priv-defaultdep feature "default"
382+
│ └── priv-defaultdep v1.0.0
383+
└── pub-defaultdep feature "default"
384+
└── pub-defaultdep v1.0.0
385+
386+
"#]])
387+
.run();
388+
}
389+
390+
#[cargo_test(nightly, reason = "exported_private_dependencies lint is unstable")]
391+
fn depth_public_transitive_features() {
392+
Package::new("pub-defaultdep", "1.0.0")
393+
.feature("default", &["f1"])
394+
.feature("f1", &["f2"])
395+
.feature("f2", &["optdep"])
396+
.add_dep(Dependency::new("optdep", "1.0").optional(true).public(true))
397+
.publish();
398+
Package::new("priv-defaultdep", "1.0.0")
399+
.feature("default", &["f1"])
400+
.feature("f1", &["f2"])
401+
.feature("f2", &["optdep"])
402+
.add_dep(Dependency::new("optdep", "1.0").optional(true))
403+
.publish();
404+
Package::new("optdep", "1.0.0")
405+
.feature("default", &["f"])
406+
.feature("f", &[])
407+
.publish();
408+
409+
let p = project()
410+
.file(
411+
"Cargo.toml",
412+
r#"
413+
cargo-features = ["public-dependency"]
414+
415+
[package]
416+
name = "foo"
417+
version = "0.1.0"
418+
419+
[dependencies]
420+
pub-defaultdep = { version = "1.0.0", public = true }
421+
priv-defaultdep = { version = "1.0.0", public = true }
422+
"#,
423+
)
424+
.file("src/lib.rs", "")
425+
.build();
426+
427+
p.cargo("tree -e features")
428+
.masquerade_as_nightly_cargo(&["public-dependency"])
429+
.with_stdout_data(str![[r#"
430+
foo v0.1.0 ([ROOT]/foo)
431+
├── priv-defaultdep feature "default"
432+
│ ├── priv-defaultdep v1.0.0
433+
│ │ └── optdep feature "default"
434+
│ │ ├── optdep v1.0.0
435+
│ │ └── optdep feature "f"
436+
│ │ └── optdep v1.0.0
437+
│ └── priv-defaultdep feature "f1"
438+
│ ├── priv-defaultdep v1.0.0 (*)
439+
│ └── priv-defaultdep feature "f2"
440+
│ ├── priv-defaultdep v1.0.0 (*)
441+
│ └── priv-defaultdep feature "optdep"
442+
│ └── priv-defaultdep v1.0.0 (*)
443+
└── pub-defaultdep feature "default"
444+
├── pub-defaultdep v1.0.0
445+
│ └── optdep feature "default" (*)
446+
└── pub-defaultdep feature "f1"
447+
├── pub-defaultdep v1.0.0 (*)
448+
└── pub-defaultdep feature "f2"
449+
├── pub-defaultdep v1.0.0 (*)
450+
└── pub-defaultdep feature "optdep"
451+
└── pub-defaultdep v1.0.0 (*)
452+
453+
"#]])
454+
.run();
455+
}
456+
457+
#[cargo_test(nightly, reason = "exported_private_dependencies lint is unstable")]
458+
fn depth_public_cli() {
459+
Package::new("priv", "1.0.0").feature("f", &[]).publish();
460+
Package::new("pub", "1.0.0").feature("f", &[]).publish();
461+
462+
let p = project()
463+
.file(
464+
"Cargo.toml",
465+
r#"
466+
cargo-features = ["public-dependency"]
467+
468+
[package]
469+
name = "foo"
470+
version = "0.1.0"
471+
472+
[features]
473+
priv-indirect = ["priv"]
474+
priv = ["dep:priv", "priv?/f"]
475+
pub-indirect = ["pub"]
476+
pub = ["dep:pub", "priv?/f"]
477+
478+
[dependencies]
479+
priv = { version = "1.0.0", optional = true }
480+
pub = { version = "1.0.0", optional = true, public = true }
481+
"#,
482+
)
483+
.file("src/lib.rs", "")
484+
.build();
485+
486+
p.cargo("tree -e features")
487+
.masquerade_as_nightly_cargo(&["public-dependency"])
488+
.with_stdout_data(str![[r#"
489+
foo v0.1.0 ([ROOT]/foo)
490+
491+
"#]])
492+
.run();
493+
494+
p.cargo("tree -e features --features pub-indirect")
495+
.masquerade_as_nightly_cargo(&["public-dependency"])
496+
.with_stdout_data(str![[r#"
497+
foo v0.1.0 ([ROOT]/foo)
498+
└── pub feature "default"
499+
└── pub v1.0.0
500+
501+
"#]])
502+
.run();
503+
504+
p.cargo("tree -e features --features priv-indirect")
505+
.masquerade_as_nightly_cargo(&["public-dependency"])
506+
.with_stdout_data(str![[r#"
507+
foo v0.1.0 ([ROOT]/foo)
508+
└── priv feature "default"
509+
└── priv v1.0.0
510+
511+
"#]])
512+
.run();
513+
}

0 commit comments

Comments
 (0)