packages feed

optparse-text-0.1.0.0: test/Spec.hs

{-# LANGUAGE OverloadedStrings #-}

import           Control.Applicative       ((<$>), (<*>))
import qualified Data.Text                 as T
import qualified Options.Applicative       as Opt
import           Options.Applicative.Extra (execParserPure, getParseResult)
import qualified Options.Applicative.Text  as OptT
import           Test.Hspec

data Options = Options { text    :: T.Text
                       , textArg :: T.Text
                       , textOpt :: T.Text }
  deriving (Eq, Show)

optParser :: Opt.Parser Options
optParser = Options <$> Opt.argument OptT.text ( Opt.metavar "TEXT" )
                 <*> OptT.textArgument ( Opt.metavar "TEXT2" )
                 <*> OptT.textOption ( Opt.long "textopt" )

parser :: Opt.ParserInfo Options
parser = Opt.info (Opt.helper <*> optParser) mempty

main :: IO ()
main = hspec .
  describe "optparse-text" $ do
    let parse args = getParseResult $ execParserPure Opt.defaultPrefs parser args

    it "parses to text arguments" $
      parse ["arg1", "arg2", "--textopt", "hello world"] `shouldBe`
        Just Options {text = "arg1", textArg = "arg2", textOpt = "hello world"}

    it "parses unicode" $
      parse ["🎈", "nø tû brëxit", "--textopt", "Benno Fünfstück"] `shouldBe`
        Just Options {text = "🎈", textArg = "nø tû brëxit", textOpt = "Benno Fünfstück"}