{-# LANGUAGE StandaloneDeriving, DeriveDataTypeable, TypeSynonymInstances #-} -- | Module for using HUnit tests 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 -- | Summarizable instance of `HUnitSumary` 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