packages feed

optparse-applicative-0.0.1: tests/Tests.hs

{-# LANGUAGE TemplateHaskell #-}
module Main where

import qualified Examples.Hello as Hello
import qualified Examples.Commands as Commands

import Options.Applicative.Extra
import Options.Applicative.Types
import System.Exit
import Test.HUnit
import Test.Framework.Providers.HUnit
import Test.Framework.TH.Prime

assertLeft :: Show b => Either a b -> (a -> Assertion) -> Assertion
assertLeft x f = either f err x
  where
    err b = assertFailure $ "expected Left, got " ++ show b

checkHelpText :: Show a => String -> ParserInfo a -> Assertion
checkHelpText name p = do
  let result = execParserPure p ["--help"]
  assertLeft result $ \(ParserFailure err code) -> do
    expected <- readFile $ "tests/" ++ name ++ ".err.txt"
    expected @=? err name
    ExitFailure 1 @=? code

case_hello :: Assertion
case_hello = checkHelpText "hello" Hello.opts

case_modes :: Assertion
case_modes = checkHelpText "commands" Commands.opts

main :: IO ()
main = $(defaultMainGenerator)