module Test.MuCheck.TestAdapter.HUnit where
import qualified Test.HUnit as HUnit
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 HUnit.Counts
type HUnitSummary = HUnit.Counts
instance Summarizable HUnitSummary where
testSummary mutantFiles results = Summary logMsg
where (errorCases, executedCases) = partitionEithers results
errorFiles = map (\l -> ".mutants/" ++ (md5s $ Str l) ++ ".hs") mutantFiles \\ map fst executedCases
successCases = filter (isSuccess . snd) executedCases
failuresCases = filter (isFailure . snd) executedCases
runningErrorCases = filter ((>0) . HUnit.errors . snd) executedCases \\ failuresCases
failToFullyTryCases = filter ((\c -> HUnit.cases c > HUnit.tried c) . snd) executedCases
logMsg = showAS ["Details:",
"Loading error files:",showA errorFiles,
"Loading error messages:",showA errorCases,
"Successes:", showA successCases,
"Failures:", showA failuresCases,
"Error while running:", showA runningErrorCases,
"Incompletely tested (may include failures and running errors):",showA failToFullyTryCases]
isSuccess c = (HUnit.cases c == HUnit.tried c) && HUnit.failures c == 0 && HUnit.errors c == 0
isFailure c = HUnit.failures c > 0