Skip to content

Commit c79e5ef

Browse files
committed
Fix dir creation on init, add unit tests + rename test file
1 parent 2ae098e commit c79e5ef

File tree

6 files changed

+78
-31
lines changed

6 files changed

+78
-31
lines changed

cabal-install/cabal-install.cabal.dev

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ Test-Suite unit-tests
351351
UnitTests.Distribution.Client.Get
352352
UnitTests.Distribution.Client.Glob
353353
UnitTests.Distribution.Client.GZipUtils
354-
UnitTests.Distribution.Client.Init.FileCreators
354+
UnitTests.Distribution.Client.Init
355355
UnitTests.Distribution.Client.Store
356356
UnitTests.Distribution.Client.Tar
357357
UnitTests.Distribution.Client.TreeDiffInstances

cabal-install/cabal-install.cabal.zinza

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ Cabal-Version: 2.0
44
{% else %}
55
Cabal-Version: >= 1.10
66
{% endif %}
7-
-- NOTE: This file is autogenerated from 'cabal-install.cabal.pp'.
7+
-- NOTE: This file is autogenerated from 'cabal-install.cabal.'.
88
-- DO NOT EDIT MANUALLY.
99
-- To update this file, edit 'cabal-install.cabal.pp' and run
1010
-- 'make cabal-install-prod' in the project's root folder.
@@ -420,7 +420,7 @@ Test-Suite unit-tests
420420
UnitTests.Distribution.Client.Get
421421
UnitTests.Distribution.Client.Glob
422422
UnitTests.Distribution.Client.GZipUtils
423-
UnitTests.Distribution.Client.Init.FileCreators
423+
UnitTests.Distribution.Client.Init
424424
UnitTests.Distribution.Client.Store
425425
UnitTests.Distribution.Client.Tar
426426
UnitTests.Distribution.Client.TreeDiffInstances

cabal-install/src/Distribution/Client/Init/Command.hs

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,30 @@
1313
--
1414
-----------------------------------------------------------------------------
1515

16-
module Distribution.Client.Init.Command (
17-
18-
-- * Commands
16+
module Distribution.Client.Init.Command
17+
( -- * Commands
1918
initCabal
2019
, incVersion
2120

21+
-- * Helpers
22+
, getSimpleProject
23+
, getLibOrExec
24+
, getCabalVersion
25+
, getPackageName
26+
, getVersion
27+
, getLicense
28+
, getAuthorInfo
29+
, getHomepage
30+
, getSynopsis
31+
, getCategory
32+
, getExtraSourceFiles
33+
, getAppDir
34+
, getSrcDir
35+
, getGenTests
36+
, getTestDir
37+
, getLanguage
38+
, getGenComments
39+
, getModulesBuildToolsAndDeps
2240
) where
2341

2442
import Prelude ()
@@ -475,21 +493,17 @@ getGenComments flags = do
475493
-- | Ask for the application root directory.
476494
getAppDir :: InitFlags -> IO InitFlags
477495
getAppDir flags = do
478-
appDirs <-
479-
return (applicationDirs flags)
480-
?>> noAppDirIfLibraryOnly
496+
appDirs <- noAppDirIfLibraryOnly
481497
?>> guessAppDir flags
482498
?>> promptUserForApplicationDir
483499
?>> setDefault
484500
return $ flags { applicationDirs = appDirs }
485-
486501
where
487-
-- If the packageType==Library, then there is no application dir.
502+
-- If the packageType==Library, ignore defined appdir.
488503
noAppDirIfLibraryOnly :: IO (Maybe [String])
489-
noAppDirIfLibraryOnly =
490-
if (packageType flags) == Flag Library
491-
then return (Just [])
492-
else return Nothing
504+
noAppDirIfLibraryOnly
505+
| packageType flags == Flag Library = return $ Just []
506+
| otherwise = return $ applicationDirs flags
493507

494508
-- Set the default application directory.
495509
setDefault :: IO (Maybe [String])
@@ -530,22 +544,19 @@ guessAppDir flags = do
530544
-- | Ask for the source (library) root directory.
531545
getSrcDir :: InitFlags -> IO InitFlags
532546
getSrcDir flags = do
533-
srcDirs <-
534-
return (sourceDirs flags)
535-
?>> noSourceDirIfExecutableOnly
547+
srcDirs <- noSourceDirIfExecutableOnly
536548
?>> guessSourceDir flags
537549
?>> promptUserForSourceDir
538550
?>> setDefault
539551

540552
return $ flags { sourceDirs = srcDirs }
541553

542554
where
543-
-- If the packageType==Executable, then there is no source dir.
555+
-- If the packageType==Executable, then ignore source dir
544556
noSourceDirIfExecutableOnly :: IO (Maybe [String])
545-
noSourceDirIfExecutableOnly =
546-
if (packageType flags) == Flag Executable
547-
then return (Just [])
548-
else return Nothing
557+
noSourceDirIfExecutableOnly
558+
| packageType flags == Flag Executable = return $ Just []
559+
| otherwise = return $ sourceDirs flags
549560

550561
-- Set the default source directory.
551562
setDefault :: IO (Maybe [String])

cabal-install/src/Distribution/Client/Init/Types.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ data InitFlags =
7979
, initVerbosity :: Flag Verbosity
8080
, overwrite :: Flag Bool
8181
}
82-
deriving (Show, Generic)
82+
deriving (Eq, Show, Generic)
8383

8484
-- the Monoid instance for Flag has later values override earlier
8585
-- ones, which is why we want Maybe [foo] for collecting foo values,

cabal-install/tests/UnitTests.hs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import qualified UnitTests.Distribution.Client.Described
1919
import qualified UnitTests.Distribution.Client.FileMonitor
2020
import qualified UnitTests.Distribution.Client.Glob
2121
import qualified UnitTests.Distribution.Client.GZipUtils
22-
import qualified UnitTests.Distribution.Client.Init.FileCreators
22+
import qualified UnitTests.Distribution.Client.Init
2323
import qualified UnitTests.Distribution.Client.Store
2424
import qualified UnitTests.Distribution.Client.Tar
2525
import qualified UnitTests.Distribution.Client.Targets
@@ -57,8 +57,8 @@ tests mtimeChangeCalibrated =
5757
UnitTests.Distribution.Client.Glob.tests
5858
, testGroup "Distribution.Client.GZipUtils"
5959
UnitTests.Distribution.Client.GZipUtils.tests
60-
, testGroup "Distribution.Client.Init.FileCreators"
61-
UnitTests.Distribution.Client.Init.FileCreators.tests
60+
, testGroup "Distribution.Client.Init"
61+
UnitTests.Distribution.Client.Init.tests
6262
, testGroup "Distribution.Client.Store"
6363
UnitTests.Distribution.Client.Store.tests
6464
, testGroup "Distribution.Client.Tar"

cabal-install/tests/UnitTests/Distribution/Client/Init/FileCreators.hs renamed to cabal-install/tests/UnitTests/Distribution/Client/Init.hs

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,21 @@
1-
module UnitTests.Distribution.Client.Init.FileCreators (
2-
tests
1+
module UnitTests.Distribution.Client.Init
2+
( tests
33
) where
44

55
import Distribution.Client.Init.FileCreators
66
( generateCabalFile )
77

88
import Test.Tasty
9+
import Test.Tasty.HUnit
910
import Test.Tasty.Golden (goldenVsString)
1011

1112
import System.FilePath
1213
( (</>) )
1314
import qualified Data.ByteString.Lazy as BS
1415
import qualified Data.ByteString.Lazy.Char8 as BS8
1516

17+
import Distribution.Client.Init.Command
18+
( getLibOrExec, getAppDir, getSrcDir )
1619
import Distribution.Client.Init.Types
1720
( InitFlags(..), PackageType(..), defaultInitFlags )
1821
import Distribution.Simple.Setup
@@ -40,6 +43,11 @@ tests = [ testGroup "cabal init goldens"
4043
, checkCabalFileGolden libExeAndTestFlags "lib-exe-and-test-golden.cabal"
4144
, checkCabalFileGolden libExeAndTestWithCommentsFlags "lib-exe-and-test-with-comments-golden.cabal"
4245
]
46+
, testGroup "Check init flag outputs against init script builds"
47+
[ checkInitFlags "Check library-only build flags" libFlags Library
48+
, checkInitFlags "Check lib+exe build flags" libAndExeFlags LibraryAndExecutable
49+
, checkInitFlags "Check exe-only build flags" exeFlags Executable
50+
]
4351
]
4452

4553
checkCabalFileGolden :: InitFlags -> FilePath -> TestTree
@@ -52,6 +60,22 @@ checkCabalFileGolden flags goldenFileName =
5260
generatedCabalFile :: IO BS.ByteString
5361
generatedCabalFile = pure . BS8.pack $ generateCabalFile goldenFileName flags
5462

63+
checkInitFlags :: String -> InitFlags -> PackageType -> TestTree
64+
checkInitFlags label flags pkgType = testCase label $ do
65+
flags' <- getLibOrExec rawFlags
66+
>>= getAppDir
67+
>>= getSrcDir
68+
69+
flags @=? flags'
70+
where
71+
rawFlags
72+
| pkgType == Executable = baseFlags
73+
{ packageType = Flag pkgType
74+
, exposedModules = Nothing
75+
}
76+
| otherwise = baseFlags { packageType = Flag pkgType }
77+
78+
5579
-- ==================================================
5680
-- Base flags to set common InitFlags values.
5781

@@ -90,12 +114,23 @@ baseFlags = defaultInitFlags {
90114
, mainIs = Flag "Main.hs"
91115
, applicationDirs = Just ["app"]
92116
, sourceDirs = Nothing
93-
, exposedModules = Nothing
117+
, exposedModules = Just [ModuleName.fromString "MyLib"]
94118
, initializeTestSuite = Flag False
95119
, testDirs = Nothing
96120
}
97121

98122

123+
-- ==================================================
124+
-- Simple library flags
125+
126+
libFlags :: InitFlags
127+
libFlags = baseFlags
128+
{ packageType = Flag Library
129+
, mainIs = NoFlag
130+
, sourceDirs = Just ["src"]
131+
, applicationDirs = Just []
132+
}
133+
99134
-- ==================================================
100135
-- Simple exe.
101136

@@ -104,7 +139,9 @@ exeFlags = baseFlags {
104139
-- Create an executable only, with main living in app/Main.hs.
105140
packageType = Flag Executable
106141
, mainIs = Flag "Main.hs"
142+
, sourceDirs = Just []
107143
, applicationDirs = Just ["app"]
144+
, exposedModules = Nothing
108145
}
109146

110147

@@ -127,7 +164,6 @@ libAndExeFlags = baseFlags {
127164

128165
-- Library sources live in src/ and expose the module MyLib.
129166
, sourceDirs = Just ["src"]
130-
, exposedModules = Just (map ModuleName.fromString ["MyLib"])
131167
}
132168

133169

0 commit comments

Comments
 (0)