git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Merge pull request #2469 from pure11/dump-tests-output
05452aaPhil Freeman
tests/TestCompiler.hs+19−3
@@ -47,6 +47,7 @@ import System.Exit
47import System.Process hiding (cwd)
47import System.Process hiding (cwd)
48import System.FilePath
48import System.FilePath
49import System.Directory
49import System.Directory
50+import System.IO
50import System.IO.UTF8
51import System.IO.UTF8
51import System.IO.Silently
52import System.IO.Silently
52import qualified System.FilePath.Glob as Glob
53import qualified System.FilePath.Glob as Glob
@@ -81,10 +82,15 @@ spec = do
81 Left errs -> fail (P.prettyPrintMultipleErrors P.defaultPPEOptions errs)
82 Left errs -> fail (P.prettyPrintMultipleErrors P.defaultPPEOptions errs)
82 Right externs -> return (externs, passingFiles, warningFiles, failingFiles)
83 Right externs -> return (externs, passingFiles, warningFiles, failingFiles)
83
84
85+ outputFile <- runIO $ do
86+ tmp <- getTemporaryDirectory
87+ createDirectoryIfMissing False (tmp </> logpath)
88+ openFile (tmp </> logpath </> logfile) WriteMode
89+
84 context "Passing examples" $
90 context "Passing examples" $
85 forM_ passingTestCases $ \testPurs ->
91 forM_ passingTestCases $ \testPurs ->
86 it ("'" <> takeFileName (getTestMain testPurs) <> "' should compile and run without error") $
92 it ("'" <> takeFileName (getTestMain testPurs) <> "' should compile and run without error") $
87− assertCompiles supportExterns testPurs
93+ assertCompiles supportExterns testPurs outputFile
88
94
89 context "Warning examples" $
95 context "Warning examples" $
90 forM_ warningTestCases $ \testPurs -> do
96 forM_ warningTestCases $ \testPurs -> do
@@ -230,8 +236,9 @@ checkShouldFailWith expected errs =
230assertCompiles
236assertCompiles
231 :: [(P.Module, P.ExternsFile)]
237 :: [(P.Module, P.ExternsFile)]
232 -> [FilePath]
238 -> [FilePath]
239+ -> Handle
233 -> Expectation
240 -> Expectation
234−assertCompiles supportExterns inputFiles =
241+assertCompiles supportExterns inputFiles outputFile =
235 assert supportExterns inputFiles checkMain $ \e ->
242 assert supportExterns inputFiles checkMain $ \e ->
236 case e of
243 case e of
237 Left errs -> return . Just . P.prettyPrintMultipleErrors P.defaultPPEOptions $ errs
244 Left errs -> return . Just . P.prettyPrintMultipleErrors P.defaultPPEOptions $ errs
@@ -240,10 +247,13 @@ assertCompiles supportExterns inputFiles =
240 let entryPoint = modulesDir </> "index.js"
247 let entryPoint = modulesDir </> "index.js"
241 writeFile entryPoint "require('Main').main()"
248 writeFile entryPoint "require('Main').main()"
242 result <- traverse (\node -> readProcessWithExitCode node [entryPoint] "") process
249 result <- traverse (\node -> readProcessWithExitCode node [entryPoint] "") process
250+ hPutStrLn outputFile $ "\n" <> takeFileName (last inputFiles) <> ":"
243 case result of
251 case result of
244 Just (ExitSuccess, out, err)
252 Just (ExitSuccess, out, err)
245 | not (null err) -> return $ Just $ "Test wrote to stderr:\n\n" <> err
253 | not (null err) -> return $ Just $ "Test wrote to stderr:\n\n" <> err
246− | not (null out) && trim (last (lines out)) == "Done" -> return Nothing
254+ | not (null out) && trim (last (lines out)) == "Done" -> do
255+ hPutStr outputFile out
256+ return Nothing
247 | otherwise -> return $ Just $ "Test did not finish with 'Done':\n\n" <> out
257 | otherwise -> return $ Just $ "Test did not finish with 'Done':\n\n" <> out
248 Just (ExitFailure _, _, err) -> return $ Just err
258 Just (ExitFailure _, _, err) -> return $ Just err
249 Nothing -> return $ Just "Couldn't find node.js executable"
259 Nothing -> return $ Just "Couldn't find node.js executable"
@@ -286,3 +296,9 @@ assertDoesNotCompile supportExterns inputFiles shouldFailWith =
286
296
287 where
297 where
288 noPreCheck = const (return ())
298 noPreCheck = const (return ())
299+
300+logpath :: FilePath
301+logpath = "purescript-output"
302+
303+logfile :: FilePath
304+logfile = "psc-tests.out"