packages feed

options-1.2.1.2: tests/OptionsTests/StringParsing.hs

-- Copyright (C) 2012 John Millikin <jmillikin@gmail.com>
--
-- See license.txt for details
module OptionsTests.StringParsing (suite_StringParsing) where

import Options
import Test.Hspec

data StringOptions = StringOptions
  { optString :: String,
    optString_defA :: String,
    optString_defU :: String
  }

instance Options StringOptions where
  defineOptions =
    pure StringOptions
      <*> simpleOption "string" "" ""
      -- String, ASCII default
      <*> simpleOption "string_defA" "a" ""
      -- String, Unicode default
      <*> simpleOption "string_defU" "\12354" ""

suite_StringParsing :: Spec
suite_StringParsing = context "string-parsing" do
     test_Defaults
     test_Ascii
     test_UnicodeValid
     test_UnicodeInvalid


test_Defaults :: Spec
test_Defaults = specify "defaults" $ do
  let opts = defaultOptions

  shouldBe (optString_defA opts) "a"
  shouldBe (optString_defU opts) "\12354"

test_Ascii :: Spec
test_Ascii = specify "ascii" $ do
  let parsed = parseOptions ["--string=a"]
  let Just opts = parsedOptions parsed

  shouldBe (optString opts) "a"

test_UnicodeValid :: Spec
test_UnicodeValid = specify "unicode-valid" $ do
  let parsed = parseOptions ["--string=\12354"]
  let Just opts = parsedOptions parsed

  shouldBe (optString opts) "\12354"

test_UnicodeInvalid :: Spec
test_UnicodeInvalid = specify "unicode-invalid" $ do
  let parsed = parseOptions ["--string=\56507"]
  let expectedString = "\56507"
  let Just opts = parsedOptions parsed

  shouldBe (optString opts) expectedString