Skip to content

Commit 21929f1

Browse files
committed
Add solver unit tests for sub-library dependencies (issue haskell#6039).
1 parent 6599f77 commit 21929f1

File tree

1 file changed

+57
-1
lines changed
  • cabal-install/tests/UnitTests/Distribution/Solver/Modular

1 file changed

+57
-1
lines changed

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

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ tests = [
281281
, runTest $ mkTest dbBJ7 "bj7" ["A"] (solverSuccess [("A", 1), ("B", 1), ("C", 1)])
282282
, runTest $ indep $ mkTest dbBJ8 "bj8" ["A", "B"] (solverSuccess [("A", 1), ("B", 1), ("C", 1)])
283283
]
284-
, testGroup "library dependencies" [
284+
, testGroup "main library dependencies" [
285285
let db = [Right $ exAvNoLibrary "A" 1 `withExe` exExe "exe" []]
286286
in runTest $ mkTest db "install build target without a library" ["A"] $
287287
solverSuccess [("A", 1)]
@@ -298,6 +298,62 @@ tests = [
298298
in runTest $ mkTest db "choose version of build-depends dependency that has a library" ["A"] $
299299
solverSuccess [("A", 1), ("B", 1)]
300300
]
301+
, testGroup "sub-library dependencies" [
302+
let db = [ Right $ exAv "A" 1 [ExSubLibAny "B" "sub-lib"]
303+
, Right $ exAv "B" 1 [] ]
304+
in runTest $
305+
mkTest db "reject package that is missing required sub-library" ["A"] $
306+
solverFailure $ isInfixOf $
307+
"rejecting: B-1.0.0 (does not contain library 'sub-lib', which is required by A)"
308+
309+
, let db = [ Right $ exAv "A" 1 [ExSubLibAny "B" "sub-lib"]
310+
, Right $ exAvNoLibrary "B" 1 `withSubLibrary` exSubLib "sub-lib" [] ]
311+
in runTest $
312+
mkTest db "reject package with private but required sub-library" ["A"] $
313+
solverFailure $ isInfixOf $
314+
"rejecting: B-1.0.0 (library 'sub-lib' is private, but it is required by A)"
315+
316+
, let db = [ Right $ exAv "A" 1 [ExSubLibAny "B" "sub-lib"]
317+
, Right $ exAvNoLibrary "B" 1
318+
`withSubLibrary` exSubLib "sub-lib" [ExFlagged "make-lib-private" (dependencies []) publicDependencies] ]
319+
in runTest $ constraints [ExFlagConstraint (ScopeAnyQualifier "B") "make-lib-private" True] $
320+
mkTest db "reject package with sub-library made private by flag constraint" ["A"] $
321+
solverFailure $ isInfixOf $
322+
"rejecting: B-1.0.0 (library 'sub-lib' is private, but it is required by A)"
323+
324+
, let db = [ Right $ exAv "A" 1 [ExSubLibAny "B" "sub-lib"]
325+
, Right $ exAvNoLibrary "B" 1
326+
`withSubLibrary` exSubLib "sub-lib" [ExFlagged "make-lib-private" (dependencies []) publicDependencies] ]
327+
in runTest $
328+
mkTest db "treat sub-library as visible even though flag choice could make it private" ["A"] $
329+
solverSuccess [("A", 1), ("B", 1)]
330+
331+
, let db = [ Right $ exAv "A" 1 [ExAny "B"]
332+
, Right $ exAv "B" 1 [] `withSubLibrary` exSubLib "sub-lib" []
333+
, Right $ exAv "C" 1 [ExSubLibAny "B" "sub-lib"] ]
334+
goals :: [ExampleVar]
335+
goals = [
336+
P QualNone "A"
337+
, P QualNone "B"
338+
, P QualNone "C"
339+
]
340+
in runTest $ goalOrder goals $
341+
mkTest db "reject package that requires a private sub-library" ["A", "C"] $
342+
solverFailure $ isInfixOf $
343+
"rejecting: C-1.0.0 (requires library 'sub-lib' from B, but the component is private)"
344+
345+
, let db = [ Right $ exAv "A" 1 [ExSubLibAny "B" "sub-lib-v1"]
346+
, Right $ exAv "B" 2 [] `withSubLibrary` ExSubLib "sub-lib-v2" publicDependencies
347+
, Right $ exAv "B" 1 [] `withSubLibrary` ExSubLib "sub-lib-v1" publicDependencies ]
348+
in runTest $ mkTest db "choose version of package containing correct sub-library" ["A"] $
349+
solverSuccess [("A", 1), ("B", 1)]
350+
351+
, let db = [ Right $ exAv "A" 1 [ExSubLibAny "B" "sub-lib"]
352+
, Right $ exAv "B" 2 [] `withSubLibrary` ExSubLib "sub-lib" (dependencies [])
353+
, Right $ exAv "B" 1 [] `withSubLibrary` ExSubLib "sub-lib" publicDependencies ]
354+
in runTest $ mkTest db "choose version of package with public sub-library" ["A"] $
355+
solverSuccess [("A", 1), ("B", 1)]
356+
]
301357
-- build-tool-depends dependencies
302358
, testGroup "build-tool-depends" [
303359
runTest $ mkTest dbBuildTools "simple exe dependency" ["A"] (solverSuccess [("A", 1), ("bt-pkg", 2)])

0 commit comments

Comments
 (0)