packages feed

MuCheck-0.1.1.0: src/Main.hs

module Main where
import System.Environment

import MuCheck.MuOp
import Language.Haskell.Exts
import MuCheck.StdArgs
import MuCheck.Interpreter
import MuCheck.Mutation
import MuCheck.Operators
import MuCheck.Utils.Common
import MuCheck.Utils.Print

process :: String -> String -> String -> String -> [String] -> IO ()
process t fn file modulename args = do
  numMutants <- genMutants fn file
  case t of
    "qcheck" -> checkQuickCheckOnMutants (take numMutants $ genFileNames file) modulename args "./qcheck.log" >> return ()
    "hspec" ->  checkHspecOnMutants (take numMutants $ genFileNames file) modulename args "./hspec.log" >> return ()
    "hunit" ->  checkHUnitOnMutants (take numMutants $ genFileNames file) modulename args "./hunit.log" >> return ()
    _ -> error "Unexpected test type"


main :: IO ()
main = do
  val <- getArgs
  case val of
    ("-h" : _ ) -> help
    (t: fn : file : modulename : args) -> withArgs [] $ process t fn file modulename args
    _ -> error "Need [qcheck|hunit|hspec] function file modulename [args]\n\tUse -h to get help"

help :: IO ()
help = putStrLn ("mucheck type function file modulename [args]\n" ++ (showAS ["E.g:",
       " ./mucheck qcheck qsort Examples/QuickCheckTest.hs Examples.QuickCheckTest 'quickCheckResult idEmpProp' 'quickCheckResult revProp' 'quickCheckResult modelProp'",
       " ./mucheck hunit  qsort Examples/HUnitTest.hs Examples.HUnitTest 'runTestTT tests'",
       " ./mucheck hspec  qsort Examples/HspecTest.hs Examples.HspecTest 'spec (with \\\"qsort1\\\")'"]))