packages feed

hunit-gui-0.1.2: Test/HUnit/Gui/Descriptions.hs

module Test.HUnit.Gui.Descriptions (describeError, describeFailure, describePath)
where

import List
import Maybe
import Test.HUnit.Base

describeError :: String -> State -> String
describeError = describeProblem

describeFailure :: String -> State -> String
describeFailure = describeProblem

describeProblem :: String -> State -> String
describeProblem msg state =
    let path' = path state
    in if null path'
       then msg
       else (describePath path') ++ ":\n" ++ msg

describePath :: Path -> String
describePath [] = "?"
describePath p = case labels of [] -> prettyPrint listItems
                                _ -> concat [prettyPrint labels, " (", prettyPrint listItems, ")"]
    where
          prettyPrint = concat . intersperse ":" . reverse
          deListItem (ListItem i) = Just $ show i
          deListItem _ = Nothing
          deLabel (Label str) = Just str
          deLabel _ = Nothing
          escapeChar '\'' = ("\\'" ++)
          escapeChar c = (c:)
          prettyPrintLabel l = if ':' `elem` l
                               then "'" ++ (foldr escapeChar "" l) ++ "'"
                               else l
          labels = map prettyPrintLabel $ catMaybes $ map deLabel p
          listItems = catMaybes $ map deListItem p