packages feed

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 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)