module Test.Tools (quickBatch', checkBatch') where import Control.Monad import System.Console.ANSI import System.Exit import Test.QuickCheck import Test.QuickCheck.Checkers import qualified Control.Exception as E quickBatch' :: TestBatch -> IO () quickBatch' = checkBatch' (stdArgs { maxSuccess = 500 }) checkBatch' :: Args -> TestBatch -> IO () checkBatch' args (name, tsts) = do writeLn Cyan name forM_ tsts $ \(s, p) -> do write White (" " ++ s ++ ": ") r <- quickCheckWithResult (args { chatty = False}) p `E.catch` ((\e -> write Red (show e) >> exitFailure) :: E.SomeException -> IO a) case r of Success _ _ m -> write Green m GaveUp _ _ m -> write Magenta m >> exitFailure Failure _ _ _ _ _ _ _ m -> write Red m >> exitFailure NoExpectedFailure _ _ m -> write Red m >> exitFailure write, writeLn :: Color -> String -> IO () write c = withColour c . putStr writeLn c = withColour c . putStrLn withColour :: Color -> IO () -> IO () withColour c a = do setSGR [Reset, SetColor Foreground Vivid c] a setSGR [Reset]