packages feed

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

module Data.GenValidity.ByteStringSpec
  ( spec,
  )
where

import Control.DeepSeq
import qualified Data.ByteString as SB (ByteString)
import qualified Data.ByteString.Lazy as LB (ByteString)
import qualified Data.ByteString.Short as Short (ShortByteString)
import Data.GenValidity
import Data.GenValidity.ByteString ()
import Test.Hspec
import Test.QuickCheck

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 prettyValidate 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
  do
    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 "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 "genValid :: Gen Short.ShortByteString" $ do
    checkable (genValid :: Gen Short.ShortByteString)
    showable (genValid :: Gen Short.ShortByteString)
  describe "genValid :: Gen Short.ShortByteString" $ do
    checkable (genValid :: Gen Short.ShortByteString)
    showable (genValid :: Gen Short.ShortByteString)
    it "generates valid lazy bytestring" $
      forAll (genValid :: Gen Short.ShortByteString) isValid

-- Uncomment to test that the instances are poisoned
--
-- instance GenValid SB.ByteString where
--     genValid = undefined
--     shrinkValid = undefined
--
-- instance GenValid LB.ByteString where
--     genValid = undefined
--     shrinkValid = undefined
--
-- Uncomment to see the error message that you would get
--
-- data FooBar = FooBar SB.ByteString String
--     deriving (Show, Eq, Generic)
-- instance Validity FooBar
-- instance GenValid FooBar