packages feed

smuggler-0.0.0: test/Test.hs

module Main where

import Data.Foldable (for_)
import System.Directory (listDirectory, removeDirectoryRecursive, removeFile)
import System.Exit (exitFailure)
import System.FilePath (isExtensionOf, splitExtension, (<.>), (</>))

main :: IO ()
main = do
    files <- map ("test/Test" </>) <$> listDirectory "test/Test/"
    let testFiles = filter ("test" `isExtensionOf`) files
    -- compare outputs of .test and .golden files
    result <- traverse compareWithGolden testFiles >>= pure . foldr (&&) True


    -- clean up all .test files
    putStrLn "Cleaning tests"
    for_ testFiles removeFile

    -- clean up .smuggler/ cache directory
    putStrLn "Cleaning smuggler cache"
    removeDirectoryRecursive ".smuggler"

    if result
        then putStrLn "Success"
        else putStrLn "Fail" >> exitFailure
  where
    compareWithGolden :: FilePath -> IO Bool
    compareWithGolden f = do
        let (name, _) = splitExtension f
        goldenContent <- readFile $ name <.> "golden"
        testContent   <- readFile f
        pure $ goldenContent == testContent