ghc-mod/test/Main.hs

97 lines
3.3 KiB
Haskell

{-# LANGUAGE CPP, ScopedTypeVariables #-}
import Dir
import Control.Exception as E
import Control.Monad (void)
import GhcMod (debugInfo)
import System.Process
import System.Environment
import Test.Hspec
import TestUtils
import qualified BrowseSpec
import qualified CabalHelperSpec
import qualified CaseSplitSpec
import qualified CheckSpec
import qualified CradleSpec
import qualified CustomPackageDbSpec
import qualified FileMappingSpec
import qualified FindSpec
import qualified FlagSpec
import qualified GhcPkgSpec
import qualified HomeModuleGraphSpec
import qualified InfoSpec
import qualified LangSpec
import qualified LintSpec
import qualified ListSpec
import qualified MonadSpec
import qualified PathsAndFilesSpec
import qualified ShellParseSpec
import qualified TargetSpec
spec :: Spec
spec = do
describe "Browse" BrowseSpec.spec
describe "CabalHelper" CabalHelperSpec.spec
describe "CaseSplit" CaseSplitSpec.spec
describe "Check" CheckSpec.spec
describe "Cradle" CradleSpec.spec
describe "CustomPackageDb" CustomPackageDbSpec.spec
describe "FileMapping" FileMappingSpec.spec
describe "Find" FindSpec.spec
describe "Flag" FlagSpec.spec
describe "GhcPkg" GhcPkgSpec.spec
describe "HomeModuleGraph" HomeModuleGraphSpec.spec
describe "Info" InfoSpec.spec
describe "Lang" LangSpec.spec
describe "Lint" LintSpec.spec
describe "List" ListSpec.spec
describe "Monad" MonadSpec.spec
describe "PathsAndFiles" PathsAndFilesSpec.spec
describe "ShellParse" ShellParseSpec.spec
describe "Target" TargetSpec.spec
main :: IO ()
main = do
#if __GLASGOW_HASKELL__ >= 708
unsetEnv "GHC_PACKAGE_PATH"
#endif
let sandboxes = [ "test/data/cabal-project"
, "test/data/check-packageid"
, "test/data/duplicate-pkgver/"
, "test/data/broken-cabal/"
]
genSandboxCfg dir = withDirectory dir $ \cwdir -> do
system ("rm cabal.sandbox.config; cabal sandbox init")
pkgDirs =
[ "test/data/cabal-project/.cabal-sandbox/i386-osx-ghc-7.6.3-packages.conf.d"
, "test/data/check-packageid/.cabal-sandbox/i386-osx-ghc-7.6.3-packages.conf.d"
, "test/data/duplicate-pkgver/.cabal-sandbox/i386-osx-ghc-7.6.3-packages.conf.d"]
genGhcPkgCache dir = system $ "ghc-pkg recache --force -f" ++ dir
let cleanCmd = "git clean -dXf test/data/"
putStrLn $ "$ " ++ cleanCmd
void $ system cleanCmd
void $ system "cabal --version"
void $ system "ghc --version"
genSandboxCfg `mapM_` sandboxes
genGhcPkgCache `mapM_` pkgDirs
let stackDir = "test/data/stack-project"
void $ withDirectory_ stackDir $ do
let ghcver = let gvn = show (__GLASGOW_HASKELL__ :: Int)
(major, minor') = splitAt (length gvn - 2) gvn
minor = case dropWhile (=='0') minor' of
"" -> "0"
x -> x
in major ++ "." ++ minor
void $ system $ "sed '$ a resolver: ghc-" ++ ghcver ++ "' stack.yaml.in > stack.yaml"
void $ system "stack setup"
void $ system "stack build"
(putStrLn =<< runD debugInfo)
`E.catch` (\(_ :: E.SomeException) -> return () )
hspec spec