module Test.Tasty.HClTest
( hcltest
, module X
) where
import Data.Proxy
import Data.Typeable
import Options.Applicative
import Test.HClTest as X
import Test.Tasty.Options
import Test.Tasty.Providers
newtype HClTasty = HClTasty (HClTest Trace ()) deriving Typeable
newtype HClTestTimeoutFactor = HClTestTimeoutFactor Double deriving (Typeable, Ord, Num, Eq, Real)
instance IsOption HClTestTimeoutFactor where
defaultValue = 1
parseValue = fmap HClTestTimeoutFactor . safeRead
optionName = return "hcltest-timeout-factor"
optionHelp = return "If you set this value, all timeouts specified by the tests will get multiplied by it.\
\This is useful to run tests made for a faster computer on a slower computer."
newtype HClTestSuccessLog = HClTestSuccessLog Bool deriving (Typeable)
instance IsOption HClTestSuccessLog where
defaultValue = HClTestSuccessLog False
parseValue = const $ return $ HClTestSuccessLog True
optionName = return "hcltest-success-log"
optionHelp = return "Also print the log when the test succeeded"
optionCLParser = HClTestSuccessLog <$> switch (long "hcltest-success-log" <> help "Also print the log when the test succeeded")
instance IsTest HClTasty where
testOptions = return
[ Option (Proxy :: Proxy HClTestTimeoutFactor)
, Option (Proxy :: Proxy HClTestSuccessLog)
]
run opts (HClTasty t) _ = toResult <$> runHClTest factor t
where HClTestTimeoutFactor factor = lookupOption opts
HClTestSuccessLog sl = lookupOption opts
toResult (True,l) = testPassed $ if sl then l else ""
toResult (False,l) = testFailed l
hcltest :: TestName -> HClTest Trace () -> TestTree
hcltest n = singleTest n . HClTasty