Skip to content

Commit abdf2d7

Browse files
committed
Add FileCreators.generateCabalFile unit tests.
1 parent a09afa7 commit abdf2d7

File tree

4 files changed

+178
-1
lines changed

4 files changed

+178
-1
lines changed

cabal-install/Distribution/Client/Init/FileCreators.hs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ module Distribution.Client.Init.FileCreators (
2222
, createMainHs
2323
, createTestSuiteIfEligible
2424
, writeCabalFile
25+
26+
-- * For testing
27+
, generateCabalFile
2528
) where
2629

2730
import Prelude ()

cabal-install/cabal-install.cabal.pp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -475,6 +475,7 @@
475475
UnitTests.Distribution.Client.GenericInstances
476476
UnitTests.Distribution.Client.Glob
477477
UnitTests.Distribution.Client.GZipUtils
478+
UnitTests.Distribution.Client.Init.FileCreators
478479
UnitTests.Distribution.Client.Sandbox
479480
UnitTests.Distribution.Client.Sandbox.Timestamp
480481
UnitTests.Distribution.Client.Store

cabal-install/tests/UnitTests.hs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import qualified UnitTests.Distribution.Client.Described
1717
import qualified UnitTests.Distribution.Client.FileMonitor
1818
import qualified UnitTests.Distribution.Client.Glob
1919
import qualified UnitTests.Distribution.Client.GZipUtils
20+
import qualified UnitTests.Distribution.Client.Init.FileCreators
2021
import qualified UnitTests.Distribution.Client.Sandbox
2122
import qualified UnitTests.Distribution.Client.Sandbox.Timestamp
2223
import qualified UnitTests.Distribution.Client.Store
@@ -55,6 +56,8 @@ tests mtimeChangeCalibrated =
5556
UnitTests.Distribution.Client.Glob.tests
5657
, testGroup "Distribution.Client.GZipUtils"
5758
UnitTests.Distribution.Client.GZipUtils.tests
59+
, testGroup "Distribution.Client.Init.FileCreators"
60+
UnitTests.Distribution.Client.Init.FileCreators.tests
5861
, testGroup "Distribution.Client.Sandbox"
5962
UnitTests.Distribution.Client.Sandbox.tests
6063
, testGroup "Distribution.Client.Sandbox.Timestamp"
@@ -95,4 +98,3 @@ main = do
9598
defaultMainWithIngredients
9699
(includingOptions extraOptions : defaultIngredients)
97100
(tests mtimeChange')
98-
Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
module UnitTests.Distribution.Client.Init.FileCreators (
2+
tests
3+
) where
4+
5+
import Distribution.Client.Init.FileCreators
6+
( generateCabalFile )
7+
8+
import qualified Data.Set as Set
9+
10+
import Distribution.Client.Init.Types
11+
( InitFlags(..), PackageType(..) )
12+
import Distribution.Simple.Setup
13+
( Flag(..) )
14+
15+
16+
import Distribution.CabalSpecVersion
17+
( CabalSpecVersion(CabalSpecV2_4) )
18+
import Distribution.Types.Dependency
19+
( Dependency, mkDependency )
20+
import Distribution.Types.PackageName
21+
( mkPackageName )
22+
import Distribution.Types.VersionRange
23+
( majorBoundVersion )
24+
import Distribution.Types.Version
25+
( mkVersion )
26+
import qualified Distribution.ModuleName as ModuleName
27+
( fromString )
28+
import qualified Distribution.SPDX as SPDX
29+
import Language.Haskell.Extension ( Language(..) )
30+
31+
import Test.Tasty
32+
import Test.Tasty.HUnit
33+
34+
tests :: [TestTree]
35+
tests =
36+
[ testCase "generateCabalFile exe"
37+
(generateCabalFileTest "exekg" exeFlags expectedExeOutput)
38+
, testCase "generateCabalFile libExeAndTests"
39+
(generateCabalFileTest "libExeAndTestsPackage" libExeAndTestFlags expectedLibExeAndTestOutput)
40+
]
41+
42+
generateCabalFileTest :: String -> InitFlags -> String -> Assertion
43+
generateCabalFileTest filename flags expected =
44+
assertEqual
45+
("Generated cabal file does not match: '" ++ filename ++ "'") expected actual
46+
where
47+
actual = generateCabalFile filename flags
48+
49+
--------------------------------------------------
50+
-- Simple exe.
51+
52+
exeFlags :: InitFlags
53+
exeFlags = baseTestFlags {
54+
packageType = Flag Executable
55+
, applicationDirs = Just ["app"]
56+
}
57+
58+
expectedExeOutput :: String
59+
expectedExeOutput =
60+
"cabal-version: 2.4\n"
61+
++ "name: foo\n"
62+
++ "version: 3.2.1\n"
63+
++ "synopsis: The foo package\n"
64+
++ "homepage: https://github.com/foo/foo\n"
65+
++ "license: NONE\n"
66+
++ "author: me\n"
67+
++ "maintainer: [email protected]\n"
68+
++ "category: SomeCat\n"
69+
++ "extra-source-files: CHANGELOG.md\n"
70+
++ "\n"
71+
++ "executable foo\n"
72+
++ " main-is: Main.hs\n"
73+
++ " build-depends: base:{} ^>=4.13.0.0, containers:{} ^>=5.7.0.0, unordered-containers:{} ^>=2.7.0.0\n"
74+
++ " hs-source-dirs: app\n"
75+
++ " default-language: Haskell2010\n"
76+
77+
--
78+
--------------------------------------------------
79+
80+
81+
82+
--------------------------------------------------
83+
-- Lib, exe, and test suite
84+
85+
libExeAndTestFlags :: InitFlags
86+
libExeAndTestFlags = baseTestFlags {
87+
packageType = Flag LibraryAndExecutable
88+
, initializeTestSuite = Flag True
89+
, testDirs = Just ["tests"]
90+
, exposedModules = Just (map ModuleName.fromString ["A", "B"])
91+
, sourceDirs = Just ["lib"]
92+
, applicationDirs = Just ["app"]
93+
}
94+
95+
expectedLibExeAndTestOutput :: String
96+
expectedLibExeAndTestOutput =
97+
"cabal-version: 2.4\n"
98+
++ "name: foo\n"
99+
++ "version: 3.2.1\n"
100+
++ "synopsis: The foo package\n"
101+
++ "homepage: https://github.com/foo/foo\n"
102+
++ "license: NONE\n"
103+
++ "author: me\n"
104+
++ "maintainer: [email protected]\n"
105+
++ "category: SomeCat\n"
106+
++ "extra-source-files: CHANGELOG.md\n"
107+
++ "\n"
108+
++ "library\n"
109+
++ " exposed-modules: A, B\n"
110+
++ " build-depends: base:{} ^>=4.13.0.0, containers:{} ^>=5.7.0.0, unordered-containers:{} ^>=2.7.0.0\n"
111+
++ " hs-source-dirs: lib\n"
112+
++ " default-language: Haskell2010\n"
113+
++ "\n"
114+
++ "executable foo\n"
115+
++ " main-is: Main.hs\n"
116+
++ " build-depends: base:{} ^>=4.13.0.0, containers:{} ^>=5.7.0.0, unordered-containers:{} ^>=2.7.0.0\n"
117+
++ " hs-source-dirs: app\n"
118+
++ " default-language: Haskell2010\n"
119+
++ "\n"
120+
++ "test-suite foo-test\n"
121+
++ " default-language: Haskell2010\n"
122+
++ " type: exitcode-stdio-1.0\n"
123+
++ " hs-source-dirs: tests\n"
124+
++ " main-is: MyLibTest.hs\n"
125+
++ " build-depends: base:{} ^>=4.13.0.0, containers:{} ^>=5.7.0.0, unordered-containers:{} ^>=2.7.0.0\n"
126+
127+
--
128+
--------------------------------------------------
129+
130+
131+
testDependencies :: [Dependency]
132+
testDependencies =
133+
[ mkDependency (mkPackageName "base") (majorBoundVersion (mkVersion [4,13,0,0])) Set.empty
134+
, mkDependency (mkPackageName "containers") (majorBoundVersion (mkVersion [5,7,0,0])) Set.empty
135+
, mkDependency (mkPackageName "unordered-containers") (majorBoundVersion (mkVersion [2,7,0,0])) Set.empty
136+
]
137+
138+
baseTestFlags :: InitFlags
139+
baseTestFlags = InitFlags {
140+
packageName = Flag (mkPackageName "foo")
141+
, noComments = Flag False
142+
, minimal = Flag True
143+
, version = Flag (mkVersion [3,2,1])
144+
, synopsis = Flag "The foo package"
145+
, homepage = Flag "https://github.com/foo/foo"
146+
, license = Flag SPDX.NONE
147+
, author = Flag "me"
148+
, email = Flag "[email protected]"
149+
, category = Flag (Left "SomeCat")
150+
, cabalVersion = Flag CabalSpecV2_4
151+
, extraSrc = Just ["CHANGELOG.md"]
152+
, interactive = Flag False
153+
, mainIs = Flag "Main.hs"
154+
, otherModules = Nothing
155+
, otherExts = Nothing
156+
, applicationDirs = Nothing
157+
, language = Flag Haskell2010
158+
, buildTools = Nothing
159+
, packageType = Flag Executable
160+
, initializeTestSuite = Flag False
161+
, exposedModules = Nothing
162+
, sourceDirs = Nothing
163+
, testDirs = Nothing
164+
, dependencies = Just testDependencies
165+
, quiet = Flag True
166+
, packageDir = NoFlag
167+
, simpleProject = Flag False
168+
, initHcPath = NoFlag
169+
, initVerbosity = NoFlag
170+
, overwrite = NoFlag
171+
}

0 commit comments

Comments
 (0)