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 :: Text -> IO FilePath
testDir = FilePath -> IO FilePath
canonicalizePath (FilePath -> IO FilePath)
-> (Text -> FilePath) -> Text -> IO FilePath
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> FilePath
forall a. ToString a => a -> FilePath
toString
tempDirIO :: Text -> FilePath -> IO FilePath
tempDirIO :: Text -> FilePath -> IO FilePath
tempDirIO Text
prefix FilePath
path = do
FilePath
base <- Text -> IO FilePath
testDir Text
prefix
let dir :: FilePath
dir = FilePath
base FilePath -> FilePath -> FilePath
</> FilePath
"temp"
FilePath -> IO ()
removePathForcibly FilePath
dir
Bool -> FilePath -> IO ()
createDirectoryIfMissing Bool
False FilePath
dir
let absPath :: FilePath
absPath = FilePath
dir FilePath -> FilePath -> FilePath
</> FilePath
path
Bool -> FilePath -> IO ()
createDirectoryIfMissing Bool
True FilePath
absPath
return FilePath
absPath
tempDir :: MonadIO m => Text -> FilePath -> m FilePath
tempDir :: Text -> FilePath -> m FilePath
tempDir Text
prefix FilePath
path =
IO FilePath -> m FilePath
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO FilePath -> m FilePath) -> IO FilePath -> m FilePath
forall a b. (a -> b) -> a -> b
$ Text -> FilePath -> IO FilePath
tempDirIO Text
prefix FilePath
path
fixture ::
MonadIO m =>
Text ->
FilePath ->
m FilePath
fixture :: Text -> FilePath -> m FilePath
fixture Text
prefix FilePath
path = do
FilePath
base <- IO FilePath -> m FilePath
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO FilePath -> m FilePath) -> IO FilePath -> m FilePath
forall a b. (a -> b) -> a -> b
$ Text -> IO FilePath
testDir Text
prefix
return $ FilePath
base FilePath -> FilePath -> FilePath
</> FilePath
"fixtures" FilePath -> FilePath -> FilePath
</> FilePath
path
fixtureContent ::
MonadIO m =>
Text ->
FilePath ->
m Text
fixtureContent :: Text -> FilePath -> m Text
fixtureContent Text
prefix FilePath
subPath = do
FilePath
path <- Text -> FilePath -> m FilePath
forall (m :: * -> *). MonadIO m => Text -> FilePath -> m FilePath
fixture Text
prefix FilePath
subPath
ByteString -> Text
forall a b. ConvertUtf8 a b => b -> a
decodeUtf8 (ByteString -> Text) -> m ByteString -> m Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO ByteString -> m ByteString
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (FilePath -> IO ByteString
ByteString.readFile FilePath
path)