Skip to content

Commit a00a30c

Browse files
committed
Tests for 'autogen-modules' field
1 parent 6f5a3ac commit a00a30c

File tree

10 files changed

+194
-0
lines changed

10 files changed

+194
-0
lines changed

Cabal/Cabal.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,7 @@ test-suite package-tests
435435
type: exitcode-stdio-1.0
436436
main-is: PackageTests.hs
437437
other-modules:
438+
PackageTests.AutogenModules.Check
438439
PackageTests.BenchmarkStanza.Check
439440
PackageTests.TestStanza.Check
440441
PackageTests.DeterministicAr.Check
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
module PackageTests.AutogenModules.Check where
2+
3+
import Distribution.ModuleName
4+
import Distribution.Simple.LocalBuildInfo
5+
import Distribution.PackageDescription
6+
import PackageTests.PackageTester
7+
8+
suite :: TestM ()
9+
suite = do
10+
11+
dist_dir <- distDir
12+
13+
-- Calling sdist without running configure first makes test fail with:
14+
-- "Exception: Run the 'configure' command first."
15+
-- Test Result output is: "Warning: Cannot run preprocessors. Run
16+
-- 'configure' command first."
17+
configureResult <- cabal' "configure" []
18+
sdistResult <- cabal' "sdist" []
19+
20+
-- Now check that all the correct modules were parsed.
21+
lbi <- liftIO $ getPersistBuildConfig dist_dir
22+
let (Just gotLibrary) = library (localPkgDescr lbi)
23+
let gotExecutable = head $ executables (localPkgDescr lbi)
24+
let gotTestSuite = head $ testSuites (localPkgDescr lbi)
25+
let gotBenchmark = head $ benchmarks (localPkgDescr lbi)
26+
assertEqual "library 'autogen-modules' field does not match expected"
27+
[fromString "MyHelperModule", fromString "MyLibHelperModule"]
28+
(libModulesAutogen gotLibrary)
29+
assertEqual "executable 'autogen-modules' field does not match expected"
30+
[fromString "MyHelperModule", fromString "MyExeHelperModule"]
31+
(exeModulesAutogen gotExecutable)
32+
assertEqual "test-suite 'autogen-modules' field does not match expected"
33+
[fromString "MyHelperModule", fromString "MyTestHelperModule"]
34+
(testModulesAutogen gotTestSuite)
35+
assertEqual "benchmark 'autogen-modules' field does not match expected"
36+
[fromString "MyHelperModule", fromString "MyBenchHelperModule"]
37+
(benchmarkModulesAutogen gotBenchmark)
38+
39+
-- Package check messages.
40+
let libAutogenMsg =
41+
"An 'autogen-module' is neither on 'exposed-modules' or "
42+
++ "'other-modules'"
43+
let exeAutogenMsg =
44+
"On executable 'Exe' an 'autogen-module' is not on "
45+
++ "'other-modules'"
46+
let testAutogenMsg =
47+
"On test suite 'Test' an 'autogen-module' is not on "
48+
++ "'other-modules'"
49+
let benchAutogenMsg =
50+
"On benchmark 'Bench' an 'autogen-module' is not on "
51+
++ "'other-modules'"
52+
53+
-- Asserts for the desired check messages after configure.
54+
let warn = \str -> "Warning: " ++ str
55+
assertOutputContains (warn libAutogenMsg) configureResult
56+
assertOutputContains (warn exeAutogenMsg) configureResult
57+
assertOutputContains (warn testAutogenMsg) configureResult
58+
assertOutputContains (warn benchAutogenMsg) configureResult
59+
60+
-- Asserts for the desired check messages after sdist.
61+
assertOutputContains "Distribution quality errors:" sdistResult
62+
assertOutputContains libAutogenMsg configureResult
63+
assertOutputContains exeAutogenMsg configureResult
64+
assertOutputContains testAutogenMsg configureResult
65+
assertOutputContains benchAutogenMsg configureResult
66+
assertOutputContains "Distribution quality warnings:" sdistResult
67+
assertOutputContains
68+
"From version 1.25 autogenerated modules are included on the"
69+
sdistResult
70+
71+
-- Assert sdist --list-sources output.
72+
-- If called before configure fails, sdist directory is not created.
73+
let listSourcesFileGot = dist_dir ++ "/" ++ "list-sources.txt"
74+
cabal "sdist" ["--list-sources=" ++ listSourcesFileGot]
75+
let listSourcesStrExpected =
76+
#if defined(mingw32_HOST_OS)
77+
".\\MyLibrary.hs\n"
78+
++ ".\\MyLibModule.hs\n"
79+
++ ".\\Dummy.hs\n"
80+
++ ".\\MyExeModule.hs\n"
81+
++ ".\\Dummy.hs\n"
82+
++ ".\\MyTestModule.hs\n"
83+
++ ".\\Dummy.hs\n"
84+
++ ".\\MyBenchModule.hs\n"
85+
++ ".\\my.cabal\n"
86+
#else
87+
"./MyLibrary.hs\n"
88+
++ "./MyLibModule.hs\n"
89+
++ "./Dummy.hs\n"
90+
++ "./MyExeModule.hs\n"
91+
++ "./Dummy.hs\n"
92+
++ "./MyTestModule.hs\n"
93+
++ "./Dummy.hs\n"
94+
++ "./MyBenchModule.hs\n"
95+
++ "./my.cabal\n"
96+
#endif
97+
listSourcesStrGot <- liftIO $ readFile listSourcesFileGot
98+
assertEqual "sdist --list-sources does not match the expected files"
99+
listSourcesStrExpected
100+
listSourcesStrGot
101+
102+
return ()
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
module Dummy where
2+
3+
main :: IO ()
4+
main = error ""
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
module MyBenchModule where
2+
3+
main :: IO ()
4+
main = error ""
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
module MyExeModule where
2+
3+
main :: IO ()
4+
main = error ""
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
module MyLibModule where
2+
3+
main :: IO ()
4+
main = error ""
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
module MyLibrary where
2+
3+
main :: IO ()
4+
main = error ""
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
module MyTestModule where
2+
3+
main :: IO ()
4+
main = error ""
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
name: AutogenModules
2+
version: 0.1
3+
license: BSD3
4+
author: Federico Mastellone
5+
maintainer: Federico Mastellone
6+
synopsis: AutogenModules
7+
category: PackageTests
8+
build-type: Simple
9+
cabal-version: >= 1.10
10+
11+
description:
12+
Check that Cabal recognizes the autogen-modules fields below.
13+
14+
Library
15+
default-language: Haskell2010
16+
build-depends: base
17+
exposed-modules:
18+
MyLibrary
19+
Paths_AutogenModules
20+
MyLibHelperModule
21+
other-modules:
22+
MyLibModule
23+
autogen-modules:
24+
MyHelperModule
25+
MyLibHelperModule
26+
27+
Executable Exe
28+
default-language: Haskell2010
29+
main-is: Dummy.hs
30+
build-depends: base
31+
other-modules:
32+
MyExeModule
33+
Paths_AutogenModules
34+
MyExeHelperModule
35+
autogen-modules:
36+
MyHelperModule
37+
MyExeHelperModule
38+
39+
Test-Suite Test
40+
default-language: Haskell2010
41+
main-is: Dummy.hs
42+
type: exitcode-stdio-1.0
43+
build-depends: base
44+
other-modules:
45+
MyTestModule
46+
Paths_AutogenModules
47+
MyTestHelperModule
48+
autogen-modules:
49+
MyHelperModule
50+
MyTestHelperModule
51+
52+
Benchmark Bench
53+
default-language: Haskell2010
54+
main-is: Dummy.hs
55+
type: exitcode-stdio-1.0
56+
build-depends: base
57+
other-modules:
58+
MyBenchModule
59+
Paths_AutogenModules
60+
MyBenchHelperModule
61+
autogen-modules:
62+
MyHelperModule
63+
MyBenchHelperModule

Cabal/tests/PackageTests/Tests.hs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ module PackageTests.Tests(tests) where
22

33
import PackageTests.PackageTester
44

5+
import qualified PackageTests.AutogenModules.Check
56
import qualified PackageTests.BenchmarkStanza.Check
67
import qualified PackageTests.TestStanza.Check
78
import qualified PackageTests.DeterministicAr.Check
@@ -31,6 +32,9 @@ tests config = do
3132
---------------------------------------------------------------------
3233
-- * External tests
3334

35+
-- Test that Cabal parses and uses 'autogen-modules' fields correctly
36+
tc "AutogenModules" PackageTests.AutogenModules.Check.suite
37+
3438
-- Test that Cabal parses 'benchmark' sections correctly
3539
tc "BenchmarkStanza" PackageTests.BenchmarkStanza.Check.suite
3640

0 commit comments

Comments
 (0)