module Data.Text.ParagraphLayout.PrettyShow.Golden
( goldenTest
, goldenPath
, actualPath
, fontInfoPath
)
where
import Test.Hspec.Golden
import System.FilePath ((<.>), (</>))
import Data.Text.ParagraphLayout.PrettyShow
goldenPath :: FilePath -> String -> FilePath
goldenPath dir name = dir </> name <.> "golden"
actualPath :: FilePath -> String -> FilePath
actualPath dir name = dir </> name <.> "actual"
fontInfoPath :: FilePath -> String -> FilePath
fontInfoPath dir name = dir </> name <.> "fontInfo"
goldenTest :: (PrettyShow a, Show inner, Read inner) =>
FilePath -> (a -> inner) -> (inner -> a) -> inner -> FilePath -> Golden a
goldenTest goldenDir unwrap wrap innerOutput name = Golden
{ output = wrap innerOutput
, encodePretty = show . unwrap
, writeToFile = \ path -> writeFile path . prettyShow
, readFromFile = \ path -> readFile path >>= return . wrap . read
, goldenFile = goldenPath goldenDir name
, actualFile = Just (actualPath goldenDir name)
, failFirstTime = True
}