@@ -176,10 +176,12 @@ compile
176 :: [(P.Module, P.ExternsFile)]
176 :: [(P.Module, P.ExternsFile)]
177 -> [FilePath]
177 -> [FilePath]
178 -> M.Map P.ModuleName FilePath
178 -> M.Map P.ModuleName FilePath
179+ -> ([P.Module] -> IO ())
179 -> IO (Either P.MultipleErrors [P.ExternsFile])
180 -> IO (Either P.MultipleErrors [P.ExternsFile])
180−compile supportExterns inputFiles foreigns = silence $ runTest $ do
181+compile supportExterns inputFiles foreigns check = silence $ runTest $ do
181 fs <- liftIO $ readInput inputFiles
182 fs <- liftIO $ readInput inputFiles
182 ms <- P.parseModulesFromFiles id fs
183 ms <- P.parseModulesFromFiles id fs
184+ liftIO (check (map snd ms))
183 let actions = makeActions foreigns
185 let actions = makeActions foreigns
184 case ms of
186 case ms of
185 [singleModule] -> pure <$> P.rebuildModule actions (map snd supportExterns) (snd singleModule)
187 [singleModule] -> pure <$> P.rebuildModule actions (map snd supportExterns) (snd singleModule)
@@ -189,10 +191,11 @@ assert
189 :: [(P.Module, P.ExternsFile)]
191 :: [(P.Module, P.ExternsFile)]
190 -> [FilePath]
192 -> [FilePath]
191 -> M.Map P.ModuleName FilePath
193 -> M.Map P.ModuleName FilePath
194+ -> ([P.Module] -> IO ())
192 -> (Either P.MultipleErrors [P.ExternsFile] -> IO (Maybe String))
195 -> (Either P.MultipleErrors [P.ExternsFile] -> IO (Maybe String))
193 -> Expectation
196 -> Expectation
194−assert supportExterns inputFiles foreigns f = do
197+assert supportExterns inputFiles foreigns check f = do
195− e <- compile supportExterns inputFiles foreigns
198+ e <- compile supportExterns inputFiles foreigns check
196 maybeErr <- f e
199 maybeErr <- f e
197 maybe (return ()) expectationFailure maybeErr
200 maybe (return ()) expectationFailure maybeErr
@@ -201,8 +204,8 @@ assertCompiles
201 -> [FilePath]
204 -> [FilePath]
202 -> M.Map P.ModuleName FilePath
205 -> M.Map P.ModuleName FilePath
203 -> Expectation
206 -> Expectation
204−assertCompiles supportExterns inputFiles foreigns = do
207+assertCompiles supportExterns inputFiles foreigns =
205− assert supportExterns inputFiles foreigns $ \e ->
208+ assert supportExterns inputFiles foreigns checkMain $ \e ->
206 case e of
209 case e of
207 Left errs -> return . Just . P.prettyPrintMultipleErrors False $ errs
210 Left errs -> return . Just . P.prettyPrintMultipleErrors False $ errs
208 Right _ -> do
211 Right _ -> do
@@ -217,6 +220,10 @@ assertCompiles supportExterns inputFiles foreigns = do
217 | otherwise -> return $ Just $ "Test did not finish with 'Done':\n\n" <> out
220 | otherwise -> return $ Just $ "Test did not finish with 'Done':\n\n" <> out
218 Just (ExitFailure _, _, err) -> return $ Just err
221 Just (ExitFailure _, _, err) -> return $ Just err
219 Nothing -> return $ Just "Couldn't find node.js executable"
222 Nothing -> return $ Just "Couldn't find node.js executable"
225+ unless (any ((== P.moduleNameFromString "Main") . P.getModuleName) ms)
226+ (fail "Main module missing")
221assertDoesNotCompile
228assertDoesNotCompile
222 :: [(P.Module, P.ExternsFile)]
229 :: [(P.Module, P.ExternsFile)]
@@ -224,10 +231,10 @@ assertDoesNotCompile
224 -> M.Map P.ModuleName FilePath
231 -> M.Map P.ModuleName FilePath
225 -> [String]
232 -> [String]
226 -> Expectation
233 -> Expectation
227−assertDoesNotCompile supportExterns inputFiles foreigns shouldFailWith = do
234+assertDoesNotCompile supportExterns inputFiles foreigns shouldFailWith =
228− assert supportExterns inputFiles foreigns $ \e ->
235+ assert supportExterns inputFiles foreigns noPreCheck $ \e ->
229 case e of
236 case e of
230− Left errs -> do
237+ Left errs ->
231 return $ if null shouldFailWith
238 return $ if null shouldFailWith
232 then Just $ "shouldFailWith declaration is missing (errors were: "
239 then Just $ "shouldFailWith declaration is missing (errors were: "
233 ++ show (map P.errorCode (P.runMultipleErrors errs))
240 ++ show (map P.errorCode (P.runMultipleErrors errs))
@@ -237,6 +244,8 @@ assertDoesNotCompile supportExterns inputFiles foreigns shouldFailWith = do
237 return $ Just "Should not have compiled"
244 return $ Just "Should not have compiled"
247+ noPreCheck = const (return ())
240 checkShouldFailWith expected errs =
249 checkShouldFailWith expected errs =
241 let actual = map P.errorCode $ P.runMultipleErrors errs
250 let actual = map P.errorCode $ P.runMultipleErrors errs
242 in if sort expected == sort actual
251 in if sort expected == sort actual