2025-06-25 22:37:24 +09:00

101 lines
3.1 KiB
Rust

use crate::prelude::*;
use cargo_test_support::file;
use cargo_test_support::project;
use cargo_test_support::registry::Package;
#[cargo_test]
fn case() {
Package::new("normal_a", "1.0.0")
.dep("normal_b", "1.0")
.publish();
Package::new("normal_b", "1.0.0")
.dep("normal_c", "1.0")
.build_dep("normal_b_build_a", "1.0.0")
.dev_dep("normal_b_dev_a", "1.0.0")
.publish();
Package::new("normal_c", "1.0.0").publish();
Package::new("normal_b_build_a", "1.0.0")
.dep("normal_b_build_a_normal_a", "1.0.0")
.publish();
Package::new("normal_b_build_a_normal_a", "1.0.0").publish();
Package::new("normal_b_dev_a", "1.0.0")
.dep("normal_b_dev_a_normal_a", "1.0.0")
.publish();
Package::new("normal_b_dev_a_normal_a", "1.0.0").publish();
Package::new("normal_d", "1.0.0").publish();
Package::new("build_a", "1.0.0")
.dep("build_b", "1.0")
.publish();
Package::new("build_b", "1.0.0")
.dep("build_c", "1.0")
.build_dep("build_b_build_a", "1.0.0")
.dev_dep("build_b_dev_a", "1.0.0")
.publish();
Package::new("build_c", "1.0.0").publish();
Package::new("build_b_build_a", "1.0.0")
.dep("build_b_build_a_normal_a", "1.0.0")
.publish();
Package::new("build_b_build_a_normal_a", "1.0.0").publish();
Package::new("build_b_dev_a", "1.0.0")
.dep("build_b_dev_a_normal_a", "1.0.0")
.publish();
Package::new("build_b_dev_a_normal_a", "1.0.0").publish();
Package::new("build_d", "1.0.0").publish();
Package::new("dev_a", "1.0.0").dep("dev_b", "1.0").publish();
Package::new("dev_b", "1.0.0")
.dep("dev_c", "1.0")
.build_dep("dev_b_build_a", "1.0.0")
.dev_dep("dev_b_dev_a", "1.0.0")
.publish();
Package::new("dev_c", "1.0.0").publish();
Package::new("dev_b_build_a", "1.0.0")
.dep("dev_b_build_a_normal_a", "1.0.0")
.publish();
Package::new("dev_b_build_a_normal_a", "1.0.0").publish();
Package::new("dev_b_dev_a", "1.0.0")
.dep("dev_b_dev_a_normal_a", "1.0.0")
.publish();
Package::new("dev_b_dev_a_normal_a", "1.0.0").publish();
Package::new("dev_d", "1.0.0").publish();
let p = project()
.file(
"Cargo.toml",
r#"
[package]
name = "foo"
version = "0.1.0"
[features]
default = ["foo"]
foo = ["dep:normal_a"]
[dependencies]
normal_a = { version = "1.0", optional = true }
normal_d = "1.0"
[build-dependencies]
build_a = "1.0"
build_d = "1.0"
[dev-dependencies]
dev_a = "1.0"
dev_d = "1.0"
"#,
)
.file("src/lib.rs", "")
.file("build.rs", "fn main() {}")
.build();
snapbox::cmd::Command::cargo_ui()
.arg("tree")
.arg("--edges=features")
.current_dir(p.root())
.assert()
.success()
.stdout_eq(file!["stdout.term.svg"])
.stderr_eq(file!["stderr.term.svg"]);
}