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.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 (loadingErrorCases, executedCases) = partitionEithers results
loadingErrorFiles = 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 loadingErrorFiles,
"Loading error messages:",showA loadingErrorCases,
"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