packages feed

shaker-0.2: src/Shaker/Action/Quickcheck.hs

module Shaker.Action.Quickcheck
 where

{-
import OccName (occNameString)
import Name (nameOccName)
import Var (varName)
import Data.List
import Data.Maybe
import           Data.Dynamic                           (fromDynamic)
import GHC
import DynFlags 
import GHC.Paths
import Shaker.Io
import Shaker.Type
import Control.Monad.Trans 
import Control.Monad.Reader
import Unsafe.Coerce


runQuickcheck :: Plugin
runQuickcheck = do
        (CompileInput sourceDir targetInput procFlags strflags) <-  asks compileInputs
        (ListenerInput fli _) <- asks listenerInput 
        targetFiles <-  lift $ recurseMultipleListFiles fli
        lift $ defaultErrorHandler defaultDynFlags $ 
                       runGhc (Just libdir) $ do
                       dflags <- getSessionDynFlags
                       (newFlags,_,_) <- parseDynamicFlags dflags (map noLoc strflags)
	               _ <- setSessionDynFlags $ procFlags $ setSourceAndTarget sourceDir targetInput newFlags
                       target <- mapM (`guessTarget` Nothing) targetFiles
                       setTargets target
        	       _ <- load LoadAllTargets
                       return()
runTest :: IO()
runTest = do 
  _ <- getTestFunc
  return()


getTestFunc :: IO()
getTestFunc = 
            defaultErrorHandler defaultDynFlags $ do
            runGhc (Just libdir) $ do
            dflags <- getSessionDynFlags
            (newFlags,_,_) <- parseDynamicFlags dflags (map noLoc ["-itestsuite/tests","-isrc/","-package ghc"])
            _ <- setSessionDynFlags newFlags
            target <- guessTarget "Shaker.RunTest" Nothing
            setTargets [target]
            _ <- load LoadAllTargets
            m <- findModule (mkModuleName "Shaker.RunTest") Nothing
            setContext [] [m]
            dynCompileExpr("runAll")

            --compileExpr ("runAll")
            --(unsafeCoerce value) 

example :: IO[String]
example = defaultErrorHandler defaultDynFlags $ do
    runGhc (Just libdir) $ do
    dflags <- getSessionDynFlags
    (newFlags,_,_) <- parseDynamicFlags dflags (map noLoc ["-itestsuite/tests","-isrc/","-package ghc"])
    _ <- setSessionDynFlags newFlags
    target <- guessTarget "Shaker.CliTest" Nothing
    setTargets [target]
    _ <- load LoadAllTargets
    modulesList <- getModuleGraph
    tyThingsList <- getTyThingsFromModuleSummary modulesList
--    return $ showPpr gra
    return $ getQuickcheckFunction tyThingsList
 
getTyThingsFromModuleSummary :: (GhcMonad  m) => [ModSummary] -> m [TyThing]
getTyThingsFromModuleSummary modSummaries = do
        modulesInfo <- mapM getModuleInfo modules
        return $ concat $ map modInfoTyThings $ catMaybes modulesInfo
   where modules = map ms_mod modSummaries
         

getQuickcheckFunction :: [TyThing] -> [String]
getQuickcheckFunction tyMap = filter ("prop_" `isPrefixOf`) nameList
   where idList = catMaybes $ map tyThingToId tyMap
         varList = map varName idList
         occList = map nameOccName varList
         nameList = map occNameString occList

tyThingToId :: TyThing -> Maybe Id
tyThingToId (AnId tyId) = Just tyId
tyThingToId _ = Nothing

setSourceAndTarget :: [String] -> String ->DynFlags -> DynFlags
setSourceAndTarget sources target dflags = dflags{
    importPaths = sources
    ,objectDir = Just target
    ,hiDir = Just target
  }


-}