instana-haskell-trace-sdk-0.7.0.0: test/integration/Instana/SDK/IntegrationTest/HUnitExtra.hs
module Instana.SDK.IntegrationTest.HUnitExtra
( SuiteResult
, applyLabel
, assertAllIO
, failIO
, mergeTestResults
, passIO
, skip
) where
import qualified Data.List as List
import System.Log.Logger (infoM)
import Test.HUnit (Assertion, Counts (..),
Test (..), assertBool,
assertFailure)
import Instana.SDK.IntegrationTest.Logging (testLogger)
failIO :: String -> IO Test
failIO message =
return $ TestCase $ assertFailure message
passIO :: IO Test
passIO =
return $ TestCase $ assertBool "" True
assertAllIO :: [Assertion] -> IO Test
assertAllIO assertions =
return $ TestList $ List.map TestCase assertions
applyLabel :: String -> IO Test -> IO Test
applyLabel label testIO = do
t <- testIO
return $ TestLabel label t
skip :: String -> IO Test -> IO Test
skip label _ = do
infoM testLogger $ "Skipped: " ++ label
return $ TestLabel label $ TestList []
type SuiteResult = (Counts, [String])
mergeTestResults :: [SuiteResult] -> SuiteResult
mergeTestResults allResults =
let
(counts_, fullReport) =
List.foldl
merge
( (Counts
{ cases = 0
, tried = 0
, errors = 0
, failures = 0
}
)
, []
)
allResults
in
(counts_, fullReport)
merge :: SuiteResult -> SuiteResult -> SuiteResult
merge (counts1, report1) (counts2, report2) =
( Counts
{ cases = cases counts1 + cases counts2
, tried = tried counts1 + tried counts2
, errors = errors counts1 + errors counts2
, failures = failures counts1 + failures counts2
}
, report1 ++ report2
)