packages feed

genvalidity-bytestring-0.3.0.0: test/Data/GenValidity/ByteStringSpec.hs

module Data.GenValidity.ByteStringSpec
    ( spec
    ) where

import Control.DeepSeq

import Test.Hspec
import Test.QuickCheck

import Data.GenValidity
import Data.GenValidity.ByteString ()

import qualified Data.ByteString as SB (ByteString)
import qualified Data.ByteString.Lazy as LB (ByteString)

checkable :: (Validity t, Show t, NFData t) => Gen t -> SpecWith ()
checkable gen =
    it "generates bytestrings that can be checked for validity" $
    forAll gen $ \v ->
        case prettyValidation v of
            Left e -> deepseq e True
            Right v_ -> deepseq v_ True

showable :: Show t => Gen t -> SpecWith ()
showable gen =
    it "generates bytestrings that can be shown" $
    forAll gen $ \v -> deepseq (show v) True

spec :: Spec
spec = do
    describe "genUnchecked :: Gen SB.ByteString" $ do
        checkable (genUnchecked :: Gen SB.ByteString)
        -- showable (genUnchecked :: Gen SB.ByteString) DOES NOT HOLD
    describe "genValid :: Gen SB.ByteString" $ do
        checkable (genValid :: Gen SB.ByteString)
        showable (genValid :: Gen SB.ByteString)
        it "generates valid strict bytestring" $
            forAll (genValid :: Gen SB.ByteString) isValid
    describe "genInvalid :: Gen SB.ByteString" $ do
        checkable (genInvalid :: Gen SB.ByteString)
        -- showable (genInvalid :: Gen SB.ByteString) DOES NOT HOLD
        it "generates invalid strict bytestring" $
            forAll (genInvalid :: Gen SB.ByteString) isInvalid
    describe "genUnchecked :: Gen LB.ByteString" $ do
        checkable (genUnchecked :: Gen LB.ByteString)
        -- showable (genUnchecked :: Gen LB.ByteString) DOES NOT HOLD
    describe "genValid :: Gen LB.ByteString" $ do
        checkable (genValid :: Gen LB.ByteString)
        showable (genValid :: Gen LB.ByteString)
        it "generates valid lazy bytestring" $
            forAll (genValid :: Gen LB.ByteString) isValid
    describe "genInvalid :: Gen LB.ByteString" $ do
        checkable (genInvalid :: Gen LB.ByteString)
        -- showable (genInvalid :: Gen LB.ByteString) DOES NOT HOLD
        it "generates invalid lazy bytestring" $
            forAll (genInvalid :: Gen LB.ByteString) isInvalid