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 |   | SuiteDone Summary
14 |
15 | ||| A reporter consumes events emitted by the runner.
16 | public export
17 | record Reporter where
18 |   constructor MkReporter
19 |   onEvent : Event -> IO ()
20 |
21 | ||| Combine multiple reporters into one. Each event is dispatched
22 | ||| to all reporters in order.
23 | export
24 | combineReporters : List Reporter -> Reporter
25 | combineReporters rs = MkReporter $ \e => for_ rs $ \r => r.onEvent e
26 |