@@ -281,7 +281,7 @@ tests = [
281
281
, runTest $ mkTest dbBJ7 " bj7" [" A" ] (solverSuccess [(" A" , 1 ), (" B" , 1 ), (" C" , 1 )])
282
282
, runTest $ indep $ mkTest dbBJ8 " bj8" [" A" , " B" ] (solverSuccess [(" A" , 1 ), (" B" , 1 ), (" C" , 1 )])
283
283
]
284
- , testGroup " library dependencies" [
284
+ , testGroup " main library dependencies" [
285
285
let db = [Right $ exAvNoLibrary " A" 1 `withExe` exExe " exe" [] ]
286
286
in runTest $ mkTest db " install build target without a library" [" A" ] $
287
287
solverSuccess [(" A" , 1 )]
@@ -298,6 +298,62 @@ tests = [
298
298
in runTest $ mkTest db " choose version of build-depends dependency that has a library" [" A" ] $
299
299
solverSuccess [(" A" , 1 ), (" B" , 1 )]
300
300
]
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
+ ]
301
357
-- build-tool-depends dependencies
302
358
, testGroup " build-tool-depends" [
303
359
runTest $ mkTest dbBuildTools " simple exe dependency" [" A" ] (solverSuccess [(" A" , 1 ), (" bt-pkg" , 2 )])
0 commit comments