module Test.Chuchu.OutputPrinter
( putDoc
, warn
, describeAbacate
, describeBasicScenario
, BasicScenarioKind(..)
, describeStep
, StepResult(..)
) where
import Control.Monad.IO.Class (MonadIO(liftIO))
import Language.Abacate hiding (StepKeyword (..))
import System.IO (hPutStrLn, stderr)
import qualified Data.Text as T
import qualified Text.PrettyPrint.ANSI.Leijen as D
putDoc :: MonadIO m => D.Doc -> m ()
putDoc = liftIO . D.putDoc . (D.<> D.linebreak)
warn :: MonadIO m => String -> m ()
warn = liftIO . hPutStrLn stderr
t2d :: T.Text -> D.Doc
t2d = D.text . T.unpack
describeAbacate :: Abacate -> D.Doc
describeAbacate feature =
D.vsep $
describeTags (fTags feature) ++ [D.white $ t2d $ fHeader feature]
describeTags :: Tags -> [D.Doc]
describeTags = map (D.dullcyan . ("@" D.<>) . t2d)
describeBasicScenario :: BasicScenarioKind -> BasicScenario -> D.Doc
describeBasicScenario kind scenario =
D.indent 2 $
prettyTags kind $
D.bold ((describeBasicScenarioKind kind) D.<+> t2d (bsName scenario))
where describeBasicScenarioKind BackgroundKind = "Background:"
describeBasicScenarioKind (ScenarioKind _) = "Scenario:"
prettyTags BackgroundKind = id
prettyTags (ScenarioKind tags) = D.vsep . (describeTags tags ++) . (:[])
data BasicScenarioKind = BackgroundKind | ScenarioKind Tags
describeStep :: StepResult -> Step -> D.Doc
describeStep result step =
D.indent 4 $
color result (D.text (show $ stStepKeyword step) D.<+> t2d (stBody step))
where
color SuccessfulStep = D.green
color FailedStep = D.red
color UnknownStep = D.yellow
data StepResult = SuccessfulStep | FailedStep | UnknownStep deriving (Eq)