sensei-0.9.0: test/SpecHook.hs
module SpecHook where
import Helper
import System.Environment
import GHC.Conc
import qualified Language.Haskell.GhciWrapper as Interpreter
installPackageEnvironment :: FilePath -> FilePath -> IO ()
installPackageEnvironment ghc file = callProcess "cabal" ["install", "-v0", "-w", ghc, "-z", "--lib", "hspec", "hspec-meta", "--package-env", file]
ensurePackageEnvironment :: FilePath -> FilePath -> IO ()
ensurePackageEnvironment ghc file = doesFileExist file >>= \ case
False -> installPackageEnvironment ghc file
True -> pass
getGhcVersion :: FilePath -> IO String
getGhcVersion ghc = do
ghcVersion <- Interpreter.numericVersion ghc
setEnv Interpreter.sensei_ghc_version ghcVersion
return ghcVersion
setPackageEnvironment :: IO ()
setPackageEnvironment = do
dir <- getCurrentDirectory
env <- getEnvironment
let ghc = Interpreter.lookupGhc env
ghcVersion <- getGhcVersion ghc
let file = dir </> "dist-newstyle" </> "test-env" </> ghcVersion
ensurePackageEnvironment ghc file
setEnv "GHC_ENVIRONMENT" file
hook :: Spec -> Spec
hook spec = runIO (setPackageEnvironment >> getNumProcessors >>= setNumCapabilities) >> parallel spec