waargonaut-0.8.0.0: test/Golden.hs
{-# LANGUAGE NoImplicitPrelude #-}
module Golden (goldenTests) where
import Control.Applicative (pure, (*>))
import Control.Category ((.))
import Control.Monad ((>=>))
import System.Exit (exitFailure)
import System.FilePath (FilePath, takeBaseName)
import System.IO (IO, print)
import Data.Semigroup ((<>))
import Data.Either (either)
import Data.Function (($))
import Data.ByteString.Lazy (ByteString, readFile, toStrict)
import Data.Attoparsec.ByteString (parseOnly)
import Test.Tasty (TestTree, testGroup)
import Test.Tasty.Golden (findByExtension, goldenVsString)
import qualified Waargonaut.Decode as D
import qualified Waargonaut.Encode as E
import qualified Prettier.NestedObjs as WaargP
readAndEncodeFile :: FilePath -> IO ByteString
readAndEncodeFile = readFile
>=> D.decodeFromByteString parseOnly D.json . toStrict
>=> either (\err -> print err *> exitFailure) pure
>=> E.simpleEncodeByteString E.json
goldenTests :: IO TestTree
goldenTests = do
fs <- findByExtension [".golden"] "test/json-data/goldens"
pure . testGroup "Golden Tests" $
[ goldenVsString (takeBaseName input) input (readAndEncodeFile input)
| input <- fs
] <>
[ WaargP.testGoldenPrettyNested
]