{-# LANGUAGE NoImplicitPrelude #-}
module Stack.Options.TestParser where

import           Options.Applicative
import           Options.Applicative.Args
import           Options.Applicative.Builder.Extra
import           Stack.Options.Utils
import           Stack.Prelude
import           Stack.Types.Config

-- | Parser for test arguments.
-- FIXME hide args
testOptsParser :: Bool -> Parser TestOptsMonoid
testOptsParser hide0 =
    TestOptsMonoid
        <$> firstBoolFlagsTrue
                "rerun-tests"
                "running already successful tests"
                hide
        <*> fmap
                concat
                (many
                    (argsOption
                        (long "test-arguments" <>
                         long "ta" <>
                         metavar "TEST_ARGS" <>
                         help "Arguments passed in to the test suite program" <>
                         hide)))
        <*> optionalFirstFalse
                (flag' True
                    (long "coverage" <>
                     help "Generate a code coverage report" <>
                     hide))
        <*> optionalFirstFalse
                (flag' True
                    (long "no-run-tests" <>
                     help "Disable running of tests. (Tests will still be built.)" <>
                     hide))
        <*> optionalFirst
                (option (fmap Just auto)
                    (long "test-suite-timeout" <>
                     help "Maximum test suite run time in seconds." <>
                     hide))
   where hide = hideMods hide0
