fb-util-0.1.0.1: tests/OptParseTest.hs
{-
Copyright (c) Meta Platforms, Inc. and affiliates.
All rights reserved.
This source code is licensed under the BSD-style license found in the
LICENSE file in the root directory of this source tree.
-}
module OptParseTest where
import Test.HUnit
import TestRunner
import Data.Text (Text)
import Facebook.Init
import Options.Applicative
import Util.OptParse
data Options = Options
{ foo :: Text
, bar :: Int
}
optionsParser :: Parser Options
optionsParser = Options
<$> textOption
( long "foo" <> metavar "FOO" <> help "foo" )
<*> intOption
( long "bar" <> value 42 <> metavar "BAR" <> help "bar" )
optsInfo :: ParserInfo Options
optsInfo = info (helper <*> optionsParser) fullDesc
partialTest :: Test
partialTest = TestLabel "partial" $ TestCase $ do
doTest -- only defined flags
[ "--foo=foo", "--bar=7" ]
[]
doTest -- start with an unknown
[ "--baz=5", "--foo=foo", "--bar=7" ]
[ "--baz=5" ]
doTest -- unknown in the middle
[ "--foo=foo", "--baz=5", "--bar=7" ]
[ "--baz=5" ]
doTest -- end with an unknown
[ "--foo=foo", "--bar=7", "--baz=5" ]
[ "--baz=5" ]
doTest -- intercalate known and unknown
[ "--snert=4", "--foo=foo", "--quux=wat", "--bar=7", "--baz=5" ]
[ "--snert=4", "--quux=wat", "--baz=5"]
doTest -- `--`
[ "--foo=foo", "--baz=5", "--", "--bar=7", "--" ]
[ "--baz=5", "--bar=7", "--" ]
where
doTest inp ex = do
(_, args) <- partialParse defaultPrefs optsInfo inp
assertEqual (show inp) ex args
main :: IO ()
main = withFacebookUnitTest $
testRunner $ TestList
[ partialTest
]