@@ -177,6 +177,47 @@ fn missing_dep_feature() {
177
177
assert ! ( resolve_and_validated( deps, & reg, & mut sat_resolver) . is_err( ) ) ;
178
178
}
179
179
180
+ #[ test]
181
+ fn missing_weak_dep_feature ( ) {
182
+ let reg = registry ( vec ! [
183
+ pkg( "a" ) ,
184
+ pkg_dep_with( "dep1" , vec![ dep( "a" ) ] , & [ ( "f" , & [ "a/a" ] ) ] ) ,
185
+ pkg_dep_with( "dep2" , vec![ "a" . opt( ) ] , & [ ( "f" , & [ "a/a" ] ) ] ) ,
186
+ pkg_dep_with( "dep3" , vec![ "a" . opt( ) ] , & [ ( "f" , & [ "a?/a" ] ) ] ) ,
187
+ pkg_dep_with( "dep4" , vec![ "x" . opt( ) ] , & [ ( "f" , & [ "x?/a" ] ) ] ) ,
188
+ ] ) ;
189
+
190
+ let deps = vec ! [ dep( "dep1" ) . with( & [ "f" ] ) ] ;
191
+ let mut sat_resolver = SatResolver :: new ( & reg) ;
192
+ assert ! ( resolve_and_validated( deps, & reg, & mut sat_resolver) . is_err( ) ) ;
193
+
194
+ let deps = vec ! [ dep( "dep2" ) . with( & [ "f" ] ) ] ;
195
+ let mut sat_resolver = SatResolver :: new ( & reg) ;
196
+ assert ! ( resolve_and_validated( deps, & reg, & mut sat_resolver) . is_err( ) ) ;
197
+
198
+ let deps = vec ! [ dep( "dep2" ) . with( & [ "a" , "f" ] ) ] ;
199
+ let mut sat_resolver = SatResolver :: new ( & reg) ;
200
+ assert ! ( resolve_and_validated( deps, & reg, & mut sat_resolver) . is_err( ) ) ;
201
+
202
+ // Weak dependencies are not supported yet in the dependency resolver
203
+ let deps = vec ! [ dep( "dep3" ) . with( & [ "f" ] ) ] ;
204
+ assert ! ( resolve( deps. clone( ) , & reg) . is_err( ) ) ;
205
+ assert ! ( SatResolver :: new( & reg) . sat_resolve( & deps) ) ;
206
+
207
+ let deps = vec ! [ dep( "dep3" ) . with( & [ "a" , "f" ] ) ] ;
208
+ let mut sat_resolver = SatResolver :: new ( & reg) ;
209
+ assert ! ( resolve_and_validated( deps, & reg, & mut sat_resolver) . is_err( ) ) ;
210
+
211
+ // Weak dependencies are not supported yet in the dependency resolver
212
+ let deps = vec ! [ dep( "dep4" ) . with( & [ "f" ] ) ] ;
213
+ assert ! ( resolve( deps. clone( ) , & reg) . is_err( ) ) ;
214
+ assert ! ( SatResolver :: new( & reg) . sat_resolve( & deps) ) ;
215
+
216
+ let deps = vec ! [ dep( "dep4" ) . with( & [ "x" , "f" ] ) ] ;
217
+ let mut sat_resolver = SatResolver :: new ( & reg) ;
218
+ assert ! ( resolve_and_validated( deps, & reg, & mut sat_resolver) . is_err( ) ) ;
219
+ }
220
+
180
221
#[ test]
181
222
fn conflict_feature_and_sys ( ) {
182
223
let reg = registry ( vec ! [
@@ -299,3 +340,71 @@ fn multiple_dep_kinds_with_different_packages() {
299
340
let mut sat_resolver = SatResolver :: new ( & reg) ;
300
341
assert ! ( resolve_and_validated( deps, & reg, & mut sat_resolver) . is_err( ) ) ;
301
342
}
343
+
344
+ #[ test]
345
+ fn dep_feature_with_shadowing_feature ( ) {
346
+ let reg = registry ( vec ! [
347
+ pkg_dep_with( "a" , vec![ ] , & [ ( "b" , & [ ] ) ] ) ,
348
+ pkg_dep_with(
349
+ "dep" ,
350
+ vec![ "a" . opt( ) . rename( "aa" ) , "c" . opt( ) ] ,
351
+ & [ ( "default" , & [ "aa/b" ] ) , ( "aa" , & [ "c" ] ) ] ,
352
+ ) ,
353
+ ] ) ;
354
+
355
+ let deps = vec ! [ "dep" . with( & [ "default" ] ) ] ;
356
+ let mut sat_resolver = SatResolver :: new ( & reg) ;
357
+ assert ! ( resolve_and_validated( deps, & reg, & mut sat_resolver) . is_err( ) ) ;
358
+ }
359
+
360
+ #[ test]
361
+ fn dep_feature_not_optional_with_shadowing_feature ( ) {
362
+ let reg = registry ( vec ! [
363
+ pkg_dep_with( "a" , vec![ ] , & [ ( "b" , & [ ] ) ] ) ,
364
+ pkg_dep_with(
365
+ "dep" ,
366
+ vec![ "a" . rename( "aa" ) , "c" . opt( ) ] ,
367
+ & [ ( "default" , & [ "aa/b" ] ) , ( "aa" , & [ "c" ] ) ] ,
368
+ ) ,
369
+ ] ) ;
370
+
371
+ let deps = vec ! [ "dep" . with( & [ "default" ] ) ] ;
372
+ let mut sat_resolver = SatResolver :: new ( & reg) ;
373
+ assert ! ( resolve_and_validated( deps, & reg, & mut sat_resolver) . is_ok( ) ) ;
374
+ }
375
+
376
+ #[ test]
377
+ fn dep_feature_weak_with_shadowing_feature ( ) {
378
+ let reg = registry ( vec ! [
379
+ pkg_dep_with( "a" , vec![ ] , & [ ( "b" , & [ ] ) ] ) ,
380
+ pkg_dep_with(
381
+ "dep" ,
382
+ vec![ "a" . opt( ) . rename( "aa" ) , "c" . opt( ) ] ,
383
+ & [ ( "default" , & [ "aa?/b" ] ) , ( "aa" , & [ "c" ] ) ] ,
384
+ ) ,
385
+ ] ) ;
386
+
387
+ let deps = vec ! [ "dep" . with( & [ "default" ] ) ] ;
388
+ let mut sat_resolver = SatResolver :: new ( & reg) ;
389
+ assert ! ( resolve_and_validated( deps, & reg, & mut sat_resolver) . is_ok( ) ) ;
390
+ }
391
+
392
+ #[ test]
393
+ fn dep_feature_duplicate_with_shadowing_feature ( ) {
394
+ let reg = registry ( vec ! [
395
+ pkg_dep_with( "a" , vec![ ] , & [ ( "b" , & [ ] ) ] ) ,
396
+ pkg_dep_with(
397
+ "dep" ,
398
+ vec![
399
+ "a" . opt( ) . rename( "aa" ) ,
400
+ dep_kind( "a" , DepKind :: Build ) . rename( "aa" ) ,
401
+ "c" . opt( ) ,
402
+ ] ,
403
+ & [ ( "default" , & [ "aa/b" ] ) , ( "aa" , & [ "c" ] ) ] ,
404
+ ) ,
405
+ ] ) ;
406
+
407
+ let deps = vec ! [ "dep" . with( & [ "default" ] ) ] ;
408
+ let mut sat_resolver = SatResolver :: new ( & reg) ;
409
+ assert ! ( resolve_and_validated( deps, & reg, & mut sat_resolver) . is_err( ) ) ;
410
+ }
0 commit comments