packages feed

opt-env-conf-test-0.0.0.2: test/OptEnvConf/ToplevelSpec.hs

module OptEnvConf.ToplevelSpec where

import Data.Version
import OptEnvConf
import System.Environment
import System.Exit
import Test.Syd

spec :: Spec
spec = do
  let dummyVersion = makeVersion [0, 0, 0]
  let dummyProgDesc = "dummy"
  let dummyParser = pure 'a'
  let dummyRun = runParser dummyVersion dummyProgDesc dummyParser
  sequential $ do
    it "can fail fast when too many unrecognsied arguments are given" $
      withArgs ["-option1", "option", "--option2", "option", "--option3", "option", "--option4", "option"] $
        dummyRun `shouldThrow` (== ExitFailure 1)

    describe "--help" $ do
      it "can show help text with --help" $
        withArgs ["--help"] $
          dummyRun `shouldThrow` (== ExitSuccess)
      it "can show help text with --help even when there are more args" $
        withArgs ["--help", "more", "args", "here"] $
          dummyRun `shouldThrow` (== ExitSuccess)
      it "can show help text with -h" $
        withArgs ["-h"] $
          dummyRun `shouldThrow` (== ExitSuccess)
      it "can show help text with --help even when there are more args" $
        withArgs ["-h", "more", "args", "here"] $
          dummyRun `shouldThrow` (== ExitSuccess)

    describe "--version" $ do
      it "can show version info with --version" $
        withArgs ["--version"] $
          dummyRun `shouldThrow` (== ExitSuccess)

    describe "--run-settings-check" $ do
      it "can run a settings check with --run-settings-check" $
        withArgs ["--run-settings-check"] $
          dummyRun `shouldThrow` (== ExitSuccess)
      it "can run a settings check with --run-settings-check even when there are more args" $
        withArgs ["--run-settings-check", "more", "args", "here"] $
          runParser
            dummyVersion
            dummyProgDesc
            ( many
                ( setting
                    [ help "something that reads args",
                      argument,
                      reader str,
                      metavar "STR"
                    ]
                ) ::
                Parser [String]
            )
            `shouldThrow` (== ExitSuccess)