ghc-mod/GhcModExe/Test.hs

46 lines
1.2 KiB
Haskell
Raw Normal View History

module GhcModExe.Test where
2015-12-16 20:45:16 +00:00
import Control.Applicative
import Data.List
import System.FilePath
import System.Directory
2015-12-16 20:45:16 +00:00
import Prelude
import Language.Haskell.GhcMod.Types
import Language.Haskell.GhcMod.Monad
import Language.Haskell.GhcMod.DynFlags
2015-12-16 20:45:16 +00:00
import GHC
import GHC.Exception
import OccName
test :: IOish m
=> FilePath -> GhcModT m String
2015-12-28 12:59:59 +00:00
test f = runGmlT' [Left f] (fmap setHscInterpreted . deferErrors) $ do
mg <- getModuleGraph
root <- cradleRootDir <$> cradle
f' <- makeRelative root <$> liftIO (canonicalizePath f)
let Just ms = find ((==Just f') . ml_hs_file . ms_location) mg
mdl = ms_mod ms
mn = moduleName mdl
Just mi <- getModuleInfo mdl
let exs = map (occNameString . getOccName) $ modInfoExports mi
cqs = filter ("prop_" `isPrefixOf`) exs
setContext [ IIDecl $ simpleImportDecl mn
, IIDecl $ simpleImportDecl $ mkModuleName "Test.QuickCheck"
]
_res <- mapM runTest cqs
return ""
runTest :: GhcMonad m => String -> m (Maybe SomeException)
runTest fn = do
res <- runStmt ("quickCheck " ++ fn) RunToCompletion
return $ case res of
RunOk [] -> Nothing
RunException se -> Just se
_ -> error "runTest"