module Test.Hspec.FailureReport (
writeFailureReport
, readFailureReport
) where
import System.IO
import System.SetEnv
import qualified Test.QuickCheck as QC
import Test.Hspec.Config
import Test.Hspec.Util (Path, safeTry, readMaybe, getEnv)
type Seed = Integer
writeFailureReport :: (Seed, [Path]) -> IO ()
writeFailureReport x = do
safeTry (setEnv "HSPEC_FAILURES" $ show x) >>= either onError return
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 (seed, xs) -> do
(return . setSeed seed . configAddFilter (`elem` xs)) c
setSeed :: Seed -> Config -> Config
setSeed seed c
| hasSeed = c
| otherwise = configSetSeed seed c
where
hasSeed = maybe False (const True) (QC.replay $ configQuickCheckArgs c)