module Test.Tasty.CmdLine
( treeOptionParser
, optionParser
, defaultMainWithRunner
) where
import Options.Applicative
import Data.Monoid
import Data.Proxy
import Data.Tagged
import qualified Data.Map as Map
import Data.Typeable
import Control.Arrow
import Test.Tasty.Core
import Test.Tasty.CoreOptions
import Test.Tasty.Run
import Test.Tasty.Options
treeOptionParser :: TestTree -> Parser OptionSet
treeOptionParser = optionParser . (coreOptions ++) . getTreeOptions
optionParser :: [OptionDescription] -> Parser OptionSet
optionParser = foldr addOption (pure mempty) where
addOption :: OptionDescription -> Parser OptionSet -> Parser OptionSet
addOption (Option (px :: Proxy v)) p =
setOption <$> (optionCLParser :: Parser v) <*> p
defaultMainWithRunner :: Runner -> TestTree -> IO ()
defaultMainWithRunner runner testTree = do
opts <- execParser $
info (helper <*> treeOptionParser testTree)
( fullDesc <>
header "Mmm... tasty test suite"
)
runner opts testTree =<< launchTestTree opts testTree