packages feed

interprocess-0.2.1.0: test/Tools/TestResult.hs

module Tools.TestResult (TestResult(..), displayResult, finish) where

import           System.Exit (die, exitSuccess)

data TestResult
  = Success
  | Failure String
  deriving (Eq, Ord, Show, Read)

instance Semigroup TestResult where
  Success <> a           = a
  Failure s <> Success   = Failure s
  Failure s <> Failure t = Failure $ unlines [s, t]

instance Monoid TestResult where
  mempty = Success

displayResult :: TestResult -> String
displayResult Success = "OK."
displayResult (Failure s) = unlines $ ("Failure" :) . map (mappend "  ") . filter (not . null) $ lines s

finish :: TestResult -> IO a
finish Success     = exitSuccess
finish (Failure s) = die s