diff --git a/Cabal/Distribution/Simple/Test/LibV09.hs b/Cabal/Distribution/Simple/Test/LibV09.hs index 482953822d3a5765ff205c8a63d17a5e5ed5fd74..859e6a9958c70d0fc4cd5f2c1e942475943aec1e 100644 --- a/Cabal/Distribution/Simple/Test/LibV09.hs +++ b/Cabal/Distribution/Simple/Test/LibV09.hs @@ -29,8 +29,9 @@ import Distribution.TestSuite import Distribution.Text import Distribution.Verbosity ( normal ) +import Control.Concurrent (forkIO) import Control.Exception ( bracket ) -import Control.Monad ( when, unless ) +import Control.Monad ( when, unless, void ) import Data.Maybe ( mapMaybe ) import System.Directory ( createDirectoryIfMissing, doesDirectoryExist, doesFileExist @@ -81,6 +82,12 @@ runTest pkg_descr lbi flags suite = do hPutStr wIn $ show (tempLog, PD.testName suite) hClose wIn + -- Append contents of temporary log file to the final human- + -- readable log file + logText <- hGetContents rOut + -- Force the IO manager to drain the test output pipe + void $ forkIO $ length logText `seq` return () + -- Run test executable _ <- do let opts = map (testOption pkg_descr lbi suite) $ testOptions flags dataDirPath = pwd </> PD.dataDir pkg_descr @@ -118,9 +125,6 @@ runTest pkg_descr lbi flags suite = do -- Write summary notice to log file indicating start of test suite appendFile (logFile suiteLog) $ summarizeSuiteStart $ PD.testName suite - -- Append contents of temporary log file to the final human- - -- readable log file - logText <- hGetContents rOut appendFile (logFile suiteLog) logText -- Write end-of-suite summary notice to log file diff --git a/Cabal/tests/PackageTests.hs b/Cabal/tests/PackageTests.hs index 458c2a0aa170147f946c5256d5fb5873640f4e43..e065f0f9d7cf54f2aee1253e6caa47bc7c794f75 100644 --- a/Cabal/tests/PackageTests.hs +++ b/Cabal/tests/PackageTests.hs @@ -79,12 +79,12 @@ tests config version = -- only for higher versions. , testGroup "TestSuiteTests" [ testGroup "ExeV10" - (PackageTests.TestSuiteTests.ExeV10.Check.checks ghcPath) + (PackageTests.TestSuiteTests.ExeV10.Check.checks config) , testGroup "LibV09" - (PackageTests.TestSuiteTests.LibV09.Check.checks inplaceSpec ghcPath) + (PackageTests.TestSuiteTests.LibV09.Check.checks config) ] - , testCase "TestOptions" (PackageTests.TestOptions.Check.suite ghcPath) - , testCase "BenchmarkStanza" (PackageTests.BenchmarkStanza.Check.suite ghcPath) + , testCase "TestOptions" (PackageTests.TestOptions.Check.suite config) + , testCase "BenchmarkStanza" (PackageTests.BenchmarkStanza.Check.suite config) -- ^ The benchmark stanza test will eventually be required -- only for higher versions. , testCase "BenchmarkExeV10/Test" @@ -101,8 +101,8 @@ tests config version = , testCase "DeterministicAr" (PackageTests.DeterministicAr.Check.suite config) , testCase "EmptyLib/emptyLib" - (PackageTests.EmptyLib.Check.emptyLib ghcPath) - , testCase "Haddock" (PackageTests.Haddock.Check.suite ghcPath) + (PackageTests.EmptyLib.Check.emptyLib config) + , testCase "Haddock" (PackageTests.Haddock.Check.suite config) , testCase "OrderFlags" (PackageTests.OrderFlags.Check.suite config) , testCase "TemplateHaskell/dynamic" diff --git a/Cabal/tests/PackageTests/TestSuiteTests/ExeV10/Check.hs b/Cabal/tests/PackageTests/TestSuiteTests/ExeV10/Check.hs index 758ce679d4994224f123552828a0fc753ec1ee9e..299e29ccb934338d0f9475a0cbae081bfee0a6a9 100644 --- a/Cabal/tests/PackageTests/TestSuiteTests/ExeV10/Check.hs +++ b/Cabal/tests/PackageTests/TestSuiteTests/ExeV10/Check.hs @@ -24,13 +24,13 @@ import Distribution.Version (Version(..), orLaterVersion) import PackageTests.PackageTester -checks :: FilePath -> [TestTree] -checks ghcPath = - [ testCase "Test" $ checkTest ghcPath - , testGroup "WithHpc" $ hpcTestMatrix ghcPath +checks :: SuiteConfig -> [TestTree] +checks config = + [ testCase "Test" $ checkTest config + , testGroup "WithHpc" $ hpcTestMatrix config , testGroup "WithoutHpc" - [ testCase "NoTix" $ checkTestNoHpcNoTix ghcPath - , testCase "NoMarkup" $ checkTestNoHpcNoMarkup ghcPath + [ testCase "NoTix" $ checkTestNoHpcNoTix config + , testCase "NoMarkup" $ checkTestNoHpcNoMarkup config ] ] @@ -59,7 +59,7 @@ hpcTestMatrix config = do enable cond flag | cond = Just $ "--enable-" ++ flag | otherwise = Nothing - return $ testCase name $ checkTestWithHpc ghcPath ("WithHpc-" ++ name) opts + return $ testCase name $ checkTestWithHpc config ("WithHpc-" ++ name) opts dir :: FilePath dir = "PackageTests" </> "TestSuiteTests" </> "ExeV10" diff --git a/Cabal/tests/PackageTests/TestSuiteTests/LibV09/Check.hs b/Cabal/tests/PackageTests/TestSuiteTests/LibV09/Check.hs index 1526a72182b887c350956cd81081873e23d915a6..ba9920dab02a754900ee891a5edd4e9b4939232b 100644 --- a/Cabal/tests/PackageTests/TestSuiteTests/LibV09/Check.hs +++ b/Cabal/tests/PackageTests/TestSuiteTests/LibV09/Check.hs @@ -9,31 +9,33 @@ import PackageTests.PackageTester dir :: FilePath dir = "PackageTests" </> "TestSuiteTests" </> "LibV09" -checks :: PackageSpec -> FilePath -> [TestTree] -checks inplaceSpec ghcPath = - [ testCase "Build" $ checkBuild inplaceSpec ghcPath - , localOption (mkTimeout $ 10 * 10 ^ (6 :: Int)) - $ testCase "Deadlock" $ checkDeadlock inplaceSpec ghcPath +checks :: SuiteConfig -> [TestTree] +checks config = + [ testCase "Build" (checkBuild config) + , localOption (mkTimeout $ 10 ^ (8 :: Int)) + $ testCase "Deadlock" (checkDeadlock config) ] -checkBuild :: PackageSpec -> FilePath -> Assertion -checkBuild inplaceSpec ghcPath = do - let spec = inplaceSpec +checkBuild :: SuiteConfig -> Assertion +checkBuild config = do + let spec = (inplaceSpec config) { directory = dir , distPref = Just $ "dist-Build" - , configOpts = "--enable-tests" : configOpts inplaceSpec + , configOpts = "--enable-tests" + : configOpts (inplaceSpec config) } - buildResult <- cabal_build spec ghcPath + buildResult <- cabal_build config spec assertBuildSucceeded buildResult -checkDeadlock :: PackageSpec -> FilePath -> Assertion -checkDeadlock inplaceSpec ghcPath = do - let spec = inplaceSpec +checkDeadlock :: SuiteConfig -> Assertion +checkDeadlock config = do + let spec = (inplaceSpec config) { directory = dir , distPref = Just $ "dist-Test" - , configOpts = "--enable-tests" : configOpts inplaceSpec + , configOpts = "--enable-tests" + : configOpts (inplaceSpec config) } - buildResult <- cabal_build spec ghcPath + buildResult <- cabal_build config spec assertBuildSucceeded buildResult - testResult <- cabal_test spec [] [] ghcPath + testResult <- cabal_test config spec [] [] assertTestFailed testResult diff --git a/Cabal/tests/PackageTests/TestSuiteTests/LibV09/tests/Deadlock.hs b/Cabal/tests/PackageTests/TestSuiteTests/LibV09/tests/Deadlock.hs index c20804bd555dec84c24a7b62948907d59c89c748..5d7db101ed974961825a9e91c53f38fce45cc9cf 100644 --- a/Cabal/tests/PackageTests/TestSuiteTests/LibV09/tests/Deadlock.hs +++ b/Cabal/tests/PackageTests/TestSuiteTests/LibV09/tests/Deadlock.hs @@ -5,4 +5,4 @@ import Distribution.TestSuite import Lib tests :: IO [Test] -tests = return [nullt x | x <- [1 .. 10000]] +tests = return [nullt x | x <- [1 .. 1000]]