{-# LANGUAGE OverloadedStrings #-} import qualified Streaming.Base64 as Base64 import Control.Arrow import Control.Monad import Data.ByteString.Streaming (ByteString) import qualified Data.ByteString.Streaming as Bytes import Streaming.With import System.FilePath import Prelude () import Prelude.Compat import Test.Tasty import Test.Tasty.Golden (findByExtension, goldenVsString) main :: IO () main = defaultMain =<< do decodedFiles <- findByExtension [".decoded"] "." encodedFiles <- findByExtension [".encoded"] "." return $ testGroup "Golden tests" $ map encodingTest decodedFiles <> map decodingTest encodedFiles encodingTest :: FilePath -> TestTree encodingTest decodedFile = goldenVsString name encodedFile f where encodedFile = replaceExtension decodedFile "encoded" name = "Encoding " <> dropExtension decodedFile f = withBinaryFileContents decodedFile (Bytes.toLazy_ <<< Bytes.pack <<< Base64.encode) decodingTest :: FilePath -> TestTree decodingTest encodedFile = goldenVsString name decodedFile f where decodedFile = replaceExtension encodedFile "decoded" name = "Decoding " <> dropExtension encodedFile f = withBinaryFileContents encodedFile (Bytes.toLazy_ <<< Base64.decode <<< Bytes.unpack)