module Main where import Control.Monad (void) import Control.Applicative ((<$>)) import Data.List (stripPrefix, isInfixOf) import Data.Maybe (mapMaybe) import System.Process (rawSystem) import System.Exit (exitWith) import Text.Printf (printf) srcfiles :: [String] template, testModule, tok, testPrefix :: String srcfiles = ["System/Path/Internal.hs","System/Path/Directory.hs","System/Path/IO.hs"] template = "TestTemplate.hs" testModule = "TestModule.hs" tok = "" testPrefix = "-- >> " main :: IO () main = do testLines <- mapMaybe (stripPrefix testPrefix) . concatMap lines <$> mapM readFile srcfiles (templateHead,_:templateTail) <- break (tok `isInfixOf`) . lines <$> readFile template let outLines = (\t -> printf " (%s,\n %s) :" (show t) t) <$> testLines writeFile testModule $ unlines $ ("{- Do not edit! Created from " ++ template ++ " -}") : templateHead ++ outLines ++ templateTail let ghc = "ghc" args = ["-optP-include", "-optPdist/build/autogen/cabal_macros.h", "-e", "TestModule.main", testModule] void $ printf "Running %d tests...\n" (length testLines) exitWith =<< rawSystem ghc args