genvalidity-hspec-aeson 0.0.1.1 → 0.1.0.0
raw patch · 3 files changed
+56/−53 lines, 3 filesdep +genvalidity-aesondep ~genvaliditydep ~genvalidity-hspecPVP ok
version bump matches the API change (PVP)
Dependencies added: genvalidity-aeson
Dependency ranges changed: genvalidity, genvalidity-hspec
API changes (from Hackage documentation)
- Test.Validity.Aeson: encodeAndDecodeAreInversesOnGen :: (Show a, Eq a, FromJSON a, ToJSON a) => Gen a -> Property
+ Test.Validity.Aeson: encodeAndDecodeAreInversesOnGen :: (Show a, Eq a, FromJSON a, ToJSON a) => Gen a -> (a -> [a]) -> Property
- Test.Validity.Aeson: jsonSpecOnGen :: forall a. (Show a, Eq a, Typeable a, FromJSON a, ToJSON a) => Gen a -> String -> Spec
+ Test.Validity.Aeson: jsonSpecOnGen :: forall a. (Show a, Eq a, Typeable a, FromJSON a, ToJSON a) => Gen a -> String -> (a -> [a]) -> Spec
- Test.Validity.Aeson: neverFailsToEncodeOnGen :: (Show a, ToJSON a) => Gen a -> Property
+ Test.Validity.Aeson: neverFailsToEncodeOnGen :: (Show a, ToJSON a) => Gen a -> (a -> [a]) -> Property
Files
- genvalidity-hspec-aeson.cabal +13/−11
- src/Test/Validity/Aeson.hs +37/−40
- test/Test/Validity/AesonSpec.hs +6/−2
genvalidity-hspec-aeson.cabal view
@@ -1,5 +1,5 @@ name: genvalidity-hspec-aeson-version: 0.0.1.1+version: 0.1.0.0 cabal-version: >=1.10 build-type: Simple license: MIT@@ -22,13 +22,13 @@ Test.Validity.Aeson build-depends: base >=4.9 && <=5,- genvalidity-hspec >=0.3 && <0.5,- genvalidity >=0.3 && <0.4,- hspec,+ genvalidity-hspec >=0.5 && <0.6,+ genvalidity >=0.4 && <0.5,+ hspec -any, aeson >=0.11 && <1.2,- QuickCheck,+ QuickCheck -any, deepseq >=1.4 && <1.5,- bytestring+ bytestring -any default-language: Haskell2010 hs-source-dirs: src/ ghc-options: -Wall@@ -47,13 +47,15 @@ type: exitcode-stdio-1.0 main-is: Spec.hs build-depends:+ aeson -any, base -any,- genvalidity >=0.3 && <0.4,+ genvalidity -any,+ genvalidity-aeson -any,+ genvalidity-hspec -any, genvalidity-hspec-aeson -any,- hspec,- aeson,- text,- genvalidity-text+ genvalidity-text -any,+ hspec -any,+ text -any default-language: Haskell2010 hs-source-dirs: test/ other-modules:
src/Test/Validity/Aeson.hs view
@@ -31,44 +31,44 @@ -- Example usage: -- -- > jsonSpecOnValid @Double-jsonSpecOnValid- :: forall a.- (Show a, Eq a, Typeable a, GenValid a, FromJSON a, ToJSON a)+jsonSpecOnValid ::+ forall a. (Show a, Eq a, Typeable a, GenValid a, FromJSON a, ToJSON a) => Spec-jsonSpecOnValid = jsonSpecOnGen (genValid @a) "valid"+jsonSpecOnValid = jsonSpecOnGen (genValid @a) "valid" shrinkValid -- | Standard test spec for properties of JSON-related functions for unchecked values -- -- Example usage: -- -- > jsonSpec @Int-jsonSpec- :: forall a.+jsonSpec ::+ forall a. (Show a, Eq a, Typeable a, GenUnchecked a, FromJSON a, ToJSON a) => Spec-jsonSpec = jsonSpecOnGen (genUnchecked @a) "unchecked"+jsonSpec = jsonSpecOnGen (genUnchecked @a) "unchecked" shrinkUnchecked -- | Standard test spec for properties of JSON-related functions for arbitrary values -- -- Example usage: -- -- > jsonSpecOnArbitrary @Int-jsonSpecOnArbitrary- :: forall a.- (Show a, Eq a, Typeable a, Arbitrary a, FromJSON a, ToJSON a)+jsonSpecOnArbitrary ::+ forall a. (Show a, Eq a, Typeable a, Arbitrary a, FromJSON a, ToJSON a) => Spec-jsonSpecOnArbitrary = jsonSpecOnGen (arbitrary @a) "arbitrary"+jsonSpecOnArbitrary = jsonSpecOnGen (arbitrary @a) "arbitrary" shrink -- | Standard test spec for properties of JSON-related functions for a given generator (and a name for that generator). -- -- Example usage: -- -- > jsonSpecOnGen (genListOf $ pure 'a') "sequence of 'a's"-jsonSpecOnGen- :: forall a.- (Show a, Eq a, Typeable a, FromJSON a, ToJSON a)- => Gen a -> String -> Spec-jsonSpecOnGen gen genname =+jsonSpecOnGen ::+ forall a. (Show a, Eq a, Typeable a, FromJSON a, ToJSON a)+ => Gen a+ -> String+ -> (a -> [a])+ -> Spec+jsonSpecOnGen gen genname s = parallel $ do let name = nameOf @a describe ("JSON " ++ name ++ " (" ++ genname ++ ")") $ do@@ -80,7 +80,7 @@ , "\"" ++ genname , name ++ "\"" ]) $- neverFailsToEncodeOnGen gen+ neverFailsToEncodeOnGen gen s describe ("decode :: " ++ name ++ " -> Data.ByteString.Lazy.ByteString") $ it@@ -89,36 +89,33 @@ , "\"" ++ genname , name ++ "\"" ++ "'s" ]) $- encodeAndDecodeAreInversesOnGen gen+ encodeAndDecodeAreInversesOnGen gen s -- | ----- prop> neverFailsToEncodeOnGen @Bool arbitrary--- prop> neverFailsToEncodeOnGen @Bool genUnchecked--- prop> neverFailsToEncodeOnGen @Bool genValid--- prop> neverFailsToEncodeOnGen @Int arbitrary--- prop> neverFailsToEncodeOnGen @Int genUnchecked--- prop> neverFailsToEncodeOnGen @Int genValid-neverFailsToEncodeOnGen- :: (Show a, ToJSON a)- => Gen a -> Property-neverFailsToEncodeOnGen gen =- forAll gen $ \(a :: a) ->+-- prop> neverFailsToEncodeOnGen @Bool arbitrary shrink+-- prop> neverFailsToEncodeOnGen @Bool genUnchecked shrinkUnchecked+-- prop> neverFailsToEncodeOnGen @Bool genValid shrinkValid+-- prop> neverFailsToEncodeOnGen @Int arbitrary shrink+-- prop> neverFailsToEncodeOnGen @Int genUnchecked shrinkUnchecked+-- prop> neverFailsToEncodeOnGen @Int genValid shrinkValid+neverFailsToEncodeOnGen :: (Show a, ToJSON a) => Gen a -> (a -> [a]) -> Property+neverFailsToEncodeOnGen gen s =+ forAllShrink gen s $ \(a :: a) -> evaluate (deepseq (JSON.encode a) ()) `shouldReturn` () -- | ----- prop> encodeAndDecodeAreInversesOnGen @Bool arbitrary--- prop> encodeAndDecodeAreInversesOnGen @Bool genUnchecked--- prop> encodeAndDecodeAreInversesOnGen @Bool genValid--- prop> encodeAndDecodeAreInversesOnGen @Int arbitrary--- prop> encodeAndDecodeAreInversesOnGen @Int genUnchecked--- prop> encodeAndDecodeAreInversesOnGen @Int genValid-encodeAndDecodeAreInversesOnGen- :: (Show a, Eq a, FromJSON a, ToJSON a)- => Gen a -> Property-encodeAndDecodeAreInversesOnGen gen =- forAll gen $ \(a :: a) ->+-- prop> encodeAndDecodeAreInversesOnGen @Bool arbitrary shrink+-- prop> encodeAndDecodeAreInversesOnGen @Bool genUnchecked shrinkUnchecked+-- prop> encodeAndDecodeAreInversesOnGen @Bool genValid shrinkValid+-- prop> encodeAndDecodeAreInversesOnGen @Int arbitrary shrink+-- prop> encodeAndDecodeAreInversesOnGen @Int genUnchecked shrinkUnchecked+-- prop> encodeAndDecodeAreInversesOnGen @Int genValid shrinkValid+encodeAndDecodeAreInversesOnGen ::+ (Show a, Eq a, FromJSON a, ToJSON a) => Gen a -> (a -> [a]) -> Property+encodeAndDecodeAreInversesOnGen gen s =+ forAllShrink gen s $ \(a :: a) -> let encoded = JSON.encode a errOrDecoded = JSON.eitherDecode encoded in case errOrDecoded of
test/Test/Validity/AesonSpec.hs view
@@ -8,20 +8,24 @@ import Data.Aeson import Data.GenValidity+import Data.GenValidity.Aeson () import Data.GenValidity.Text () import Data.Text (Text) import GHC.Generics+import Test.Validity import Test.Validity.Aeson spec :: Spec spec = do- jsonSpecOnGen (genListOf $ pure 'a') "sequence of 'a's"+ jsonSpecOnGen (genListOf $ pure 'a') "sequence of 'a's" (const []) jsonSpecOnValid @Double jsonSpec @Int jsonSpecOnArbitrary @Int jsonSpecOnValid @ForShow+ jsonSpecOnValid @Value+ shrinkValidSpec @Value -data ForShow =+newtype ForShow = ForShow Text deriving (Show, Eq, Generic)