argparser-0.3.1: tests/System/Console/ArgParser/TestHelpers.hs
{-# OPTIONS_GHC -F -pgmF htfpp #-}
module System.Console.ArgParser.TestHelpers where
import System.Console.ArgParser.BaseType
import System.Console.ArgParser.Parser
import System.Console.ArgParser.Run
import Test.Framework
import qualified Test.HUnit as H
paramRun
:: ParamSpec spec
=> spec a
-> [String]
-> ParseResult a
paramRun param args = parseArgs args $
mkDefaultApp (liftParam param) ""
specRun
:: ParserSpec a
-> [String]
-> ParseResult a
specRun param args = parseArgs args $
mkDefaultApp param ""
willFail :: Show a => ParseResult a -> H.Assertion
willFail res = case res of
Left _ -> return ()
Right val -> assertFailure $
"\nexpected parsing to fail but got " ++ show val
willSucceed
:: (Show a, Eq a)
=> a
-> ParseResult a
-> H.Assertion
willSucceed val res = case res of
Left msg -> assertFailure $ "\nparsing failed: " ++ msg
Right resval -> assertEqual val resval
behavior
:: ([String] -> ParseResult a)
-> [(ParseResult a -> H.Assertion, [String])]
-> H.Assertion
behavior parser candidates = sequence_ assertions where
(preds, args) = unzip candidates
results = map parser args
assertions = zipWith ($) preds results
getIntSuccessProp
:: (Show a, Num a, Eq a)
=> ([String] -> ParseResult a)
-> (a -> [String])
-> Positive a
-> Bool
getIntSuccessProp parser repr = prop where
prop (Positive i) = (Right i ==) $ parser $ repr i
getStrSuccessProp
:: ([String] -> ParseResult String)
-> String
-> Property
getStrSuccessProp parser = prop where
prop str = (take 1 str /= "-") ==> Right str == parser [str]
getIntSumSuccessProp
:: ([String] -> ParseResult Int)
-> [String]
-> NonEmptyList (Positive Int)
-> Bool
getIntSumSuccessProp parser prefix = prop where
prop (NonEmpty positives) = (Right expected ==) $ parser args where
unpos (Positive i) = i
expected = sum $ map unpos positives
args = prefix ++ map (show . unpos) positives