module Test.Hspec.Core.FailureReportSpec (main, spec) where
import Helper
import System.IO
import qualified Control.Exception as E
import Test.Hspec.Core.FailureReport
import Test.Hspec.Core.Config
main :: IO ()
main = hspec spec
spec :: Spec
spec = do
describe "writeFailureReport" $ do
it "prints a warning on unexpected exceptions" $ do
r <- hCapture_ [stderr] $ writeFailureReport defaultConfig (E.throw (E.ErrorCall "some error"))
r `shouldBe` "WARNING: Could not write environment variable HSPEC_FAILURES (some error)\n"
describe "readFailureReport" $ do
context "when configFailureReport is specified" $ do
let
file = "report"
config = defaultConfig {configFailureReport = Just file}
report = FailureReport {
failureReportSeed = 23
, failureReportMaxSuccess = 42
, failureReportMaxSize = 65
, failureReportMaxDiscardRatio = 123
, failureReportPaths = [(["foo", "bar"], "baz")]
}
it "reads a failure report from a file" $ do
inTempDirectory $ do
writeFailureReport config report
readFailureReport config `shouldReturn` Just report
context "when file does not exist" $ do
it "returns Nothing" $ do
inTempDirectory $ do
readFailureReport config `shouldReturn` Nothing
context "when file is malformed" $ do
it "returns Nothing" $ do
hSilence [stderr] $ inTempDirectory $ do
writeFile file "foo"
readFailureReport config `shouldReturn` Nothing
it "prints a warning" $ do
inTempDirectory $ do
writeFile file "foo"
hCapture_ [stderr] (readFailureReport config) `shouldReturn` "WARNING: Could not read failure report from file \"report\"!\n"