module TestUtil where
import Control.Exception (bracket)
import Control.Monad (void)
import Data.Aeson (encodeFile, decode, ToJSON, FromJSON)
import Data.Aeson.Encode.Pretty (encodePretty)
import Data.Bool (bool)
import System.Directory ( createDirectoryIfMissing
, removeDirectoryRecursive
, doesDirectoryExist )
import System.IO (withFile, IOMode(ReadMode))
import Test.Hspec (shouldBe)
import qualified Data.ByteString.Lazy as B
prepareDirs :: FilePath -> IO ()
prepareDirs path = removeRootOutputDir path >> createDirectoryIfMissing True path
removeRootOutputDir :: FilePath -> IO ()
removeRootOutputDir path = do
exists <- doesDirectoryExist path
bool (return ()) (removeDirectoryRecursive path) exists
checkSerialization :: (FromJSON a, ToJSON a, Show a, Eq a)
=> FilePath
-> a
-> IO ()
checkSerialization path x = do
B.writeFile path $ encodePretty x
withFile path ReadMode $ \h -> do
contents <- B.hGetContents h
Just x `shouldBe` decode contents