Skip to content

Commit 2454660

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

File tree

4 files changed

+174
-1
lines changed

4 files changed

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

0 commit comments

Comments
 (0)