Skip to content

Commit 1727f43

Browse files
committed
Test the solver's use of the Buildable field.
1 parent 7811f78 commit 1727f43

File tree

1 file changed

+61
-0
lines changed
  • cabal-install/tests/UnitTests/Distribution/Client/Dependency/Modular

1 file changed

+61
-0
lines changed

cabal-install/tests/UnitTests/Distribution/Client/Dependency/Modular/Solver.hs

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,13 @@ tests = [
101101
, runTest $ soft [ ExPref "A" $ mkvrThis 1
102102
, ExPref "A" $ mkvrOrEarlier 2] $ mkTest db13 "selectPreferredVersionMultiple4" ["A"] (Just [("A", 1)])
103103
]
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+
]
104111
]
105112
where
106113
indep test = test { testIndepGoals = True }
@@ -433,6 +440,60 @@ dbLangs1 = [
433440
, Right $ exAv "C" 1 [ExLang (UnknownLanguage "Haskell3000"), ExAny "B"]
434441
]
435442

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+
436497
{-------------------------------------------------------------------------------
437498
Test options
438499
-------------------------------------------------------------------------------}

0 commit comments

Comments
 (0)