Skip to content

Commit a2fc356

Browse files
committed
failing test
1 parent 861235d commit a2fc356

5 files changed

Lines changed: 26 additions & 6 deletions

File tree

tests/TestCompiler.hs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ import System.IO.UTF8 (readUTF8File)
4646
import Text.Regex.Base (RegexContext(..), RegexMaker(..))
4747
import Text.Regex.TDFA (Regex)
4848

49-
import TestUtils (ExpectedModuleName(..), SupportModules, compile, createOutputFile, getTestFiles, goldenVsString, modulesDir, trim)
49+
import Data.Set qualified as S
50+
import TestUtils (ExpectedModuleName(..), SupportModules, compile, compile', createOutputFile, getTestFiles, goldenVsString, modulesDir, trim)
5051
import Test.Hspec (Expectation, SpecWith, beforeAllWith, describe, expectationFailure, it, runIO)
5152

5253
spec :: SpecWith SupportModules
@@ -134,7 +135,11 @@ assertCompiles
134135
-> Handle
135136
-> Expectation
136137
assertCompiles support inputFiles outputFile = do
137-
(fileContents, (result, _)) <- compile (Just IsMain) support inputFiles
138+
extraFfiExts <- getFfiExts (getTestMain inputFiles)
139+
let opts = if null extraFfiExts
140+
then P.defaultOptions
141+
else P.defaultOptions { P.optionsFFIExts = S.fromList extraFfiExts `S.union` P.optionsFFIExts P.defaultOptions }
142+
(fileContents, (result, _)) <- compile' opts (Just IsMain) support inputFiles
138143
let errorOptions = P.defaultPPEOptions { P.ppeFileContents = fileContents }
139144
case result of
140145
Left errs -> expectationFailure . P.prettyPrintMultipleErrors errorOptions $ errs
@@ -253,6 +258,11 @@ getShouldFailWith = extractPragma "shouldFailWith"
253258
getShouldWarnWith :: FilePath -> IO [String]
254259
getShouldWarnWith = extractPragma "shouldWarnWith"
255260

261+
-- Scans a file for @ffiExts directives in the comments, used to
262+
-- determine additional FFI file extensions for the test
263+
getFfiExts :: FilePath -> IO [String]
264+
getFfiExts = extractPragma "ffiExts"
265+
256266
extractPragma :: String -> FilePath -> IO [String]
257267
extractPragma pragma = fmap go . readUTF8File
258268
where

tests/TestUtils.hs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import Data.Char (isSpace)
2121
import Data.Function (on)
2222
import Data.List (sort, sortBy, stripPrefix, groupBy, find)
2323
import Data.Map qualified as M
24+
import Data.Set (Set)
2425
import Data.Maybe (isJust)
2526
import Data.Text qualified as T
2627
import Data.Text.Encoding qualified as T
@@ -146,7 +147,7 @@ setupSupportModules = do
146147
ms <- getSupportModuleTuples
147148
let modules = map snd ms
148149
supportExterns <- runExceptT $ do
149-
foreigns <- inferForeignModules ms
150+
foreigns <- inferForeignModules (P.optionsFFIExts P.defaultOptions) ms
150151
externs <- ExceptT . fmap fst . runTest $ P.make (makeActions modules foreigns) (CST.pureResult <$> modules)
151152
return (externs, foreigns)
152153
case supportExterns of
@@ -204,7 +205,7 @@ compile' options expectedModule SupportModules{..} inputFiles = do
204205
msWithWarnings <- CST.parseFromFiles id fs
205206
tell $ foldMap (\(fp, (ws, _)) -> CST.toMultipleWarnings fp ws) msWithWarnings
206207
let ms = fmap snd <$> msWithWarnings
207-
foreigns <- inferForeignModules ms
208+
foreigns <- inferForeignModules (P.optionsFFIExts options) ms
208209
let
209210
actions = makeActions supportModules (foreigns `M.union` supportForeigns)
210211
(hasExpectedModuleName, expectedModuleName, compiledModulePath) = case expectedModule of
@@ -263,9 +264,10 @@ runTest = P.runMake P.defaultOptions
263264

264265
inferForeignModules
265266
:: MonadIO m
266-
=> [(FilePath, P.Module)]
267+
=> Set String
268+
-> [(FilePath, P.Module)]
267269
-> m (M.Map P.ModuleName FilePath)
268-
inferForeignModules = P.inferForeignModules (P.optionsFFIExts P.defaultOptions) . fromList
270+
inferForeignModules exts = P.inferForeignModules exts . fromList
269271
where
270272
fromList :: [(FilePath, P.Module)] -> M.Map P.ModuleName (Either P.RebuildPolicy FilePath)
271273
fromList = M.fromList . map ((P.getModuleName *** Right) . swap)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
-- @shouldFailWith MissingFFIModule
2+
module Main where
3+
4+
foreign import greeting :: String
5+
6+
main = greeting
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export const greeting = "hello";

tests/purs/passing/TSFFI.purs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
-- @ffiExts ts
12
module Main where
23

34
import Prelude

0 commit comments

Comments
 (0)