@@ -0,0 +1,71 @@
1+-----------------------------------------------------------------------------
4+-- Copyright : (c) Phil Freeman 2013
7+-- Maintainer : Phil Freeman <paf31@cantab.net>
8+-- Stability : experimental
13+-----------------------------------------------------------------------------
15+module Main (main) where
18+import PureScript.CodeGen.Pretty.Types
20+import Data.List (isSuffixOf)
21+import Control.Applicative
23+import System.Exit (exitSuccess, exitFailure)
24+import System.FilePath (pathSeparator)
25+import System.Directory (getCurrentDirectory, getDirectoryContents)
26+import qualified System.IO.UTF8 as U
27+import qualified Data.Map as M
29+compile :: FilePath -> IO (Either String Environment)
30+compile inputFile = do
31+ ast <- runIndentParser parseDeclarations <$> U.readFile inputFile
33+ Left parseError -> do
34+ return (Left $ show parseError)
36+ case check (typeCheckAll decls) of
38+ return (Left typeError)
42+assert :: FilePath -> (Either String Environment -> Maybe String) -> IO ()
43+assert inputFile f = do
44+ e <- compile inputFile
46+ Just err -> exitFailure
49+assertCompiles :: FilePath -> IO ()
50+assertCompiles inputFile = do
51+ putStrLn $ "assert " ++ inputFile ++ " compiles successfully"
52+ assert inputFile $ either Just (const Nothing)
54+assertDoesNotCompile :: FilePath -> IO ()
55+assertDoesNotCompile inputFile = do
56+ putStrLn $ "assert " ++ inputFile ++ " does not compile"
57+ assert inputFile $ either (const Nothing) (const $ Just "Should not have compiled")
61+ cd <- getCurrentDirectory
62+ let examples = cd ++ pathSeparator : "examples"
63+ let passing = examples ++ pathSeparator : "passing"
64+ passingTestCases <- getDirectoryContents passing
65+ forM_ passingTestCases $ \inputFile -> when (".ps" `isSuffixOf` inputFile) $
66+ assertCompiles (passing ++ pathSeparator : inputFile)
67+ let failing = examples ++ pathSeparator : "failing"
68+ failingTestCases <- getDirectoryContents failing
69+ forM_ failingTestCases $ \inputFile -> when (".ps" `isSuffixOf` inputFile) $
70+ assertDoesNotCompile (failing ++ pathSeparator : inputFile)