From 72ad5955423e1397e3178eca4ba6c460cc246a47 Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Fri, 5 Jun 2009 17:29:20 +0000 Subject: [PATCH] reflect success/failure in doctest and unittest runners' exit codes --- Tests.hs | 7 ++++++- tools/doctest.hs | 5 +++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Tests.hs b/Tests.hs index c9e9a4020..5363fff66 100644 --- a/Tests.hs +++ b/Tests.hs @@ -202,6 +202,7 @@ import Data.Time.Format import Locale (defaultTimeLocale) import Text.ParserCombinators.Parsec import Test.HUnit.Tools (runVerboseTests) +import System.Exit (exitFailure,exitSuccess) import Commands.All import Ledger @@ -209,7 +210,11 @@ import Options import Utils -runtests opts args = runner ts +runtests opts args = do + (counts,_) <- runner ts + if errors counts > 0 || (failures counts > 0) + then exitFailure + else exitSuccess where runner | (Verbose `elem` opts) = runVerboseTests | otherwise = \t -> runTestTT t >>= return . (flip (,) 0) diff --git a/tools/doctest.hs b/tools/doctest.hs index af57737a6..8aa463588 100644 --- a/tools/doctest.hs +++ b/tools/doctest.hs @@ -30,7 +30,7 @@ to that, and/or add this to hledger's built-in test runner. module Main where import Data.List (isPrefixOf) import System (getArgs) -import System.Exit (ExitCode(ExitSuccess)) +import System.Exit (ExitCode(ExitSuccess),exitFailure,exitSuccess) import System.IO (hGetContents, hPutStr, hPutStrLn, stderr) import System.Process (runInteractiveCommand, waitForProcess) import Text.Printf (printf) @@ -40,7 +40,8 @@ main = do s <- readFile f let tests = doctests s putStrLn $ printf "Running %d doctests from %s" (length tests) f - mapM_ runShellDocTest $ doctests s + ok <- mapM runShellDocTest $ doctests s + if any not ok then exitFailure else exitSuccess runShellDocTest :: String -> IO Bool runShellDocTest s = do