@@ -61,13 +61,13 @@ main = hspec spec
6161spec :: Spec
6262spec = do
6363
64- (supportExterns, passingTestCases, warningTestCases, failingTestCases) <- runIO $ do
64+ (supportExterns, supportForeigns, passingTestCases, warningTestCases, failingTestCases) <- runIO $ do
6565 cwd <- getCurrentDirectory
6666 let passing = cwd </> " examples" </> " passing"
6767 let warning = cwd </> " examples" </> " warning"
6868 let failing = cwd </> " examples" </> " failing"
6969 let supportDir = cwd </> " tests" </> " support" </> " bower_components"
70- let supportFiles ext = Glob. globDir1 (Glob. compile (" purescript-*/**/*." ++ ext)) supportDir
70+ let supportFiles ext = Glob. globDir1 (Glob. compile (" purescript-*/src/ **/*." ++ ext)) supportDir
7171 passingFiles <- getTestFiles passing <$> testGlob passing
7272 warningFiles <- getTestFiles warning <$> testGlob warning
7373 failingFiles <- getTestFiles failing <$> testGlob failing
@@ -77,10 +77,10 @@ spec = do
7777 modules <- ExceptT . return $ P. parseModulesFromFiles id supportPursFiles
7878 foreigns <- inferForeignModules modules
7979 externs <- ExceptT . fmap fst . runTest $ P. make (makeActions foreigns) (map snd modules)
80- return (zip (map snd modules) externs)
80+ return (zip (map snd modules) externs, foreigns )
8181 case supportExterns of
8282 Left errs -> fail (P. prettyPrintMultipleErrors P. defaultPPEOptions errs)
83- Right externs -> return (externs, passingFiles, warningFiles, failingFiles)
83+ Right ( externs, foreigns) -> return (externs, foreigns , passingFiles, warningFiles, failingFiles)
8484
8585 outputFile <- runIO $ do
8686 tmp <- getTemporaryDirectory
@@ -90,21 +90,21 @@ spec = do
9090 context " Passing examples" $
9191 forM_ passingTestCases $ \ testPurs ->
9292 it (" '" <> takeFileName (getTestMain testPurs) <> " ' should compile and run without error" ) $
93- assertCompiles supportExterns testPurs outputFile
93+ assertCompiles supportExterns supportForeigns testPurs outputFile
9494
9595 context " Warning examples" $
9696 forM_ warningTestCases $ \ testPurs -> do
9797 let mainPath = getTestMain testPurs
9898 expectedWarnings <- runIO $ getShouldWarnWith mainPath
9999 it (" '" <> takeFileName mainPath <> " ' should compile with warning(s) '" <> intercalate " ', '" expectedWarnings <> " '" ) $
100- assertCompilesWithWarnings supportExterns testPurs expectedWarnings
100+ assertCompilesWithWarnings supportExterns supportForeigns testPurs expectedWarnings
101101
102102 context " Failing examples" $
103103 forM_ failingTestCases $ \ testPurs -> do
104104 let mainPath = getTestMain testPurs
105105 expectedFailures <- runIO $ getShouldFailWith mainPath
106106 it (" '" <> takeFileName mainPath <> " ' should fail with '" <> intercalate " ', '" expectedFailures <> " '" ) $
107- assertDoesNotCompile supportExterns testPurs expectedFailures
107+ assertDoesNotCompile supportExterns supportForeigns testPurs expectedFailures
108108
109109 where
110110
@@ -197,27 +197,29 @@ runTest = P.runMake P.defaultOptions
197197
198198compile
199199 :: [(P. Module , P. ExternsFile )]
200+ -> M. Map P. ModuleName FilePath
200201 -> [FilePath ]
201202 -> ([P. Module ] -> IO () )
202203 -> IO (Either P. MultipleErrors [P. ExternsFile ], P. MultipleErrors )
203- compile supportExterns inputFiles check = silence $ runTest $ do
204+ compile supportExterns supportForeigns inputFiles check = silence $ runTest $ do
204205 fs <- liftIO $ readInput inputFiles
205206 ms <- P. parseModulesFromFiles id fs
206207 foreigns <- inferForeignModules ms
207208 liftIO (check (map snd ms))
208- let actions = makeActions foreigns
209+ let actions = makeActions ( foreigns `M.union` supportForeigns)
209210 case ms of
210211 [singleModule] -> pure <$> P. rebuildModule actions (map snd supportExterns) (snd singleModule)
211212 _ -> P. make actions (map fst supportExterns ++ map snd ms)
212213
213214assert
214215 :: [(P. Module , P. ExternsFile )]
216+ -> M. Map P. ModuleName FilePath
215217 -> [FilePath ]
216218 -> ([P. Module ] -> IO () )
217219 -> (Either P. MultipleErrors P. MultipleErrors -> IO (Maybe String ))
218220 -> Expectation
219- assert supportExterns inputFiles check f = do
220- (e, w) <- compile supportExterns inputFiles check
221+ assert supportExterns supportForeigns inputFiles check f = do
222+ (e, w) <- compile supportExterns supportForeigns inputFiles check
221223 maybeErr <- f (const w <$> e)
222224 maybe (return () ) expectationFailure maybeErr
223225
@@ -235,11 +237,12 @@ checkShouldFailWith expected errs =
235237
236238assertCompiles
237239 :: [(P. Module , P. ExternsFile )]
240+ -> M. Map P. ModuleName FilePath
238241 -> [FilePath ]
239242 -> Handle
240243 -> Expectation
241- assertCompiles supportExterns inputFiles outputFile =
242- assert supportExterns inputFiles checkMain $ \ e ->
244+ assertCompiles supportExterns supportForeigns inputFiles outputFile =
245+ assert supportExterns supportForeigns inputFiles checkMain $ \ e ->
243246 case e of
244247 Left errs -> return . Just . P. prettyPrintMultipleErrors P. defaultPPEOptions $ errs
245248 Right _ -> do
@@ -260,11 +263,12 @@ assertCompiles supportExterns inputFiles outputFile =
260263
261264assertCompilesWithWarnings
262265 :: [(P. Module , P. ExternsFile )]
266+ -> M. Map P. ModuleName FilePath
263267 -> [FilePath ]
264268 -> [String ]
265269 -> Expectation
266- assertCompilesWithWarnings supportExterns inputFiles shouldWarnWith =
267- assert supportExterns inputFiles checkMain $ \ e ->
270+ assertCompilesWithWarnings supportExterns supportForeigns inputFiles shouldWarnWith =
271+ assert supportExterns supportForeigns inputFiles checkMain $ \ e ->
268272 case e of
269273 Left errs ->
270274 return . Just . P. prettyPrintMultipleErrors P. defaultPPEOptions $ errs
@@ -279,11 +283,12 @@ assertCompilesWithWarnings supportExterns inputFiles shouldWarnWith =
279283
280284assertDoesNotCompile
281285 :: [(P. Module , P. ExternsFile )]
286+ -> M. Map P. ModuleName FilePath
282287 -> [FilePath ]
283288 -> [String ]
284289 -> Expectation
285- assertDoesNotCompile supportExterns inputFiles shouldFailWith =
286- assert supportExterns inputFiles noPreCheck $ \ e ->
290+ assertDoesNotCompile supportExterns supportForeigns inputFiles shouldFailWith =
291+ assert supportExterns supportForeigns inputFiles noPreCheck $ \ e ->
287292 case e of
288293 Left errs ->
289294 return $ if null shouldFailWith
0 commit comments