packages feed

hedgehog-gen-json-0.0.0: test/Spec.hs

{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell   #-}

import qualified Data.Aeson          as Aeson
import           Hedgehog
import           Hedgehog.Gen.JSON
import qualified Hedgehog.Range      as Range
import           Protolude
import           Test.Tasty
import           Test.Tasty.Hedgehog

ranges :: Ranges
ranges =
  Ranges
  { _arrayRange = ArrayRange {unArrayRange = (Range.linear 0 5)}
  , _stringRange = StringRange {unStringRange = (Range.linear 0 100)}
  , _numberRange = NumberRange {unNumberRange = (Range.linearFrac 0 1000)}
  , _objectRange = ObjectRange {unObjectRange = (Range.linear 0 5)}
  }

prop_generatedUnconstrainedJSON :: Property
prop_generatedUnconstrainedJSON =
  property $ do
    v <- forAll $ genJSON ranges
    assert $ isJust ((Aeson.decodeStrict v) :: Maybe Aeson.Value)

tests :: TestTree
tests =
  testGroup
    "Hedgehog.Gen.JSON tests"
    [testProperty "Generated unconstrained values are valid JSON" prop_generatedUnconstrainedJSON]

main :: IO ()
main = defaultMain tests