hspec-core-2.11.17: src/Test/Hspec/Core/Runner/Result.hs
{-# LANGUAGE CPP #-}
module Test.Hspec.Core.Runner.Result (
-- RE-EXPORTED from Test.Hspec.Core.Runner
SpecResult(SpecResult)
, specResultItems
, specResultSuccess
, ResultItem(ResultItem)
, resultItemPath
, resultItemStatus
, resultItemIsFailure
, ResultItemStatus(..)
, Summary(..)
, toSummary
, isSuccess
-- END RE-EXPORTED from Test.Hspec.Core.Runner
, toSpecResult
) where
import Prelude ()
import Test.Hspec.Core.Compat
import Test.Hspec.Core.Util
import qualified Test.Hspec.Core.Format as Format
-- |
-- @since 2.10.0
data SpecResult = SpecResult {
-- |
-- @since 2.10.0
specResultItems :: [ResultItem]
-- |
-- @since 2.10.0
, specResultSuccess :: !Bool
} deriving (Eq, Show)
-- |
-- @since 2.10.0
data ResultItem = ResultItem {
-- |
-- @since 2.10.0
resultItemPath :: Path
-- |
-- @since 2.10.0
, resultItemStatus :: ResultItemStatus
} deriving (Eq, Show)
-- |
-- @since 2.10.0
resultItemIsFailure :: ResultItem -> Bool
resultItemIsFailure item = case resultItemStatus item of
ResultItemSuccess -> False
ResultItemPending -> False
ResultItemFailure -> True
data ResultItemStatus =
ResultItemSuccess
| ResultItemPending
| ResultItemFailure
deriving (Eq, Show)
toSpecResult :: [(Path, Format.Item)] -> SpecResult
toSpecResult results = SpecResult items success
where
items = map toResultItem results
success = all (not . resultItemIsFailure) items
toResultItem :: (Path, Format.Item) -> ResultItem
toResultItem (path, item) = ResultItem path status
where
status = case Format.itemResult item of
Format.Success{} -> ResultItemSuccess
Format.Pending{} -> ResultItemPending
Format.Failure{} -> ResultItemFailure
-- | Summary of a test run.
data Summary = Summary {
summaryExamples :: !Int
, summaryFailures :: !Int
} deriving (Eq, Show)
instance Monoid Summary where
mempty = Summary 0 0
#if MIN_VERSION_base(4,11,0)
instance Semigroup Summary where
#endif
(Summary x1 x2)
#if MIN_VERSION_base(4,11,0)
<>
#else
`mappend`
#endif
(Summary y1 y2) = Summary (x1 + y1) (x2 + y2)
toSummary :: SpecResult -> Summary
toSummary result = Summary {
summaryExamples = length items
, summaryFailures = length failures
} where
items = specResultItems result
failures = filter resultItemIsFailure items
-- | `True` if the given `Summary` indicates that there were no
-- failures, `False` otherwise.
isSuccess :: Summary -> Bool
isSuccess summary = summaryFailures summary == 0