1-------------------------------------------------------------------------------
4-- Copyright : (c) 2015 Andy Arvanitis and other contributors
7-- Maintainer : Andy Arvanitis
8-- Stability : experimental
13-------------------------------------------------------------------------------
17import Control.Applicative
22import System.Directory
24-------------------------------------------------------------------------------
25testsDir :: IO (FilePath, FilePath)
26-------------------------------------------------------------------------------
28 baseDir <- getCurrentDirectory
29 return (baseDir </> "pcc-tests", baseDir)
31-------------------------------------------------------------------------------
33-------------------------------------------------------------------------------
36 (outputDir, baseDir) <- testsDir
38 outputDirExists <- doesDirectoryExist outputDir
39 when outputDirExists $ removeDirectoryRecursive outputDir
40 createDirectory outputDir
44 let srcDir = outputDir </> "src"
45 createDirectory srcDir
47 let buildDir = outputDir </> "build"
48 createDirectory buildDir
50 let makefile = outputDir </> "Makefile"
51 writeFile makefile makefileText
53 let passingDir = baseDir </> "examples" </> "passing"
54 passingTestCases <- sort . filter (".purs" `isSuffixOf`) <$> getDirectoryContents passingDir
56 let tests = filter (`notElem` skipped) passingTestCases
60 forM_ tests $ \inputFile -> do
62 -- Compile PureScript file
64 putStrLn $ "Compiling test " ++ inputFile ++ " ..."
65 setCurrentDirectory outputDir
66 copyFile (passingDir </> inputFile) (srcDir </> inputFile)
67 callProcess "make" ["clean", "main"]
69 -- Build and run C++ files
71 setCurrentDirectory buildDir
72 callProcess "cmake" ["../output"]
74 callProcess (buildDir </> "Main") []
76 removeFile (srcDir </> inputFile)
78 -- TODO: support failing test cases
80 -- let failing = baseDir </> "examples" </> "failing"
81 -- failingTestCases <- sort . filter (".purs" `isSuffixOf`) <$> getDirectoryContents failing
84 setCurrentDirectory baseDir
85 putStrLn "pcc-tests finished"
86 putStrLn $ "Total tests available: " ++ show (length passingTestCases)
87 putStrLn $ "Tests run: " ++ show (length tests)
88 putStrLn $ "Tests skipped: " ++ show (length skipped)
90-------------------------------------------------------------------------------
92-------------------------------------------------------------------------------
93repo = "git://github.com/pure11/"
95-------------------------------------------------------------------------------
96packages :: [(String, String)]
97-------------------------------------------------------------------------------
99 [ ("purescript-eff", "")
100 , ("purescript-prelude", "")
101 , ("purescript-assert", "")
102 , ("purescript-st", "")
103 , ("purescript-console", "")
104 , ("purescript-functions", "")
107-------------------------------------------------------------------------------
108fetchPackages :: IO ()
109-------------------------------------------------------------------------------
111 (outputDir, baseDir) <- testsDir
112 let packageDir = outputDir </> "packages"
113 createDirectory packageDir
114 setCurrentDirectory packageDir
115 forM_ packages $ \package -> let branch = snd package in
116 callProcess "git" $ ["clone"] ++ (if null branch then [] else ["--branch", branch]) ++ [repo ++ (fst package) ++ ".git"]
117 setCurrentDirectory baseDir
119-------------------------------------------------------------------------------
120makefileText :: String
121-------------------------------------------------------------------------------
122makefileText = intercalate "\n" lines'
123 where lines' = [ "PCC := '../.cabal-sandbox/bin/pcc'"
124 , "MODULE_DIR='packages'"
126 , "MODULES := $(shell find $(MODULE_DIR) -name '*.purs' | grep -v \\/test\\/ | grep -v \\/example\\/ | grep -v \\/examples\\/)"
127 , "SOURCES := $(shell find $(SOURCE_DIR) -name '*.purs')"
130 , "\t$(PCC) $(MODULES) $(SOURCES)"
132 , "\t@rm -rf output/*"
135-------------------------------------------------------------------------------
137-------------------------------------------------------------------------------
139 [ "ExplicitImportReExport.purs" -- OK, test has no main (would pass otherwise)
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list