Skip to content

Commit 1990793

Browse files
committed
test: add more resolver helper trait methods
1 parent 55781fd commit 1990793

File tree

4 files changed

+76
-39
lines changed

4 files changed

+76
-39
lines changed

crates/resolver-tests/src/helpers.rs

Lines changed: 39 additions & 6 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());

crates/resolver-tests/src/lib.rs

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

40-
// Verify that the resolution of cargo resolver can pass the verification of SAT
4140
pub fn resolve_and_validated(
4241
deps: Vec<Dependency>,
4342
registry: &[Summary],
4443
sat_resolver: &mut SatResolver,
4544
) -> CargoResult<Vec<(PackageId, Vec<InternedString>)>> {
46-
let resolve =
47-
resolve_with_global_context_raw(deps.clone(), registry, &GlobalContext::default().unwrap());
45+
resolve_and_validated_raw(deps, registry, pkg_id("root"), sat_resolver)
46+
}
47+
48+
// Verify that the resolution of cargo resolver can pass the verification of SAT
49+
pub fn resolve_and_validated_raw(
50+
deps: Vec<Dependency>,
51+
registry: &[Summary],
52+
root_pkg_id: PackageId,
53+
sat_resolver: &mut SatResolver,
54+
) -> CargoResult<Vec<(PackageId, Vec<InternedString>)>> {
55+
let resolve = resolve_with_global_context_raw(
56+
deps.clone(),
57+
registry,
58+
root_pkg_id,
59+
&GlobalContext::default().unwrap(),
60+
);
4861

4962
match resolve {
5063
Err(e) => {
@@ -57,7 +70,7 @@ pub fn resolve_and_validated(
5770
Err(e)
5871
}
5972
Ok(resolve) => {
60-
let mut stack = vec![pkg_id("root")];
73+
let mut stack = vec![root_pkg_id];
6174
let mut used = HashSet::new();
6275
let mut links = HashSet::new();
6376
while let Some(p) = stack.pop() {
@@ -102,13 +115,14 @@ pub fn resolve_with_global_context(
102115
registry: &[Summary],
103116
gctx: &GlobalContext,
104117
) -> CargoResult<Vec<(PackageId, Vec<InternedString>)>> {
105-
let resolve = resolve_with_global_context_raw(deps, registry, gctx)?;
118+
let resolve = resolve_with_global_context_raw(deps, registry, pkg_id("root"), gctx)?;
106119
Ok(collect_features(&resolve))
107120
}
108121

109122
pub fn resolve_with_global_context_raw(
110123
deps: Vec<Dependency>,
111124
registry: &[Summary],
125+
root_pkg_id: PackageId,
112126
gctx: &GlobalContext,
113127
) -> CargoResult<Resolve> {
114128
struct MyRegistry<'a> {
@@ -171,14 +185,8 @@ pub fn resolve_with_global_context_raw(
171185
used: HashSet::new(),
172186
};
173187

174-
let root_summary = Summary::new(
175-
pkg_id("root"),
176-
deps,
177-
&BTreeMap::new(),
178-
None::<&String>,
179-
None,
180-
)
181-
.unwrap();
188+
let root_summary =
189+
Summary::new(root_pkg_id, deps, &BTreeMap::new(), None::<&String>, None).unwrap();
182190

183191
let opts = ResolveOpts::everything();
184192

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)