File: Configure.hs

package info (click to toggle)
haskell-cabal-install 3.12.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 3,552 kB
  • sloc: haskell: 65,985; sh: 80; makefile: 5
file content (139 lines) | stat: -rw-r--r-- 4,534 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
{-# LANGUAGE RecordWildCards #-}

module UnitTests.Distribution.Client.Configure (tests) where

import Distribution.Client.CmdConfigure

import Control.Monad
import qualified Data.Map as Map
import Distribution.Client.NixStyleOptions
import Distribution.Client.ProjectConfig.Types
import Distribution.Client.ProjectFlags
import Distribution.Client.Setup
import Distribution.Simple
import Distribution.Simple.Flag
import Distribution.Verbosity
import System.Directory
import System.FilePath
import Test.Tasty
import Test.Tasty.HUnit

tests :: [TestTree]
tests =
  [ configureTests
  ]

defaultTestFlags :: NixStyleFlags ()
defaultTestFlags =
  (defaultNixStyleFlags ())
    { projectFlags =
        mempty
          { flagProjectDir = Flag projectDir
          }
    }

configureTests :: TestTree
configureTests =
  testGroup
    "Configure tests"
    [ testCase "New config" $ do
        let flags =
              defaultTestFlags
                { configFlags =
                    mempty
                      { configOptimization = Flag MaximumOptimisation
                      , configVerbosity = Flag silent
                      }
                }
        projConfig <- configureAction' flags [] defaultGlobalFlags

        Flag MaximumOptimisation
          @=? (packageConfigOptimization . projectConfigLocalPackages $ snd projConfig)
    , testCase "Replacement + new config" $ do
        let flags =
              defaultTestFlags
                { configExFlags =
                    mempty
                      { configAppend = Flag True
                      }
                , configFlags =
                    mempty
                      { configOptimization = Flag NoOptimisation
                      , configVerbosity = Flag silent
                      }
                }
        (_, ProjectConfig{..}) <- configureAction' flags [] defaultGlobalFlags

        Flag NoOptimisation @=? packageConfigOptimization projectConfigLocalPackages
        Flag silent @=? projectConfigVerbosity projectConfigBuildOnly
    , testCase "Old + new config" $ do
        let flags =
              defaultTestFlags
                { configExFlags =
                    mempty
                      { configAppend = Flag True
                      }
                , configFlags =
                    mempty
                      { configVerbosity = Flag silent
                      }
                }
        (_, ProjectConfig{..}) <- configureAction' flags [] defaultGlobalFlags

        Flag MaximumOptimisation @=? packageConfigOptimization projectConfigLocalPackages
        Flag silent @=? projectConfigVerbosity projectConfigBuildOnly
    , testCase "Old + new config, no appending" $ do
        let flags =
              defaultTestFlags
                { configFlags =
                    mempty
                      { configVerbosity = Flag silent
                      }
                }
        (_, ProjectConfig{..}) <- configureAction' flags [] defaultGlobalFlags

        NoFlag @=? packageConfigOptimization projectConfigLocalPackages
        Flag silent @=? projectConfigVerbosity projectConfigBuildOnly
    , testCase "Old + new config, backup check" $ do
        let flags =
              defaultTestFlags
                { configFlags =
                    mempty
                      { configVerbosity = Flag silent
                      }
                }
            backup = projectDir </> "cabal.project.local~"

        exists <- doesFileExist backup
        when exists $
          removeFile backup

        _ <- configureAction' flags [] defaultGlobalFlags

        doesFileExist backup
          >>= assertBool ("No file found, expected: " ++ backup)
    , testCase "Local program options" $ do
        let ghcFlags = ["-fno-full-laziness"]
            flags =
              defaultTestFlags
                { configFlags =
                    mempty
                      { configVerbosity = Flag silent
                      , configProgramArgs = [("ghc", ghcFlags)]
                      }
                }
        (_, ProjectConfig{..}) <- configureAction' flags [] defaultGlobalFlags

        assertEqual
          "global"
          Nothing
          (Map.lookup "ghc" (getMapMappend (packageConfigProgramArgs projectConfigAllPackages)))

        assertEqual
          "local"
          (Just ghcFlags)
          (Map.lookup "ghc" (getMapMappend (packageConfigProgramArgs projectConfigLocalPackages)))
    ]

projectDir :: FilePath
projectDir = "tests" </> "fixtures" </> "configure"