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
|
{-# LANGUAGE RecordWildCards #-}
module UnitTests.Distribution.Client.Configure (tests) where
import Distribution.Client.CmdConfigure
import Test.Tasty
import Test.Tasty.HUnit
import Control.Monad
import qualified Data.Map as Map
import System.Directory
import System.FilePath
import Distribution.Verbosity
import Distribution.Client.Setup
import Distribution.Client.NixStyleOptions
import Distribution.Client.ProjectConfig.Types
import Distribution.Client.ProjectFlags
import Distribution.Simple
import Distribution.Simple.Flag
tests :: [TestTree]
tests =
[ configureTests
]
configureTests :: TestTree
configureTests = testGroup "Configure tests"
[ testCase "New config" $ do
let flags = (defaultNixStyleFlags ())
{ 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 = (defaultNixStyleFlags ())
{ configExFlags = mempty
{ configAppend = Flag True }
, configFlags = mempty
{ configOptimization = Flag NoOptimisation
, configVerbosity = Flag silent
}
, projectFlags = mempty
{ flagProjectFileName = Flag projectFile }
}
(_, ProjectConfig {..}) <- configureAction' flags [] defaultGlobalFlags
Flag NoOptimisation @=? packageConfigOptimization projectConfigLocalPackages
Flag silent @=? projectConfigVerbosity projectConfigBuildOnly
, testCase "Old + new config" $ do
let flags = (defaultNixStyleFlags ())
{ configExFlags = mempty
{ configAppend = Flag True }
, configFlags = mempty
{ configVerbosity = Flag silent }
, projectFlags = mempty
{ flagProjectFileName = Flag projectFile }
}
(_, ProjectConfig {..}) <- configureAction' flags [] defaultGlobalFlags
Flag MaximumOptimisation @=? packageConfigOptimization projectConfigLocalPackages
Flag silent @=? projectConfigVerbosity projectConfigBuildOnly
, testCase "Old + new config, no appending" $ do
let flags = (defaultNixStyleFlags ())
{ configFlags = mempty
{ configVerbosity = Flag silent }
, projectFlags = mempty
{ flagProjectFileName = Flag projectFile }
}
(_, ProjectConfig {..}) <- configureAction' flags [] defaultGlobalFlags
NoFlag @=? packageConfigOptimization projectConfigLocalPackages
Flag silent @=? projectConfigVerbosity projectConfigBuildOnly
, testCase "Old + new config, backup check" $ do
let flags = (defaultNixStyleFlags ())
{ configFlags = mempty
{ configVerbosity = Flag silent }
, projectFlags = mempty
{ flagProjectFileName = Flag projectFile }
}
backup = projectFile <.> "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 = (defaultNixStyleFlags ())
{ configFlags = mempty
{ configVerbosity = Flag silent
, configProgramArgs = [("ghc", ghcFlags)]
}
, projectFlags = mempty
{ flagProjectFileName = Flag projectFile }
}
(_, ProjectConfig {..}) <- configureAction' flags [] defaultGlobalFlags
assertEqual "global"
Nothing
(Map.lookup "ghc" (getMapMappend (packageConfigProgramArgs projectConfigAllPackages)))
assertEqual "local"
(Just ghcFlags)
(Map.lookup "ghc" (getMapMappend (packageConfigProgramArgs projectConfigLocalPackages)))
]
projectFile :: FilePath
projectFile = "tests" </> "fixtures" </> "configure" </> "cabal.project"
|