packages feed

parsec-numeric-0.1.0.0: test/Test/Text/ParserCombinators/Parsec/Numeric.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE FlexibleContexts #-}

module Test.Text.ParserCombinators.Parsec.Numeric
  ( tests
  ) where

import Data.Functor.Identity
import Text.Parsec
import Test.Tasty
import Test.Tasty.HUnit
import Test.Tasty.QuickCheck
import Test.Tasty.TH

import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as LBS
import qualified Data.Text as T
import qualified Data.Text.Lazy as LT

import Text.ParserCombinators.Parsec.Numeric

tests :: TestTree
tests = $(testGroupGenerator)

parseFromStreamTest :: (Integral r, Stream s Identity Char) => s -> r -> Assertion
parseFromStreamTest source required =
  case parse nat "" source of
    Left err -> error (show err)
    Right  v -> if v == required
                then return ()
                else error "Test from source type was not correct value."

case_parseFromByteString :: Assertion
case_parseFromByteString = parseFromStreamTest ("23"::BS.ByteString) (23::Word)

case_parseFromByteStringLazy :: Assertion
case_parseFromByteStringLazy = parseFromStreamTest ("23"::LBS.ByteString) (23::Word)

case_parseFromText :: Assertion
case_parseFromText = parseFromStreamTest ("23"::T.Text) (23::Word)

case_parseFromTextLazy :: Assertion
case_parseFromTextLazy = parseFromStreamTest ("23"::LT.Text) (23::Word)

case_parseFromString :: Assertion
case_parseFromString = parseFromStreamTest ("23"::String) (23::Word)