{-# 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