@@ -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
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)
85+ outputFile <- runIO $ do
86+ tmp <- getTemporaryDirectory
87+ createDirectoryIfMissing False (tmp </> logpath)
88+ openFile (tmp </> logpath </> logfile) WriteMode
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
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]
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
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 =
288 noPreCheck = const (return ())
298 noPreCheck = const (return ())
301+logpath = "purescript-output"
304+logfile = "psc-tests.out"