Skip to content

Commit 434a8fa

Browse files
committed
Add unit tests
1 parent a69cc4e commit 434a8fa

File tree

2 files changed

+137
-2
lines changed

2 files changed

+137
-2
lines changed

crates/resolver-tests/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -835,7 +835,7 @@ fn meta_test_multiple_versions_strategy() {
835835
.unwrap()
836836
.current();
837837
let reg = registry(input.clone());
838-
for this in input.iter().rev().take(10) {
838+
for this in input.iter().rev().take(11) {
839839
let res = resolve(
840840
vec![dep_req(&this.name(), &format!("={}", this.version()))],
841841
&reg,

crates/resolver-tests/tests/resolve.rs

Lines changed: 136 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ use cargo_util::is_ci;
88
use resolver_tests::{
99
assert_contains, assert_same, dep, dep_kind, dep_loc, dep_req, loc_names, names, pkg, pkg_id,
1010
pkg_loc, registry, registry_strategy, remove_dep, resolve, resolve_and_validated,
11-
resolve_with_global_context, PrettyPrintRegistry, SatResolve, ToDep, ToPkgId,
11+
resolve_with_global_context, resolve_with_global_context_raw, PrettyPrintRegistry, SatResolve,
12+
ToDep, ToPkgId,
1213
};
1314

1415
use proptest::prelude::*;
@@ -425,6 +426,112 @@ fn test_resolving_maximum_version_with_transitive_deps() {
425426
assert!(!res.contains(&("util", "1.1.1").to_pkgid()));
426427
}
427428

429+
#[test]
430+
fn test_wildcard_minor() {
431+
let reg = registry(vec![
432+
pkg!(("util", "0.1.0")),
433+
pkg!(("util", "0.1.1")),
434+
pkg!("foo" => [dep_req("util", "0.1.*")]),
435+
]);
436+
437+
let res = resolve_and_validated(
438+
vec![dep_req("util", "=0.1.0"), dep_req("foo", "1.0.0")],
439+
&reg,
440+
None,
441+
)
442+
.unwrap();
443+
444+
assert_same(
445+
&res,
446+
&names(&[("root", "1.0.0"), ("foo", "1.0.0"), ("util", "0.1.0")]),
447+
);
448+
}
449+
450+
#[test]
451+
fn test_wildcard_major() {
452+
let reg = registry(vec![
453+
pkg!("foo" => [dep_req("util", "0.*")]),
454+
pkg!(("util", "0.1.0")),
455+
pkg!(("util", "0.2.0")),
456+
]);
457+
458+
let res = resolve_and_validated(
459+
vec![dep_req("foo", "1.0.0"), dep_req("util", "=0.1.0")],
460+
&reg,
461+
None,
462+
)
463+
.unwrap();
464+
465+
assert_same(
466+
&res,
467+
&names(&[("root", "1.0.0"), ("foo", "1.0.0"), ("util", "0.1.0")]),
468+
);
469+
}
470+
471+
#[test]
472+
fn test_wildcard_major_duplicate_selection() {
473+
let reg = registry(vec![
474+
pkg!("foo" => [dep_req("util", "0.*")]),
475+
pkg!("bar" => [dep_req("util", "0.2")]),
476+
pkg!("car" => [dep_req("util", "0.1")]),
477+
pkg!(("util", "0.1.0")),
478+
pkg!(("util", "0.2.0")),
479+
]);
480+
481+
let res = resolve_with_global_context_raw(
482+
vec![
483+
dep_req("foo", "1.0.0"),
484+
dep_req("bar", "1.0.0"),
485+
dep_req("car", "1.0.0"),
486+
],
487+
&reg,
488+
&GlobalContext::default().unwrap(),
489+
)
490+
.unwrap();
491+
492+
// In this case, both 0.1.0 and 0.2.0 satisfy foo. It should pick the highest
493+
// version.
494+
assert_eq!(
495+
res.deps(pkg_id("foo")).next().unwrap().0,
496+
("util", "0.2.0").to_pkgid()
497+
);
498+
499+
let res = res.sort();
500+
501+
assert_same(
502+
&res,
503+
&names(&[
504+
("root", "1.0.0"),
505+
("foo", "1.0.0"),
506+
("bar", "1.0.0"),
507+
("car", "1.0.0"),
508+
("util", "0.1.0"),
509+
("util", "0.2.0"),
510+
]),
511+
);
512+
}
513+
514+
#[test]
515+
fn test_range_major() {
516+
let reg = registry(vec![
517+
pkg!("foo" => [dep_req("util", ">=0.1,<0.3")]),
518+
pkg!(("util", "0.1.0")),
519+
pkg!(("util", "0.2.0")),
520+
]);
521+
522+
let res = resolve_and_validated(
523+
vec![dep_req("foo", "1.0.0"), dep_req("util", "0.1.0")],
524+
&reg,
525+
None,
526+
)
527+
.unwrap();
528+
529+
assert_same(
530+
&res,
531+
&names(&[("root", "1.0.0"), ("foo", "1.0.0"), ("util", "0.1.0")]),
532+
);
533+
}
534+
428535
#[test]
429536
fn test_resolving_minimum_version_with_transitive_deps() {
430537
let reg = registry(vec![
@@ -621,6 +728,34 @@ fn resolving_with_sys_crates() {
621728

622729
let res = resolve(vec![dep_req("d", "1"), dep_req("r", "1")], &reg).unwrap();
623730

731+
assert_same(
732+
&res,
733+
&names(&[
734+
("root", "1.0.0"),
735+
("d", "1.0.0"),
736+
("r", "1.0.0"),
737+
("l-sys", "0.9.1"),
738+
("l", "0.9.1"),
739+
]),
740+
);
741+
}
742+
743+
#[test]
744+
fn resolving_with_sys_crates_duplicates() {
745+
// This is based on issues/4902
746+
// With `l` a normal library we get 2copies so everyone gets the newest compatible.
747+
// But `l-sys` a library with a links attribute we make sure there is only one.
748+
let reg = registry(vec![
749+
pkg!(("l-sys", "0.9.1")),
750+
pkg!(("l-sys", "0.10.0")),
751+
pkg!(("l", "0.9.1") => [dep_req("l-sys", ">=0.8.0, <=0.10.0")]),
752+
pkg!(("l", "0.10.0") => [dep_req("l-sys", "0.9")]),
753+
pkg!(("d", "1.0.0") => [dep_req("l", "0.10")]),
754+
pkg!(("r", "1.0.0") => [dep_req("l", "0.9")]),
755+
]);
756+
757+
let res = resolve(vec![dep_req("d", "1"), dep_req("r", "1")], &reg).unwrap();
758+
624759
assert_same(
625760
&res,
626761
&names(&[

0 commit comments

Comments
 (0)