{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE OverloadedStrings #-}
module Main where
import qualified Data.Text as T
import Data.Version (showVersion)
import Paths_curl_runnings (version)
import System.Console.CmdArgs
import System.Environment
import System.Exit
import Testing.CurlRunnings
import Testing.CurlRunnings.Internal
import Testing.CurlRunnings.Types
-- | Command line flags
data CurlRunnings = CurlRunnings
{ file :: FilePath
} deriving (Show, Data, Typeable, Eq)
-- | cmdargs object
argParser :: CurlRunnings
argParser =
CurlRunnings {file = def &= typFile &= help "File to run"} &=
summary ("curl-runnings " ++ showVersion version) &=
program "curl-runnings" &=
verbosity &=
help "Use the --file or -f flag to specify an intput file spec to run"
runFile :: FilePath -> Verbosity -> IO ()
runFile "" _ =
putStrLn
"Please specify an input file with the --file (-f) flag or use --help for more information"
runFile path verbosityLevel = do
home <- getEnv "HOME"
suite <- decodeFile . T.unpack $ T.replace "~" (T.pack home) (T.pack path)
case suite of
Right s -> do
results <- runSuite s $ toLogLevel verbosityLevel
if any isFailing results
then putStrLn (makeRed "Some tests failed") >> exitWith (ExitFailure 1)
else putStrLn $ makeGreen "All tests passed!"
Left messgage ->
putStrLn . makeRed $ "Couldn't read input json or yaml file: " ++ messgage
toLogLevel :: Verbosity -> LogLevel
toLogLevel v = toEnum $ fromEnum v
main :: IO ()
main = do
userArgs <- cmdArgs argParser
verbosityLevel <- getVerbosity
runFile (file userArgs) verbosityLevel