packages feed

envparse-0.4: test/Env/Internal/ParserSpec.hs

{-# LANGUAGE OverloadedStrings #-}
module Env.Internal.ParserSpec (spec) where

import Control.Monad ((<=<))
import Data.Text (Text)
import Test.Hspec

import Env.Internal.Error (Error)
import Env.Internal.Parser


spec :: Spec
spec = do
  describe "str" $ do
    it "works with String" $
      str "foo" `shouldBe` ok ("foo" :: String)

    it "works with Text" $
      str "foo" `shouldBe` ok ("foo" :: Text)

  describe "splitOn" $ do
    it "splits the string on a separator character" $
      splitOn ',' "1,2,3" `shouldBe` ok ["1", "2", "3"]

    it "splits the empty string into the empty list" $
      splitOn ',' "" `shouldBe` ok []

    it "creates an extra element for leading and trailing separators" $
      splitOn ',' ",2," `shouldBe` ok ["", "2", ""]

    it "is nicely composable " $
      (mapM auto <=< splitOn ',') "1,2,3" `shouldBe` ok ([1, 2, 3] :: [Int])

ok :: a -> Either Error a
ok = Right