{-# LANGUAGE BlockArguments #-}
import Hercules.CNix.Expr (init)
import Protolude
import SingleState
import qualified Spec
import System.Environment (setEnv)
import System.FilePath ((</>))
import System.IO.Temp (withSystemTempDirectory)
import System.Mem (performMajorGC)
import Test.Hspec.Runner
main :: IO ()
main = withTempHome do
init
withGlobalState $ do
-- for_ [(1 :: Int)..1000] \_ -> do
hspecWith config {configConcurrentJobs = Just 1} Spec.spec
-- `catch` (\e -> putErrText $ "Caught " <> show (e :: SomeException))
putErrText "Performing Haskell GC..."
performMajorGC
putErrText "Haskell GC done..."
where
config =
defaultConfig
{ configColorMode = ColorAlways
}
-- Perfect for any housing crisis
withTempHome :: IO () -> IO ()
withTempHome io =
withSystemTempDirectory "test-home" \home -> do
-- HOME may not affect Nix getHome(), as its static variable may already be bound
setEnv "HOME" home
setEnv "XDG_CACHE_HOME" (home </> ".cache")
setEnv "XDG_CONFIG_HOME" (home </> ".config")
setEnv "XDG_DATA_HOME" (home </> ".local" </> "share")
io