module Main where import Test.HUnit (Counts(..), showCounts) import qualified Halfs (unitTests) import qualified HighLevelTests (unitTests) import qualified Halfs.FileHandle (unitTests) import qualified Halfs.BasicIO (unitTests) import qualified Halfs.TheBlockMap (unitTests) import Halfs.TestFramework -- base import Control.Monad.Error(catchError) import System.Environment(getArgs) import System.Exit(exitWith, ExitCode(..)) main' :: IO () main' = do args <- getArgs let runFast = case args of ("--fast":_) -> True _ -> False counts <- catchError (runAllTests (Halfs.FileHandle.unitTests ++ (HighLevelTests.unitTests runFast) ++ Halfs.TheBlockMap.unitTests ++ (Halfs.unitTests runFast) ++ Halfs.BasicIO.unitTests)) (\ e -> error "error") putStrLn "---------" putStrLn "Test Summary (may not include QC tests!):" let allCounts@(Counts _ _ fails errs) = foldl1 combineCounts counts putStrLn $ showCounts allCounts if (fails > 0 || errs > 0) then exitWith (ExitFailure (fails + errs)) else exitWith ExitSuccess main :: IO () main = let handler = (\e -> putStrLn "blah3" >> print e >> error "woot") in catch (catchError main' handler) handler