Skip to content

Commit 1efd4d3

Browse files
committed
Add solver unit tests for sub-library dependencies (issue #6039).
1 parent 6134cee commit 1efd4d3

File tree

1 file changed

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

1 file changed

+42
-1
lines changed

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

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import Distribution.Solver.Types.PackageConstraint
2424
import qualified Distribution.Solver.Types.PackagePath as P
2525
import UnitTests.Distribution.Solver.Modular.DSL
2626
import UnitTests.Distribution.Solver.Modular.DSL.TestCaseUtils
27+
import Distribution.Types.LibraryVisibility
2728

2829
tests :: [TF.TestTree]
2930
tests = [
@@ -281,7 +282,7 @@ tests = [
281282
, runTest $ mkTest dbBJ7 "bj7" ["A"] (solverSuccess [("A", 1), ("B", 1), ("C", 1)])
282283
, runTest $ indep $ mkTest dbBJ8 "bj8" ["A", "B"] (solverSuccess [("A", 1), ("B", 1), ("C", 1)])
283284
]
284-
, testGroup "library dependencies" [
285+
, testGroup "main library dependencies" [
285286
let db = [Right $ exAvNoLibrary "A" 1 `withExe` ExExe "exe" []]
286287
in runTest $ mkTest db "install build target without a library" ["A"] $
287288
solverSuccess [("A", 1)]
@@ -298,6 +299,46 @@ tests = [
298299
in runTest $ mkTest db "choose version of build-depends dependency that has a library" ["A"] $
299300
solverSuccess [("A", 1), ("B", 1)]
300301
]
302+
, testGroup "sub-library dependencies" [
303+
let db = [ Right $ exAv "A" 1 [ExSubLibAny "B" "sub-lib"]
304+
, Right $ exAv "B" 1 [] ]
305+
in runTest $
306+
mkTest db "reject package that is missing required sub-library" ["A"] $
307+
solverFailure $ isInfixOf $
308+
"rejecting: B-1.0.0 (does not contain library 'sub-lib', which is required by A)"
309+
310+
, let db = [ Right $ exAv "A" 1 [ExSubLibAny "B" "sub-lib"]
311+
, Right $ exAv "B" 1 [] `withSubLibrary` ExSubLib "sub-lib" LibraryVisibilityPrivate [] ]
312+
in runTest $
313+
mkTest db "reject package with private but required sub-library" ["A"] $
314+
solverFailure $ isInfixOf $ "rejecting: B-1.0.0 (library 'sub-lib' is private, but it is required by A)"
315+
316+
, let db = [ Right $ exAv "A" 1 [ExAny "B"]
317+
, Right $ exAv "B" 1 [] `withSubLibrary` ExSubLib "sub-lib" LibraryVisibilityPrivate []
318+
, Right $ exAv "C" 1 [ExSubLibAny "B" "sub-lib"] ]
319+
goals :: [ExampleVar]
320+
goals = [
321+
P QualNone "A"
322+
, P QualNone "B"
323+
, P QualNone "C"
324+
]
325+
in runTest $ goalOrder goals $
326+
mkTest db "reject package that requires a private sub-library" ["A", "C"] $
327+
solverFailure $ isInfixOf $
328+
"rejecting: C-1.0.0 (requires library 'sub-lib' from B, but the component is private)"
329+
330+
, let db = [ Right $ exAv "A" 1 [ExSubLibAny "B" "sub-lib-v1"]
331+
, Right $ exAv "B" 2 [] `withSubLibrary` ExSubLib "sub-lib-v2" LibraryVisibilityPublic []
332+
, Right $ exAv "B" 1 [] `withSubLibrary` ExSubLib "sub-lib-v1" LibraryVisibilityPublic [] ]
333+
in runTest $ mkTest db "choose version of package containing correct sub-library" ["A"] $
334+
solverSuccess [("A", 1), ("B", 1)]
335+
336+
, let db = [ Right $ exAv "A" 1 [ExSubLibAny "B" "sub-lib"]
337+
, Right $ exAv "B" 2 [] `withSubLibrary` ExSubLib "sub-lib" LibraryVisibilityPrivate []
338+
, Right $ exAv "B" 1 [] `withSubLibrary` ExSubLib "sub-lib" LibraryVisibilityPublic [] ]
339+
in runTest $ mkTest db "choose version of package with public sub-library" ["A"] $
340+
solverSuccess [("A", 1), ("B", 1)]
341+
]
301342
-- build-tool-depends dependencies
302343
, testGroup "build-tool-depends" [
303344
runTest $ mkTest dbBuildTools "simple exe dependency" ["A"] (solverSuccess [("A", 1), ("bt-pkg", 2)])

0 commit comments

Comments
 (0)