module Test.MuCheck.TestAdapter.QuickCheck where
import qualified Test.QuickCheck.Test as Qc
import Test.MuCheck.TestAdapter
import Test.MuCheck.Utils.Print (showA, showAS)
import Data.Hash.MD5 (md5s, Str(..))
import Data.Typeable
import Data.List((\\))
import Data.Either (partitionEithers)
deriving instance Typeable Qc.Result
type QuickCheckSummary = Qc.Result
instance Summarizable QuickCheckSummary where
testSummary mutantFiles results = Summary logMsg
where (errorCases, executedCases) = partitionEithers results
[successCases, failureCases, gaveUpCases] = map (\c -> filter (c . snd) executedCases) [isSuccess, isFailure, isOther]
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,
"Gaveups:", showA gaveUpCases]
isSuccess = Qc.isSuccess
isFailure Qc.Failure{} = True
isFailure _ = False
isOther Qc.GaveUp{} = True
isOther _ = False