{-# LANGUAGE LambdaCase #-} import Test.Tasty import Test.DocTest import Control.Exception import System.Exit import Variant import EADT main :: IO () main = wrapTests [ title "TASTY" $ defaultMain tastyTests , title "DOCTEST" $ doctest ["src/lib/"] ] title :: String -> IO () -> IO () title s m = do putStrLn "" putStrLn (replicate 30 '=') putStrLn s putStrLn (replicate 30 '=') m wrap :: IO () -> IO Bool wrap m = (m >> return True) `catch` (\e -> return (e == ExitSuccess)) wrapTests :: [IO ()] -> IO () wrapTests ts = (and <$> traverse wrap ts) >>= \case True -> title "SUMMARY" exitSuccess False -> title "SUMMARY" exitFailure tastyTests :: TestTree tastyTests = testGroup "utils-variant" [ testsVariant , testsEADT ]