hackport-0.6.4: cabal/cabal-testsuite/PackageTests/NewFreeze/Flags/new_freeze.test.hs
import Test.Cabal.Prelude
import Control.Monad.IO.Class
import Data.Char
import System.Directory
-- Test that 'cabal v2-freeze' freezes flag choices. my-local-package depends
-- on my-library-dep. my-library-dep has a flag, my-flag, which defaults to
-- true.
main = cabalTest $ withSourceCopy $
withRepo "repo" $ do
cabal' "v2-build" ["--dry-run"] >>= assertDependencyFlagChoice True
cabal "v2-freeze" ["--constraint=my-library-dep -my-flag"]
cwd <- fmap testCurrentDir getTestEnv
let freezeFile = cwd </> "cabal.project.freeze"
-- The freeze file should constrain the version and the flag.
-- TODO: The flag constraint should be qualified. See
-- https://github.com/haskell/cabal/issues/5134.
assertFileDoesContain freezeFile "any.my-library-dep ==1.0"
assertFileDoesContain freezeFile "my-library-dep -my-flag"
-- cabal should be able to find an install plan that fits the constraints
-- from the freeze file.
cabal' "v2-build" ["--dry-run"] >>= assertDependencyFlagChoice False
where
-- my-library-dep's flag controls whether it depends on true-dep or
-- false-dep, so this function uses the dependency to infer the flag choice.
assertDependencyFlagChoice True out = do
assertOutputContains "true-dep-1.0 (lib)" out
assertOutputDoesNotContain "false-dep" out
assertDependencyFlagChoice False out = do
assertOutputContains "false-dep-1.0 (lib)" out
assertOutputDoesNotContain "true-dep" out