@@ -101,6 +101,13 @@ tests = [
101
101
, runTest $ soft [ ExPref " A" $ mkvrThis 1
102
102
, ExPref " A" $ mkvrOrEarlier 2 ] $ mkTest db13 " selectPreferredVersionMultiple4" [" A" ] (Just [(" A" , 1 )])
103
103
]
104
+ , testGroup " Buildable Field" [
105
+ testBuildable " avoid building component with unknown dependency" (ExAny " unknown" )
106
+ , testBuildable " avoid building component with unknown extension" (ExExt (UnknownExtension " unknown" ))
107
+ , testBuildable " avoid building component with unknown language" (ExLang (UnknownLanguage " unknown" ))
108
+ , runTest $ mkTest dbBuildable1 " choose flags that set buildable to false" [" pkg" ] (Just [(" flag1-true" , 1 ), (" flag2-false" , 1 ), (" pkg" , 1 )])
109
+ , runTest $ mkTest dbBuildable2 " choose version that sets buildable to false" [" A" ] (Just [(" A" , 1 ), (" B" , 2 )])
110
+ ]
104
111
]
105
112
where
106
113
indep test = test { testIndepGoals = True }
@@ -433,6 +440,60 @@ dbLangs1 = [
433
440
, Right $ exAv " C" 1 [ExLang (UnknownLanguage " Haskell3000" ), ExAny " B" ]
434
441
]
435
442
443
+ -- | cabal must choose +disable-lib for "pkg" in order to avoid the unavailable
444
+ -- dependency. False is the default. The flag choice causes "pkg" to depend on
445
+ -- "true-dep".
446
+ testBuildable :: String -> ExampleDependency -> TestTree
447
+ testBuildable testName unavailableDep =
448
+ runTest $ mkTestExtLang (Just [] ) (Just [] ) db testName [" pkg" ] expected
449
+ where
450
+ expected = (Just [(" pkg" , 1 ), (" true-dep" , 1 )])
451
+ db = [
452
+ Right $ exAv " pkg" 1 [
453
+ unavailableDep
454
+ , ExFlag " disable-lib" NotBuildable (Buildable [] )
455
+ , ExTest " test" [exFlag " disable-lib"
456
+ [ExAny " true-dep" ]
457
+ [ExAny " false-dep" ]]
458
+ ]
459
+ , Right $ exAv " true-dep" 1 []
460
+ , Right $ exAv " false-dep" 1 []
461
+ ]
462
+
463
+ -- | cabal must choose +flag1 -flag2 for "pkg", which requires packages
464
+ -- "flag1-true" and "flag2-false".
465
+ dbBuildable1 :: ExampleDb
466
+ dbBuildable1 = [
467
+ Right $ exAv " pkg" 1
468
+ [ ExAny " unknown"
469
+ , ExFlag " flag1" NotBuildable (Buildable [] )
470
+ , ExFlag " flag2" NotBuildable (Buildable [] )
471
+ , ExTest " optional-test"
472
+ [ ExAny " unknown"
473
+ , ExFlag " flag1"
474
+ (Buildable [ExFlag " flag2" (Buildable [] ) NotBuildable ])
475
+ (Buildable [] )]
476
+ , ExTest " test" [ exFlag " flag1" [ExAny " flag1-true" ] [ExAny " flag1-false" ]
477
+ , exFlag " flag2" [ExAny " flag2-true" ] [ExAny " flag2-false" ]]
478
+ ]
479
+ , Right $ exAv " flag1-true" 1 []
480
+ , Right $ exAv " flag1-false" 1 []
481
+ , Right $ exAv " flag2-true" 1 []
482
+ , Right $ exAv " flag2-false" 1 []
483
+ ]
484
+
485
+ -- | cabal must pick B-2 to avoid the unknown dependency.
486
+ dbBuildable2 :: ExampleDb
487
+ dbBuildable2 = [
488
+ Right $ exAv " A" 1 [ExAny " B" ]
489
+ , Right $ exAv " B" 1 [ExAny " unknown" ]
490
+ , Right $ exAv " B" 2
491
+ [ ExAny " unknown"
492
+ , ExFlag " disable-lib" NotBuildable (Buildable [] )
493
+ ]
494
+ , Right $ exAv " B" 3 [ExAny " unknown" ]
495
+ ]
496
+
436
497
{- ------------------------------------------------------------------------------
437
498
Test options
438
499
-------------------------------------------------------------------------------}
0 commit comments