haskell-debugger-0.9.0.0: test/haskell/Test/Utils.hs
module Test.Utils where
import System.FilePath
import System.IO.Temp
import qualified System.Process as P
-- | Copy the contents of a test directory (with a `*.hdb-test` in the root) to
-- a temporary location and return the path to the new location.
withHermeticDir :: Bool -- ^ Whether to keep the temp dir around for inspection
-> FilePath -- ^ Test dir
-> (FilePath -> IO r) -- ^ Continuation receives hermetic test dir (in temporary dir)
-> IO r
withHermeticDir keep src k = do
withTmpDir "hdb-test" $ \dest -> do
P.callCommand $ "cp -r " ++ src ++ " " ++ dest
k (dest </> takeBaseName src)
where
withTmpDir | keep = withPersistentSystemTempDirectory
| otherwise = withSystemTempDirectory
withPersistentSystemTempDirectory :: String -> (FilePath -> IO r) -> IO r
withPersistentSystemTempDirectory template k' = do
dir <- flip createTempDirectory template =<< getCanonicalTemporaryDirectory
k' dir