ribosome-test-0.4.0.0: lib/Ribosome/Test/File.hs
module Ribosome.Test.File where
import qualified Data.ByteString as ByteString (readFile)
import System.Directory (canonicalizePath, createDirectoryIfMissing, removePathForcibly)
import System.FilePath ((</>))
testDir :: Text -> IO FilePath
testDir = canonicalizePath . toString
-- raises exception if cwd is not the package root so we don't damage anything
tempDirIO :: Text -> FilePath -> IO FilePath
tempDirIO prefix path = do
base <- testDir prefix
let dir = base </> "temp"
removePathForcibly dir
createDirectoryIfMissing False dir
let absPath = dir </> path
createDirectoryIfMissing True absPath
return absPath
tempDir :: MonadIO m => Text -> FilePath -> m FilePath
tempDir prefix path =
liftIO $ tempDirIO prefix path
fixture ::
MonadIO m =>
Text ->
FilePath ->
m FilePath
fixture prefix path = do
base <- liftIO $ testDir prefix
return $ base </> "fixtures" </> path
fixtureContent ::
MonadIO m =>
Text ->
FilePath ->
m Text
fixtureContent prefix subPath = do
path <- fixture prefix subPath
decodeUtf8 <$> liftIO (ByteString.readFile path)