HaRe-0.8.4.0: test/Main.hs
{-# LANGUAGE CPP #-}
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Control.Monad
import TestUtils
import qualified Turtle as Tu
import qualified Control.Foldl as Fold
import Test.Hspec.Runner
import qualified Spec
-- ---------------------------------------------------------------------
main :: IO ()
main = do
cleanupDirs (Tu.ends "/.stack-work")
cleanupDirs (Tu.ends "/dist")
setupStackFiles
hspec Spec.spec
-- ---------------------------------------------------------------------
setupStackFiles :: IO ()
setupStackFiles =
forM_ stackFiles $ \f ->
writeFile f stackFileContents
-- ---------------------------------------------------------------------
stackFiles :: [FilePath]
stackFiles =
[ "./test/testdata/stack.yaml"
, "./test/testdata/cabal/cabal3/stack.yaml"
, "./test/testdata/cabal/foo/stack.yaml"
, "./test/testdata/cabal/cabal4/stack.yaml"
, "./test/testdata/cabal/cabal1/stack.yaml"
, "./test/testdata/cabal/cabal2/stack.yaml"
]
-- |Choose a resolver based on the current compiler, otherwise HaRe/ghc-mod will
-- not be able to load the files
resolver :: String
resolver =
#if __GLASGOW_HASKELL__ > 710
"resolver: nightly-2016-08-25"
#else
"resolver: lts-6.13"
#endif
-- ---------------------------------------------------------------------
{-
resolver: lts-6.13
# resolver: nightly-2016-08-25
packages:
- '.'
extra-deps: []
-}
stackFileContents :: String
stackFileContents = unlines
[ "# WARNING: THIS FILE IS AUTOGENERATED IN test/Main.hs. IT WILL BE OVERWRITTEN ON EVERY TEST RUN"
, resolver
, "packages:"
, "- '.'"
, "extra-deps: "
, "- conversion-1.2.1"
, "- conversion-bytestring-1.0.1"
, "- conversion-case-insensitive-1.0.0.0"
, "- conversion-text-1.0.1"
]
-- ---------------------------------------------------------------------
cleanupDirs :: Tu.Pattern t -> IO ()
cleanupDirs ending = do
dirs <- getDirs ending
forM_ dirs $ \dir -> Tu.rmtree dir
getDirs :: Tu.Pattern t -> IO [Tu.FilePath]
getDirs ending = do
let
-- dirs = Tu.find (Tu.ends "/.stack-work") "./test"
dirs = Tu.find ending "./test"
Tu.fold dirs Fold.list
listStackDirs :: IO ()
listStackDirs = Tu.sh $ do
dirs <- Tu.find (Tu.ends "/.stack-work") "./test"
mapM Tu.echo $ Tu.textToLines $ "found:" Tu.<> (Tu.repr dirs)