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"
|