Skip to content

Commit 7532074

Browse files
committed
Add unit tests
1 parent 19141bd commit 7532074

File tree

1 file changed

+170
-1
lines changed

1 file changed

+170
-1
lines changed

crates/resolver-tests/tests/resolve.rs

Lines changed: 170 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,174 @@ 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_range_major() {
473+
let reg = registry(vec![
474+
pkg!("foo" => [dep_req("util", ">=0.1,<0.3")]),
475+
pkg!(("util", "0.1.0")),
476+
pkg!(("util", "0.2.0")),
477+
]);
478+
479+
let res = resolve_and_validated(
480+
vec![dep_req("foo", "1.0.0"), dep_req("util", "0.1.0")],
481+
&reg,
482+
None,
483+
)
484+
.unwrap();
485+
486+
assert_same(
487+
&res,
488+
&names(&[("root", "1.0.0"), ("foo", "1.0.0"), ("util", "0.1.0")]),
489+
);
490+
}
491+
492+
#[test]
493+
fn test_wildcard_major_duplicate_selection() {
494+
let reg = registry(vec![
495+
pkg!("foo" => [dep_req("util", "0.*")]),
496+
pkg!("bar" => [dep_req("util", "0.2")]),
497+
pkg!("car" => [dep_req("util", "0.1")]),
498+
pkg!(("util", "0.1.0")),
499+
pkg!(("util", "0.2.0")),
500+
]);
501+
502+
let res = resolve_with_global_context_raw(
503+
vec![
504+
dep_req("foo", "1.0.0"),
505+
dep_req("bar", "1.0.0"),
506+
dep_req("car", "1.0.0"),
507+
],
508+
&reg,
509+
&GlobalContext::default().unwrap(),
510+
)
511+
.unwrap();
512+
513+
// In this case, both 0.1.0 and 0.2.0 satisfy foo. It should pick the highest
514+
// version.
515+
assert_eq!(
516+
res.deps(pkg_id("foo")).next().unwrap().0,
517+
("util", "0.2.0").to_pkgid()
518+
);
519+
520+
let res = res.sort();
521+
522+
assert_same(
523+
&res,
524+
&names(&[
525+
("root", "1.0.0"),
526+
("foo", "1.0.0"),
527+
("bar", "1.0.0"),
528+
("car", "1.0.0"),
529+
("util", "0.1.0"),
530+
("util", "0.2.0"),
531+
]),
532+
);
533+
}
534+
535+
#[test]
536+
fn test_wildcard_major_coerced_by_subdependency() {
537+
let reg = registry(vec![
538+
pkg!("foo" => [dep_req("util", "0.1")]),
539+
pkg!(("util", "0.1.0")),
540+
pkg!(("util", "0.2.0")),
541+
]);
542+
543+
let res = resolve(vec![dep_req("foo", "1.0.0"), dep_req("util", "0.*")], &reg).unwrap();
544+
545+
// In this case, both 0.1.0 and 0.2.0 satisfy root, but it's being coerced
546+
// by the subdependency of foo.
547+
assert_same(
548+
&res,
549+
&names(&[("root", "1.0.0"), ("foo", "1.0.0"), ("util", "0.1.0")]),
550+
);
551+
}
552+
553+
#[test]
554+
fn test_wildcard_major_coerced_by_indirect_subdependency() {
555+
let reg = registry(vec![
556+
pkg!("foo" => [dep_req("util", "0.1")]),
557+
pkg!("bar" => [dep_req("car", "1.0.0")]),
558+
pkg!("car" => [dep_req("util", "0.2")]),
559+
pkg!(("util", "0.1.0")),
560+
pkg!(("util", "0.2.0")),
561+
pkg!(("util", "0.3.0")),
562+
]);
563+
564+
let res = resolve_with_global_context_raw(
565+
vec![
566+
dep_req("foo", "1.0.0"),
567+
dep_req("bar", "1.0.0"),
568+
dep_req("util", "0.*"),
569+
],
570+
&reg,
571+
&GlobalContext::default().unwrap(),
572+
)
573+
.unwrap();
574+
575+
// In this case, 0.1.0, 0.2.0 and 0.3.0 satisfy root. It should pick the highest
576+
// version that exists in the dependency tree.
577+
assert_eq!(
578+
res.deps(pkg_id("root")).skip(2).next().unwrap().0,
579+
("util", "0.2.0").to_pkgid()
580+
);
581+
582+
let res = res.sort();
583+
584+
assert_same(
585+
&res,
586+
&names(&[
587+
("root", "1.0.0"),
588+
("foo", "1.0.0"),
589+
("bar", "1.0.0"),
590+
("car", "1.0.0"),
591+
("util", "0.1.0"),
592+
("util", "0.2.0"),
593+
]),
594+
);
595+
}
596+
428597
#[test]
429598
fn test_resolving_minimum_version_with_transitive_deps() {
430599
let reg = registry(vec![

0 commit comments

Comments
 (0)