1
+ {-# LANGUAGE LambdaCase #-}
1
2
module UnitTests.Distribution.Client.Init.NonInteractive
2
3
( tests
3
4
) where
@@ -24,6 +25,8 @@ import Data.List (foldl')
24
25
import qualified Data.Set as Set
25
26
import Distribution.Client.Init.Utils (mkPackageNameDep , mkStringyDep )
26
27
import Distribution.FieldGrammar.Newtypes
28
+ import Distribution.Simple.Command
29
+ import Distribution.Client.Setup (initCommand )
27
30
28
31
tests
29
32
:: Verbosity
@@ -43,6 +46,9 @@ tests _v _initFlags comp pkgIx srcDb =
43
46
, testGroup " non-interactive tests"
44
47
[ nonInteractiveTests pkgIx srcDb comp
45
48
]
49
+ , testGroup " cli parser tests"
50
+ [ cliListParserTests
51
+ ]
46
52
]
47
53
48
54
driverFunctionTest
@@ -1265,3 +1271,136 @@ testGo label f g h inputs = testCase label $
1265
1271
case (_runPrompt $ f emptyFlags) (NEL. fromList inputs) of
1266
1272
Left x -> g x
1267
1273
Right x -> h x
1274
+
1275
+ cliListParserTests :: TestTree
1276
+ cliListParserTests = testGroup " cli list parser"
1277
+ [ testCase " Single extraSrc" $ do
1278
+ flags <- runParserTest [" -x" , " Generated.hs" ]
1279
+ flags @?= emptyFlags
1280
+ { extraSrc = Flag [" Generated.hs" ]
1281
+ }
1282
+ , testCase " Multiple extraSrc" $ do
1283
+ flags <- runParserTest [" -x" , " Gen1.hs" , " -x" , " Gen2.hs" , " -x" , " Gen3.hs" ]
1284
+ flags @?= emptyFlags
1285
+ { extraSrc = Flag [" Gen1.hs" , " Gen2.hs" , " Gen3.hs" ]
1286
+ }
1287
+ , testCase " Single extraDoc" $ do
1288
+ flags <- runParserTest [" --extra-doc-file" , " README" ]
1289
+ flags @?= emptyFlags
1290
+ { extraDoc = Flag $ [" README" ]
1291
+ }
1292
+ , testCase " Multiple extraDoc" $ do
1293
+ flags <- runParserTest [" --extra-doc-file" , " README" ,
1294
+ " --extra-doc-file" , " CHANGELOG" ,
1295
+ " --extra-doc-file" , " LICENSE" ]
1296
+ flags @?= emptyFlags
1297
+ { extraDoc = Flag $ map fromString [" README" , " CHANGELOG" , " LICENSE" ]
1298
+ }
1299
+ , testCase " Single exposedModules" $ do
1300
+ flags <- runParserTest [" -o" , " Test" ]
1301
+ flags @?= emptyFlags
1302
+ { exposedModules = Flag $ map fromString [" Test" ]
1303
+ }
1304
+ , testCase " Multiple exposedModules" $ do
1305
+ flags <- runParserTest [" -o" , " Test" , " -o" , " Test2" , " -o" , " Test3" ]
1306
+ flags @?= emptyFlags
1307
+ { exposedModules = Flag $ map fromString [" Test" , " Test2" , " Test3" ]
1308
+ }
1309
+ -- there is no otherModules cli flag
1310
+ -- , testCase "Single otherModules" $ do
1311
+ -- flags <- runParserTest ["-o", "Test"]
1312
+ -- flags @?= dummyFlags
1313
+ -- { otherModules = Flag $ map fromString ["Test"]
1314
+ -- }
1315
+ -- , testCase "Multiple otherModules" $ do
1316
+ -- flags <- runParserTest ["-o", "Test", "-o", "Test2", "-o", "Test3"]
1317
+ -- flags @?= dummyFlags
1318
+ -- { otherModules = Flag $ map fromString ["Test", "Test2", "Test3"]
1319
+ -- }
1320
+ , testCase " Single otherExts" $ do
1321
+ flags <- runParserTest [" --extension" , " OverloadedStrings" ]
1322
+ flags @?= emptyFlags
1323
+ { otherExts = Flag [EnableExtension OverloadedStrings ]
1324
+ }
1325
+ , testCase " Multiple otherExts" $ do
1326
+ flags <- runParserTest [" --extension" , " OverloadedStrings" ,
1327
+ " --extension" , " FlexibleInstances" ,
1328
+ " --extension" , " FlexibleContexts" ]
1329
+ flags @?= emptyFlags
1330
+ { otherExts = Flag [EnableExtension OverloadedStrings ,
1331
+ EnableExtension FlexibleInstances ,
1332
+ EnableExtension FlexibleContexts ]
1333
+ }
1334
+ , testCase " Single dependency" $ do
1335
+ flags <- runParserTest [" -d" , " base" ]
1336
+ flags @?= emptyFlags
1337
+ { dependencies = Flag [mkStringyDep " base" ]
1338
+ }
1339
+ , testCase " Multiple dependency flags" $ do
1340
+ flags <- runParserTest [" -d" , " base" , " -d" , " vector" ]
1341
+ flags @?= emptyFlags
1342
+ { dependencies = Flag $ fmap mkStringyDep [" base" , " vector" ]
1343
+ }
1344
+ , testCase " Comma separated list of dependencies" $ do
1345
+ flags <- runParserTest [" -d" , " base,vector" ]
1346
+ flags @?= emptyFlags
1347
+ { dependencies = Flag $ fmap mkStringyDep [" base" , " vector" ]
1348
+ }
1349
+ , testCase " Single applicationDirs" $ do
1350
+ flags <- runParserTest [" --application-dir" , " app" ]
1351
+ flags @?= emptyFlags
1352
+ { applicationDirs = Flag [" app" ]
1353
+ }
1354
+ , testCase " Multiple applicationDirs" $ do
1355
+ flags <- runParserTest [" --application-dir" , " app" ,
1356
+ " --application-dir" , " exe" ,
1357
+ " --application-dir" , " srcapp" ]
1358
+ flags @?= emptyFlags
1359
+ { applicationDirs = Flag [" app" , " exe" , " srcapp" ]
1360
+ }
1361
+ , testCase " Single sourceDirs" $ do
1362
+ flags <- runParserTest [" --source-dir" , " src" ]
1363
+ flags @?= emptyFlags
1364
+ { sourceDirs = Flag [" src" ]
1365
+ }
1366
+ , testCase " Multiple sourceDirs" $ do
1367
+ flags <- runParserTest [" --source-dir" , " src" ,
1368
+ " --source-dir" , " lib" ,
1369
+ " --source-dir" , " sources" ]
1370
+ flags @?= emptyFlags
1371
+ { sourceDirs = Flag [" src" , " lib" , " sources" ]
1372
+ }
1373
+ , testCase " Single buildTools" $ do
1374
+ flags <- runParserTest [" --build-tool" , " happy" ]
1375
+ flags @?= emptyFlags
1376
+ { buildTools = Flag [" happy" ]
1377
+ }
1378
+ , testCase " Multiple buildTools" $ do
1379
+ flags <- runParserTest [" --build-tool" , " happy" ,
1380
+ " --build-tool" , " alex" ,
1381
+ " --build-tool" , " make" ]
1382
+ flags @?= emptyFlags
1383
+ { buildTools = Flag [" happy" , " alex" , " make" ]
1384
+ }
1385
+ , testCase " Single testDirs" $ do
1386
+ flags <- runParserTest [" --test-dir" , " test" ]
1387
+ flags @?= emptyFlags
1388
+ { testDirs = Flag [" test" ]
1389
+ }
1390
+ , testCase " Multiple testDirs" $ do
1391
+ flags <- runParserTest [" --test-dir" , " test" ,
1392
+ " --test-dir" , " tests" ,
1393
+ " --test-dir" , " testsuite" ]
1394
+ flags @?= emptyFlags
1395
+ { testDirs = Flag [" test" , " tests" , " testsuite" ]
1396
+ }
1397
+ ]
1398
+ where
1399
+ assumeAllParse :: CommandParse (InitFlags -> InitFlags , [String ]) -> IO InitFlags
1400
+ assumeAllParse = \ case
1401
+ CommandReadyToGo (flagsF, [] ) -> pure (flagsF emptyFlags)
1402
+ _ -> assertFailure " Expected successful parse"
1403
+
1404
+ runParserTest :: [String ] -> IO InitFlags
1405
+ runParserTest opts = do
1406
+ assumeAllParse $ commandParseArgs initCommand False opts
0 commit comments