module Test.Hspec.FailureReport where import System.IO import System.SetEnv import Test.Hspec.Config import Test.Hspec.Util (safeEvaluate, readMaybe, getEnv) writeFailureReport :: String -> IO () writeFailureReport x = do -- on Windows this can throw an exception when the input is too large, hence -- we use `safeEvaluate` here r <- safeEvaluate (setEnv "HSPEC_FAILURES" x) either onError return r where onError err = do hPutStrLn stderr ("WARNING: Could not write environment variable HSPEC_FAILURES (" ++ show err ++ ")") readFailureReport :: Config -> IO Config readFailureReport c = do mx <- getEnv "HSPEC_FAILURES" case mx >>= readMaybe of Nothing -> do hPutStrLn stderr "WARNING: Could not read environment variable HSPEC_FAILURES; `--re-run' is ignored!" return c Just xs -> do return $ configAddFilter (`elem` xs) c