@@ -529,6 +529,50 @@ fn test_wildcard_major_coerced_by_subdepdency() {
529
529
) ;
530
530
}
531
531
532
+ #[ test]
533
+ fn test_wildcard_major_coerced_by_indirect_subdepdency ( ) {
534
+ let reg = registry ( vec ! [
535
+ pkg!( "foo" => [ dep_req( "util" , "0.1" ) ] ) ,
536
+ pkg!( "bar" => [ dep_req( "car" , "1.0.0" ) ] ) ,
537
+ pkg!( "car" => [ dep_req( "util" , "0.2" ) ] ) ,
538
+ pkg!( ( "util" , "0.1.0" ) ) ,
539
+ pkg!( ( "util" , "0.2.0" ) ) ,
540
+ pkg!( ( "util" , "0.3.0" ) ) ,
541
+ ] ) ;
542
+
543
+ let res = resolve_with_global_context_raw (
544
+ vec ! [
545
+ dep_req( "foo" , "1.0.0" ) ,
546
+ dep_req( "bar" , "1.0.0" ) ,
547
+ dep_req( "util" , "0.*" ) ,
548
+ ] ,
549
+ & reg,
550
+ & GlobalContext :: default ( ) . unwrap ( ) ,
551
+ )
552
+ . unwrap ( ) ;
553
+
554
+ // In this case, 0.1.0, 0.2.0 and 0.3.0 satisfy root. It should pick the highest
555
+ // version that exists in the dependency tree.
556
+ assert_eq ! (
557
+ res. deps( pkg_id( "root" ) ) . skip( 2 ) . next( ) . unwrap( ) . 0 ,
558
+ ( "util" , "0.2.0" ) . to_pkgid( )
559
+ ) ;
560
+
561
+ let res = res. sort ( ) ;
562
+
563
+ assert_same (
564
+ & res,
565
+ & names ( & [
566
+ ( "root" , "1.0.0" ) ,
567
+ ( "foo" , "1.0.0" ) ,
568
+ ( "bar" , "1.0.0" ) ,
569
+ ( "car" , "1.0.0" ) ,
570
+ ( "util" , "0.1.0" ) ,
571
+ ( "util" , "0.2.0" ) ,
572
+ ] ) ,
573
+ ) ;
574
+ }
575
+
532
576
#[ test]
533
577
fn test_range_major ( ) {
534
578
let reg = registry ( vec ! [
0 commit comments