module Test.Mockery.Directory (
inTempDirectory
, inTempDirectoryNamed
, withFile
, touch
) where
import Control.Exception
import Control.Monad
import System.Directory
import System.FilePath
import System.IO.Error
import System.IO hiding (withFile)
import System.IO.Temp (withSystemTempDirectory, withSystemTempFile)
import qualified Data.ByteString as B
inTempDirectory :: IO a -> IO a
inTempDirectory action = withSystemTempDirectory "mockery" $ \path -> do
bracket getCurrentDirectory setCurrentDirectory $ \_ -> do
setCurrentDirectory path
action
inTempDirectoryNamed :: FilePath -> IO a -> IO a
inTempDirectoryNamed name action = inTempDirectory $ do
createDirectory name
setCurrentDirectory name
action
withFile :: String -> (FilePath -> IO a) -> IO a
withFile input action = withSystemTempFile "mockery" $ \file h -> do
hPutStr h input
hClose h
action file
touch :: FilePath -> IO ()
touch file = do
createDirectoryIfMissing True (takeDirectory file)
c <- catchJust (guard . isDoesNotExistError) (B.readFile file) (const $ return B.empty)
B.writeFile file c