foscam-sort-0.0.1: test/doctests.hs
module Main where
import Control.Applicative
import Prelude
import Build_doctests (deps)
import Control.Monad
import Data.List
import Data.Monoid
import System.Directory
import System.FilePath
import System.IO
import Test.DocTest
main ::
IO ()
main =
getSources >>= \sources ->
forM_ (preferredOrderFirst sources) $ \source -> do
hPutStrLn stderr $ "Testing " <> source
doctest $
"-isrc"
: "-idist/build/autogen"
: "-optP-include"
: "-optPdist/build/autogen/cabal_macros.h"
: "-hide-all-packages"
: map ("-package="++) deps ++ [source]
sourceDirectories ::
[FilePath]
sourceDirectories =
[
"src"
]
preferredOrderFirst :: [FilePath] -> [FilePath]
preferredOrderFirst sources =
filter (`elem` sources ) preferredOrder
<> filter (`notElem` preferredOrder) sources
-- If you find the tests are running slowly.
-- Comment out the Modules you have completed
-- in the list below.
preferredOrder :: [String]
preferredOrder = map (\f -> "src/Course" </> f <.> "hs") [
"List"
, "Functor"
, "Apply"
, "Applicative"
, "Bind"
, "Monad"
, "FileIO"
, "State"
, "StateT"
, "Extend"
, "Comonad"
, "Compose"
, "Traversable"
, "ListZipper"
, "Parser"
, "MoreParser"
, "JsonParser"
, "Interactive"
, "Anagrams"
, "FastAnagrams"
, "Cheque"
]
isSourceFile ::
FilePath
-> Bool
isSourceFile p =
and [takeFileName p /= "Setup.hs", isSuffixOf ".hs" p]
getSources :: IO [FilePath]
getSources =
liftM (filter isSourceFile . concat) (mapM go sourceDirectories)
where
go dir = do
(dirs, files) <- getFilesAndDirectories dir
(files ++) . concat <$> mapM go dirs
getFilesAndDirectories :: FilePath -> IO ([FilePath], [FilePath])
getFilesAndDirectories dir = do
c <- map (dir </>) . filter (`notElem` ["..", "."]) <$> getDirectoryContents dir
(,) <$> filterM doesDirectoryExist c <*> filterM doesFileExist c