module ConfigTest where
import Config
import Data.Functor.Identity (Identity (..))
import Options.Applicative (ParserResult (..), defaultPrefs, execParserPure)
import Test.Tasty (TestTree, testGroup)
import Test.Tasty.HUnit (Assertion, assertFailure, testCase, (@?=))
test_optionParser :: TestTree
test_optionParser =
testGroup
"Option Parser"
[ testCase "defaults" $
[]
`shouldParseTo` Config (i False) (i False) (i ".") (i "."),
testCase "dir only" $
["here"]
`shouldParseTo` Config (i False) (i False) (i "here") (i "here"),
testCase "custom output dir" $
["-o", "there", "here"]
`shouldParseTo` Config (i False) (i False) (i "there") (i "here"),
testCase "force" $
["-f", "here"]
`shouldParseTo` Config (i True) (i False) (i "here") (i "here"),
testCase "verbose" $
["-v"]
`shouldParseTo` Config (i False) (i True) (i ".") (i ".")
]
where
i = Identity
shouldParseTo :: [String] -> Config Identity -> Assertion
args `shouldParseTo` c =
case checkConfig <$> execParserPure defaultPrefs configParserInfo args of
Success p -> p @?= Just c
_ -> assertFailure "Parse failure"