@@ -24,6 +24,7 @@ import Distribution.Solver.Types.PackageConstraint
24
24
import qualified Distribution.Solver.Types.PackagePath as P
25
25
import UnitTests.Distribution.Solver.Modular.DSL
26
26
import UnitTests.Distribution.Solver.Modular.DSL.TestCaseUtils
27
+ import Distribution.Types.LibraryVisibility
27
28
28
29
tests :: [TF. TestTree ]
29
30
tests = [
@@ -281,7 +282,7 @@ tests = [
281
282
, runTest $ mkTest dbBJ7 " bj7" [" A" ] (solverSuccess [(" A" , 1 ), (" B" , 1 ), (" C" , 1 )])
282
283
, runTest $ indep $ mkTest dbBJ8 " bj8" [" A" , " B" ] (solverSuccess [(" A" , 1 ), (" B" , 1 ), (" C" , 1 )])
283
284
]
284
- , testGroup " library dependencies" [
285
+ , testGroup " main library dependencies" [
285
286
let db = [Right $ exAvNoLibrary " A" 1 `withExe` ExExe " exe" [] ]
286
287
in runTest $ mkTest db " install build target without a library" [" A" ] $
287
288
solverSuccess [(" A" , 1 )]
@@ -298,6 +299,46 @@ tests = [
298
299
in runTest $ mkTest db " choose version of build-depends dependency that has a library" [" A" ] $
299
300
solverSuccess [(" A" , 1 ), (" B" , 1 )]
300
301
]
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
+ ]
301
342
-- build-tool-depends dependencies
302
343
, testGroup " build-tool-depends" [
303
344
runTest $ mkTest dbBuildTools " simple exe dependency" [" A" ] (solverSuccess [(" A" , 1 ), (" bt-pkg" , 2 )])
0 commit comments