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
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