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 passingDir = baseDir </> "examples" </> "passing"
48 passingTestCases <- sort . filter (".purs" `isSuffixOf`) <$> getDirectoryContents passingDir
50 -- Auto-generate Makefile
51 setCurrentDirectory outputDir
54 let tests = filter (`notElem` skipped) passingTestCases
58 forM_ tests $ \inputFile -> do
62 putStrLn $ "Compiling test " ++ inputFile ++ " ..."
63 setCurrentDirectory outputDir
64 copyFile (passingDir </> inputFile) (srcDir </> inputFile)
66 let testCaseDir = passingDir </> (takeWhile (/='.') inputFile)
67 testCaseDirExists <- doesDirectoryExist testCaseDir
68 when testCaseDirExists $ callProcess "cp" ["-R", testCaseDir, srcDir]
70 callProcess "make" ["clean"]
71 callProcess "make" ["debug"]
75 callProcess ("output" </> "bin" </> "main") []
77 removeFile (srcDir </> inputFile)
78 when testCaseDirExists $ callProcess "rm" ["-rf", srcDir </> (takeWhile (/='.') inputFile)]
80 -- TODO: support failing test cases
82 -- let failing = baseDir </> "examples" </> "failing"
83 -- failingTestCases <- sort . filter (".purs" `isSuffixOf`) <$> getDirectoryContents failing
86 setCurrentDirectory baseDir
87 putStrLn "pcc-tests finished"
88 putStrLn $ "Total tests available: " ++ show (length passingTestCases)
89 putStrLn $ "Tests run: " ++ show (length tests)
90 putStrLn $ "Tests skipped: " ++ show (length skipped)
92-------------------------------------------------------------------------------
94-------------------------------------------------------------------------------
95repo = "git://github.com/pure11/"
97-------------------------------------------------------------------------------
98packages :: [(String, String)]
99-------------------------------------------------------------------------------
101 [ ("purescript-eff", "")
102 , ("purescript-prelude", "")
103 , ("purescript-assert", "")
104 , ("purescript-st", "")
105 , ("purescript-console", "")
106 , ("purescript-functions", "")
107 , ("purescript-partial", "")
108 , ("purescript-newtype", "")
111-------------------------------------------------------------------------------
112fetchPackages :: IO ()
113-------------------------------------------------------------------------------
115 (outputDir, baseDir) <- testsDir
116 let packageDir = outputDir </> "packages"
117 createDirectory packageDir
118 setCurrentDirectory packageDir
119 forM_ packages $ \package -> let branch = snd package in
120 callProcess "git" $ ["clone"] ++ (if null branch then [] else ["--branch", branch]) ++ [repo ++ (fst package) ++ ".git"]
121 setCurrentDirectory baseDir
123-------------------------------------------------------------------------------
125-------------------------------------------------------------------------------
127 [ "NumberLiterals.purs" -- unreliable float comparison, test manually
128 , "FunWithFunDeps.purs" -- requires FFI
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