Skip to content

Commit b05b34b

Browse files
committed
test(resolver): Additional direct minimal version tests
1 parent 8728cca commit b05b34b

File tree

1 file changed

+214
-4
lines changed

1 file changed

+214
-4
lines changed

tests/testsuite/direct_minimal_versions.rs

+214-4
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,8 @@
55
use cargo_test_support::project;
66
use cargo_test_support::registry::Package;
77

8-
// Ensure that the "-Z minimal-versions" CLI option works and the minimal
9-
// version of a dependency ends up in the lock file.
108
#[cargo_test]
11-
fn minimal_version_cli() {
9+
fn simple() {
1210
Package::new("dep", "1.0.0").publish();
1311
Package::new("dep", "1.1.0").publish();
1412

@@ -34,5 +32,217 @@ fn minimal_version_cli() {
3432

3533
let lock = p.read_lockfile();
3634

37-
assert!(!lock.contains("1.1.0"));
35+
assert!(
36+
lock.contains("1.0.0"),
37+
"dep minimal version must be present"
38+
);
39+
assert!(
40+
!lock.contains("1.1.0"),
41+
"dep maximimal version cannot be present"
42+
);
43+
}
44+
45+
#[cargo_test]
46+
fn mixed_dependencies() {
47+
Package::new("dep", "1.0.0").publish();
48+
Package::new("dep", "1.1.0").publish();
49+
Package::new("dep", "1.2.0").publish();
50+
51+
let p = project()
52+
.file(
53+
"Cargo.toml",
54+
r#"
55+
[package]
56+
name = "foo"
57+
authors = []
58+
version = "0.0.1"
59+
60+
[dependencies]
61+
dep = "1.0"
62+
63+
[dev-dependencies]
64+
dep = "1.1"
65+
"#,
66+
)
67+
.file("src/main.rs", "fn main() {}")
68+
.build();
69+
70+
p.cargo("generate-lockfile -Zminimal-versions")
71+
.masquerade_as_nightly_cargo(&["minimal-versions"])
72+
.run();
73+
74+
let lock = p.read_lockfile();
75+
76+
assert!(
77+
!lock.contains("1.0.0"),
78+
"dep incompatible version cannot be present"
79+
);
80+
assert!(
81+
lock.contains("1.1.0"),
82+
"dep minimal version must be present"
83+
);
84+
assert!(
85+
!lock.contains("1.2.0"),
86+
"dep maximimal version cannot be present"
87+
);
88+
}
89+
90+
#[cargo_test]
91+
fn yanked() {
92+
Package::new("dep", "1.0.0").yanked(true).publish();
93+
Package::new("dep", "1.1.0").publish();
94+
Package::new("dep", "1.2.0").publish();
95+
96+
let p = project()
97+
.file(
98+
"Cargo.toml",
99+
r#"
100+
[package]
101+
name = "foo"
102+
authors = []
103+
version = "0.0.1"
104+
105+
[dependencies]
106+
dep = "1.0"
107+
"#,
108+
)
109+
.file("src/main.rs", "fn main() {}")
110+
.build();
111+
112+
p.cargo("generate-lockfile -Zminimal-versions")
113+
.masquerade_as_nightly_cargo(&["minimal-versions"])
114+
.run();
115+
116+
let lock = p.read_lockfile();
117+
118+
assert!(
119+
lock.contains("1.1.0"),
120+
"dep minimal version must be present"
121+
);
122+
assert!(
123+
!lock.contains("1.0.0"),
124+
"yanked minimal version must be skipped"
125+
);
126+
assert!(
127+
!lock.contains("1.2.0"),
128+
"dep maximimal version cannot be present"
129+
);
130+
}
131+
132+
#[cargo_test]
133+
fn indirect() {
134+
Package::new("indirect", "2.0.0").publish();
135+
Package::new("indirect", "2.1.0").publish();
136+
Package::new("indirect", "2.2.0").publish();
137+
Package::new("direct", "1.0.0")
138+
.dep("indirect", "2.1")
139+
.publish();
140+
Package::new("direct", "1.1.0")
141+
.dep("indirect", "2.1")
142+
.publish();
143+
144+
let p = project()
145+
.file(
146+
"Cargo.toml",
147+
r#"
148+
[package]
149+
name = "foo"
150+
authors = []
151+
version = "0.0.1"
152+
153+
[dependencies]
154+
direct = "1.0"
155+
"#,
156+
)
157+
.file("src/main.rs", "fn main() {}")
158+
.build();
159+
160+
p.cargo("generate-lockfile -Zminimal-versions")
161+
.masquerade_as_nightly_cargo(&["minimal-versions"])
162+
.run();
163+
164+
let lock = p.read_lockfile();
165+
166+
assert!(
167+
lock.contains("1.0.0"),
168+
"direct minimal version must be present"
169+
);
170+
assert!(
171+
!lock.contains("1.1.0"),
172+
"direct maximimal version cannot be present"
173+
);
174+
assert!(
175+
!lock.contains("2.0.0"),
176+
"indirect unmatched version cannot be present"
177+
);
178+
assert!(
179+
lock.contains("2.1.0"),
180+
"indirect minimal version must be present"
181+
);
182+
assert!(
183+
!lock.contains("2.2.0"),
184+
"indirect maximimal version cannot be present"
185+
);
186+
}
187+
188+
#[cargo_test]
189+
fn indirect_conflict() {
190+
Package::new("indirect", "2.0.0").publish();
191+
Package::new("indirect", "2.1.0").publish();
192+
Package::new("indirect", "2.2.0").publish();
193+
Package::new("direct", "1.0.0")
194+
.dep("indirect", "2.1")
195+
.publish();
196+
Package::new("direct", "1.1.0")
197+
.dep("indirect", "2.1")
198+
.publish();
199+
200+
let p = project()
201+
.file(
202+
"Cargo.toml",
203+
r#"
204+
[package]
205+
name = "foo"
206+
authors = []
207+
version = "0.0.1"
208+
209+
[dependencies]
210+
direct = "1.0"
211+
indirect = "2.0"
212+
"#,
213+
)
214+
.file("src/main.rs", "fn main() {}")
215+
.build();
216+
217+
p.cargo("generate-lockfile -Zminimal-versions")
218+
.masquerade_as_nightly_cargo(&["minimal-versions"])
219+
.with_stderr(
220+
"\
221+
[UPDATING] [..]
222+
",
223+
)
224+
.run();
225+
226+
let lock = p.read_lockfile();
227+
228+
assert!(
229+
lock.contains("1.0.0"),
230+
"direct minimal version must be present"
231+
);
232+
assert!(
233+
!lock.contains("1.1.0"),
234+
"direct maximimal version cannot be present"
235+
);
236+
assert!(
237+
!lock.contains("2.0.0"),
238+
"indirect unmatched version cannot be present"
239+
);
240+
assert!(
241+
lock.contains("2.1.0"),
242+
"indirect minimal version must be present"
243+
);
244+
assert!(
245+
!lock.contains("2.2.0"),
246+
"indirect maximimal version cannot be present"
247+
);
38248
}

0 commit comments

Comments
 (0)