{-# LANGUAGE StandaloneDeriving, DeriveDataTypeable, TypeSynonymInstances #-} -- | Module for using Hspec tests module Test.MuCheck.TestAdapter.Hspec where import qualified Test.Hspec.Core.Runner as Hspec import Test.MuCheck.TestAdapter import Test.MuCheck.Utils.Print (showA, showAS) import Data.Hash.MD5 (md5s, Str(..)) import Data.Typeable import Data.Either (partitionEithers) import Data.List((\\)) deriving instance Typeable Hspec.Summary type HspecSummary = Hspec.Summary -- | Summarizable instance of `Hspec.Summary` instance Summarizable HspecSummary where testSummary mutantFiles results = Summary logMsg where (errorCases, executedCases) = partitionEithers results [successCases, failureCases] = map (\c -> filter (c . snd) executedCases) [isSuccess, isFailure] errorFiles = map (\l -> ".mutants/" ++ (md5s $ Str l) ++ ".hs") mutantFiles \\ map fst executedCases logMsg = showAS ["Details:", "Loading error files:", showA errorFiles, "Loading error messages:", showA errorCases, "Successes:", showA successCases, "Failure:", showA failureCases] isSuccess (Hspec.Summary { Hspec.summaryExamples = _, Hspec.summaryFailures = sf } ) = sf == 0