module Test.HUnit.Gui.Runner (GuiInterface(..), runTests) where import Test.HUnit import Test.HUnit.Gui.Descriptions data GuiInterface = GuiInterface (String -> IO ()) (String -> IO ()) (Counts -> IO ()) runTests :: GuiInterface -> Test -> IO Counts runTests (GuiInterface updateTestsRun updateFailureDetails updateTestBar) tests = do (counts', _) <- performTest reportStart reportErrors reportFailures GuiUpdater tests updateTestsRun $ showCounts counts' updateTestBar counts' return counts' where reportStart state _ = do updateTestsRun $ show $ describePath $ path state updateTestBar $ counts state return GuiUpdater reportErrors msg state _ = reportErrorsFailures (describeError msg state) state reportFailures msg state _ = reportErrorsFailures (describeFailure msg state) state reportErrorsFailures msg state = do updateTestBar $ counts state updateFailureDetails msg return GuiUpdater -- trivial "state" token data GuiUpdater = GuiUpdater