Skip to content

Commit 04e4270

Browse files
committed
test: add more resolver helper methods
1 parent cc4c3e7 commit 04e4270

File tree

4 files changed

+91
-40
lines changed

4 files changed

+91
-40
lines changed

crates/resolver-tests/src/helpers.rs

Lines changed: 54 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,40 +8,60 @@ use cargo::util::IntoUrl;
88

99
pub trait ToDep {
1010
fn to_dep(self) -> Dependency;
11-
fn to_opt_dep(self) -> Dependency;
12-
fn to_dep_with(self, features: &[&'static str]) -> Dependency;
11+
fn opt(self) -> Dependency;
12+
fn with(self, features: &[&'static str]) -> Dependency;
13+
fn with_default(self) -> Dependency;
14+
fn rename(self, name: &str) -> Dependency;
1315
}
1416

1517
impl ToDep for &'static str {
1618
fn to_dep(self) -> Dependency {
1719
Dependency::parse(self, Some("1.0.0"), registry_loc()).unwrap()
1820
}
19-
fn to_opt_dep(self) -> Dependency {
21+
fn opt(self) -> Dependency {
2022
let mut dep = self.to_dep();
2123
dep.set_optional(true);
2224
dep
2325
}
24-
fn to_dep_with(self, features: &[&'static str]) -> Dependency {
26+
fn with(self, features: &[&'static str]) -> Dependency {
2527
let mut dep = self.to_dep();
2628
dep.set_default_features(false);
2729
dep.set_features(features.into_iter().copied());
2830
dep
2931
}
32+
fn with_default(self) -> Dependency {
33+
let mut dep = self.to_dep();
34+
dep.set_default_features(true);
35+
dep
36+
}
37+
fn rename(self, name: &str) -> Dependency {
38+
let mut dep = self.to_dep();
39+
dep.set_explicit_name_in_toml(name);
40+
dep
41+
}
3042
}
3143

3244
impl ToDep for Dependency {
3345
fn to_dep(self) -> Dependency {
3446
self
3547
}
36-
fn to_opt_dep(mut self) -> Dependency {
48+
fn opt(mut self) -> Dependency {
3749
self.set_optional(true);
3850
self
3951
}
40-
fn to_dep_with(mut self, features: &[&'static str]) -> Dependency {
52+
fn with(mut self, features: &[&'static str]) -> Dependency {
4153
self.set_default_features(false);
4254
self.set_features(features.into_iter().copied());
4355
self
4456
}
57+
fn with_default(mut self) -> Dependency {
58+
self.set_default_features(true);
59+
self
60+
}
61+
fn rename(mut self, name: &str) -> Dependency {
62+
self.set_explicit_name_in_toml(name);
63+
self
64+
}
4565
}
4666

4767
pub trait ToPkgId {
@@ -120,10 +140,23 @@ pub fn pkg_dep_with<T: ToPkgId>(
120140
Summary::new(name.to_pkgid(), dep, &features, link, None).unwrap()
121141
}
122142

143+
pub fn pkg_dep_link<T: ToPkgId>(name: T, link: &str, dep: Vec<Dependency>) -> Summary {
144+
Summary::new(name.to_pkgid(), dep, &BTreeMap::new(), Some(link), None).unwrap()
145+
}
146+
123147
pub fn pkg_id(name: &str) -> PackageId {
124148
PackageId::try_new(name, "1.0.0", registry_loc()).unwrap()
125149
}
126150

151+
pub fn pkg_id_source(name: &str, source: &str) -> PackageId {
152+
PackageId::try_new(
153+
name,
154+
"1.0.0",
155+
SourceId::for_registry(&source.into_url().unwrap()).unwrap(),
156+
)
157+
.unwrap()
158+
}
159+
127160
fn pkg_id_loc(name: &str, loc: &str) -> PackageId {
128161
let remote = loc.into_url();
129162
let master = GitReference::Branch("master".to_string());
@@ -169,6 +202,12 @@ pub fn dep_req_kind(name: &str, req: &str, kind: DepKind) -> Dependency {
169202
dep
170203
}
171204

205+
pub fn dep_req_platform(name: &str, req: &str, platform: &str) -> Dependency {
206+
let mut dep = dep_req(name, req);
207+
dep.set_platform(Some(platform.parse().unwrap()));
208+
dep
209+
}
210+
172211
pub fn dep_loc(name: &str, location: &str) -> Dependency {
173212
let url = location.into_url().unwrap();
174213
let master = GitReference::Branch("master".to_string());
@@ -177,7 +216,15 @@ pub fn dep_loc(name: &str, location: &str) -> Dependency {
177216
}
178217

179218
pub fn dep_kind(name: &str, kind: DepKind) -> Dependency {
180-
dep(name).set_kind(kind).clone()
219+
let mut dep = dep(name);
220+
dep.set_kind(kind);
221+
dep
222+
}
223+
224+
pub fn dep_platform(name: &str, platform: &str) -> Dependency {
225+
let mut dep = dep(name);
226+
dep.set_platform(Some(platform.parse().unwrap()));
227+
dep
181228
}
182229

183230
pub fn registry(pkgs: Vec<Summary>) -> Vec<Summary> {

crates/resolver-tests/src/lib.rs

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,27 @@ pub fn resolve(deps: Vec<Dependency>, registry: &[Summary]) -> CargoResult<Vec<P
4141
)
4242
}
4343

44-
// Verify that the resolution of cargo resolver can pass the verification of SAT
4544
pub fn resolve_and_validated(
4645
deps: Vec<Dependency>,
4746
registry: &[Summary],
4847
sat_resolver: &mut SatResolver,
4948
) -> CargoResult<Vec<(PackageId, Vec<InternedString>)>> {
50-
let resolve =
51-
resolve_with_global_context_raw(deps.clone(), registry, &GlobalContext::default().unwrap());
49+
resolve_and_validated_raw(deps, registry, pkg_id("root"), sat_resolver)
50+
}
51+
52+
// Verify that the resolution of cargo resolver can pass the verification of SAT
53+
pub fn resolve_and_validated_raw(
54+
deps: Vec<Dependency>,
55+
registry: &[Summary],
56+
root_pkg_id: PackageId,
57+
sat_resolver: &mut SatResolver,
58+
) -> CargoResult<Vec<(PackageId, Vec<InternedString>)>> {
59+
let resolve = resolve_with_global_context_raw(
60+
deps.clone(),
61+
registry,
62+
root_pkg_id,
63+
&GlobalContext::default().unwrap(),
64+
);
5265

5366
match resolve {
5467
Err(e) => {
@@ -61,7 +74,7 @@ pub fn resolve_and_validated(
6174
Err(e)
6275
}
6376
Ok(resolve) => {
64-
let mut stack = vec![pkg_id("root")];
77+
let mut stack = vec![root_pkg_id];
6578
let mut used = HashSet::new();
6679
let mut links = HashSet::new();
6780
while let Some(p) = stack.pop() {
@@ -106,13 +119,14 @@ pub fn resolve_with_global_context(
106119
registry: &[Summary],
107120
gctx: &GlobalContext,
108121
) -> CargoResult<Vec<(PackageId, Vec<InternedString>)>> {
109-
let resolve = resolve_with_global_context_raw(deps, registry, gctx)?;
122+
let resolve = resolve_with_global_context_raw(deps, registry, pkg_id("root"), gctx)?;
110123
Ok(collect_features(&resolve))
111124
}
112125

113126
pub fn resolve_with_global_context_raw(
114127
deps: Vec<Dependency>,
115128
registry: &[Summary],
129+
root_pkg_id: PackageId,
116130
gctx: &GlobalContext,
117131
) -> CargoResult<Resolve> {
118132
struct MyRegistry<'a> {
@@ -175,14 +189,8 @@ pub fn resolve_with_global_context_raw(
175189
used: HashSet::new(),
176190
};
177191

178-
let root_summary = Summary::new(
179-
pkg_id("root"),
180-
deps,
181-
&BTreeMap::new(),
182-
None::<&String>,
183-
None,
184-
)
185-
.unwrap();
192+
let root_summary =
193+
Summary::new(root_pkg_id, deps, &BTreeMap::new(), None::<&String>, None).unwrap();
186194

187195
let opts = ResolveOpts::everything();
188196

crates/resolver-tests/tests/resolve.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use cargo::util::GlobalContext;
55
use resolver_tests::{
66
helpers::{
77
assert_contains, assert_same, dep, dep_kind, dep_loc, dep_req, loc_names, names, pkg_id,
8-
pkg_loc, registry, ToDep, ToPkgId,
8+
pkg_loc, registry, ToPkgId,
99
},
1010
pkg, resolve, resolve_with_global_context,
1111
};
@@ -14,7 +14,7 @@ use resolver_tests::{
1414
#[should_panic(expected = "assertion failed: !name.is_empty()")]
1515
fn test_dependency_with_empty_name() {
1616
// Bug 5229, dependency-names must not be empty
17-
"".to_dep();
17+
dep("");
1818
}
1919

2020
#[test]

crates/resolver-tests/tests/validated.rs

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -129,20 +129,16 @@ fn registry_with_features() {
129129
pkg!("b"),
130130
pkg_dep_with(
131131
"image",
132-
vec!["a".to_opt_dep(), "b".to_opt_dep(), "jpg".to_dep()],
132+
vec!["a".opt(), "b".opt(), "jpg".to_dep()],
133133
&[("default", &["a"]), ("b", &["dep:b"])],
134134
),
135135
pkg!("jpg"),
136136
pkg!("log"),
137137
pkg!("man"),
138-
pkg_dep_with("rgb", vec!["man".to_opt_dep()], &[("man", &["dep:man"])]),
138+
pkg_dep_with("rgb", vec!["man".opt()], &[("man", &["dep:man"])]),
139139
pkg_dep_with(
140140
"dep",
141-
vec![
142-
"image".to_dep_with(&["b"]),
143-
"log".to_opt_dep(),
144-
"rgb".to_opt_dep(),
145-
],
141+
vec!["image".with(&["b"]), "log".opt(), "rgb".opt()],
146142
&[
147143
("default", &["log", "image/default"]),
148144
("man", &["rgb?/man"]),
@@ -151,11 +147,11 @@ fn registry_with_features() {
151147
]);
152148

153149
for deps in [
154-
vec!["dep".to_dep_with(&["default", "man", "log", "rgb"])],
155-
vec!["dep".to_dep_with(&["default"])],
156-
vec!["dep".to_dep_with(&[])],
157-
vec!["dep".to_dep_with(&["man"])],
158-
vec!["dep".to_dep_with(&["man", "rgb"])],
150+
vec!["dep".with(&["default", "man", "log", "rgb"])],
151+
vec!["dep".with(&["default"])],
152+
vec!["dep".with(&[])],
153+
vec!["dep".with(&["man"])],
154+
vec!["dep".with(&["man", "rgb"])],
159155
] {
160156
let mut sat_resolver = SatResolver::new(&reg);
161157
assert!(resolve_and_validated(deps, &reg, &mut sat_resolver).is_ok());
@@ -166,7 +162,7 @@ fn registry_with_features() {
166162
fn missing_feature() {
167163
let reg = registry(vec![pkg!("a")]);
168164
let mut sat_resolver = SatResolver::new(&reg);
169-
assert!(resolve_and_validated(vec!["a".to_dep_with(&["f"])], &reg, &mut sat_resolver).is_err());
165+
assert!(resolve_and_validated(vec!["a".with(&["f"])], &reg, &mut sat_resolver).is_err());
170166
}
171167

172168
#[test]
@@ -187,7 +183,7 @@ fn conflict_feature_and_sys() {
187183
pkg_dep("dep", vec![dep_req("a", "2.0.0")]),
188184
]);
189185

190-
let deps = vec![dep_req("a", "*").to_dep_with(&["f"]), dep("dep")];
186+
let deps = vec![dep_req("a", "*").with(&["f"]), dep("dep")];
191187
let mut sat_resolver = SatResolver::new(&reg);
192188
assert!(resolve_and_validated(deps, &reg, &mut sat_resolver).is_err());
193189
}
@@ -197,16 +193,16 @@ fn conflict_weak_features() {
197193
let reg = registry(vec![
198194
pkg(("a-sys", "1.0.0")),
199195
pkg(("a-sys", "2.0.0")),
200-
pkg_dep("a1", vec![dep_req("a-sys", "1.0.0").to_opt_dep()]),
201-
pkg_dep("a2", vec![dep_req("a-sys", "2.0.0").to_opt_dep()]),
196+
pkg_dep("a1", vec![dep_req("a-sys", "1.0.0").opt()]),
197+
pkg_dep("a2", vec![dep_req("a-sys", "2.0.0").opt()]),
202198
pkg_dep_with(
203199
"dep",
204-
vec!["a1".to_opt_dep(), "a2".to_opt_dep()],
200+
vec!["a1".opt(), "a2".opt()],
205201
&[("a1", &["a1?/a-sys"]), ("a2", &["a2?/a-sys"])],
206202
),
207203
]);
208204

209-
let deps = vec![dep("dep").to_dep_with(&["a1", "a2"])];
205+
let deps = vec![dep("dep").with(&["a1", "a2"])];
210206

211207
// The following asserts should be updated when support for weak dependencies
212208
// is added to the dependency resolver.

0 commit comments

Comments
 (0)