0 | module Evince.Reporter
 1 |
 2 | import Evince.Core
 3 | import Evince.Report
 4 |
 5 | ||| Lifecycle events emitted by the runner during suite evaluation.
 6 | public export
 7 | data Event
 8 |   = SuiteStarted
 9 |   | GroupStarted String Nat
10 |   | GroupDone String
11 |   | TestDone TestReport Nat
12 |   | PendingTest String (Maybe String) Nat
13 |   | SuiteAborted
14 |   | SuiteDone Summary
15 |
16 | ||| A reporter consumes events emitted by the runner, in the runner's monad `m`.
17 | public export
18 | record Reporter (m : Type -> Type) where
19 |   constructor MkReporter
20 |   onEvent : Event -> m ()
21 |
22 | ||| Combine multiple reporters into one. Each event is dispatched
23 | ||| to all reporters in order.
24 | export
25 | combineReporters : Applicative m => List (Reporter m) -> Reporter m
26 | combineReporters rs = MkReporter $ \e => for_ rs $ \r => r.onEvent e
27 |