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"