gibberish-3.0.0.0: test/Golden.hs
module Main (main) where
import Data.Gibberish (genTrigraph)
import Data.Aeson.Encode.Pretty (encodePretty)
import Data.ByteString.Lazy (ByteString ())
import Data.Text qualified as Text
import Data.Text.IO qualified as Text
import Paths_gibberish (getDataDir)
import System.FilePath
import Test.Tasty
import Test.Tasty.Golden
import Prelude hiding (writeFile)
dictsDir :: IO FilePath
dictsDir = (</> "data" </> "dicts") <$> getDataDir
trigraphsDir :: IO FilePath
trigraphsDir = (</> "data" </> "trigraphs") <$> getDataDir
main :: IO ()
main = defaultMain =<< tests
tests :: IO TestTree
tests = testGroup "Golden Tests" <$> tests'
where
tests' = mapM createTest =<< findByExtension [".txt"] =<< dictsDir
createTest :: FilePath -> IO TestTree
createTest dict = do
goldenFile <- (</> replaceExtension (takeBaseName dict) "json") <$> trigraphsDir
pure $ goldenVsString (takeBaseName dict) goldenFile (runTest dict)
runTest :: FilePath -> IO ByteString
runTest f = genTrigraph' <$> Text.readFile f
where
genTrigraph' = encodePretty . genTrigraph . Text.lines