packages feed

genvalidity-hspec-aeson 0.0.0.0 → 0.0.1.0

raw patch · 4 files changed

+103/−45 lines, 4 filesdep +bytestringdep +genvalidity-textdep +textdep ~QuickCheckdep ~aesondep ~hspecsetup-changedPVP ok

version bump matches the API change (PVP)

Dependencies added: bytestring, genvalidity-text, text

Dependency ranges changed: QuickCheck, aeson, hspec

API changes (from Hackage documentation)

Files

Setup.hs view
@@ -1,2 +1,3 @@ import Distribution.Simple+ main = defaultMain
genvalidity-hspec-aeson.cabal view
@@ -1,7 +1,5 @@ name: genvalidity-hspec-aeson-version: 0.0.0.0-synopsis: Standard spec's for aeson-related instances-description: Standard spec's for aeson-related Instances+version: 0.0.1.0 cabal-version: >=1.10 build-type: Simple license: MIT@@ -9,49 +7,55 @@ copyright: Copyright: (c) 2016 Tom Sydney Kerckhove maintainer: syd.kerckhove@gmail.com homepage: http://cs-syd.eu+synopsis: Standard spec's for aeson-related instances+description:+    Standard spec's for aeson-related Instances category: Testing author: Tom Sydney Kerckhove +source-repository head+    type: git+    location: https://github.com/NorfairKing/validity+ library     exposed-modules:         Test.Validity.Aeson     build-depends:         base >=4.9 && <=5,-        genvalidity-hspec >= 0.3 && < 0.4,-        genvalidity >= 0.3 && < 0.4,-        hspec >= 2.2 && < 2.3,-        aeson >= 0.11 && < 0.12,-        QuickCheck >= 2.8 && < 2.9,-        deepseq >= 1.4 && < 1.5+        genvalidity-hspec >=0.3 && <0.4,+        genvalidity >=0.3 && <0.4,+        hspec,+        aeson >=0.11 && <1.2,+        QuickCheck,+        deepseq >=1.4 && <1.5,+        bytestring     default-language: Haskell2010     hs-source-dirs: src/     ghc-options: -Wall  test-suite genvalidity-hspec-aeson-doctests-  default-language:   Haskell2010-  hs-source-dirs:     test-  type:               exitcode-stdio-1.0-  ghc-options:        -threaded-  main-is:            DocTest.hs-  build-depends:      base-    , doctest               >= 0.11      && < 0.12-    , genvalidity-hspec-aeson-+    type: exitcode-stdio-1.0+    main-is: DocTest.hs+    build-depends:+        base -any,+        doctest >=0.11 && <0.12,+        genvalidity-hspec-aeson -any+    default-language: Haskell2010+    hs-source-dirs: test+    ghc-options: -threaded test-suite genvalidity-hspec-aeson-test     type: exitcode-stdio-1.0     main-is: Spec.hs-    other-modules:-        Test.Validity.AesonSpec     build-depends:         base >=4.9 && <=5,-        genvalidity >= 0.3 && < 0.4,-        genvalidity-hspec-aeson,-        hspec >= 2.2 && < 2.3+        genvalidity >=0.3 && <0.4,+        genvalidity-hspec-aeson -any,+        hspec,+        aeson,+        text,+        genvalidity-text     default-language: Haskell2010     hs-source-dirs: test/+    other-modules:+        Test.Validity.AesonSpec     ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall---source-repository head-  type:     git-  location: https://github.com/NorfairKing/validity
src/Test/Validity/Aeson.hs view
@@ -18,6 +18,7 @@  import Control.DeepSeq (deepseq) import Control.Exception (evaluate)+import Control.Monad import Data.Aeson (FromJSON, ToJSON) import qualified Data.Aeson as JSON import Data.Typeable@@ -67,22 +68,28 @@     :: forall a.        (Show a, Eq a, Typeable a, FromJSON a, ToJSON a)     => Gen a -> String -> Spec-jsonSpecOnGen gen genname = parallel $ do-    let name = nameOf @a-    describe ("JSON " ++ name ++ " (" ++ genname ++ ")") $ do-        describe ("encode :: " ++ name ++ " -> Data.ByteString.Lazy.ByteString") $-            it-                (unwords-                     ["never fails to encode a", "\"" ++ genname, name ++ "\""]) $-            neverFailsToEncodeOnGen gen-        describe ("decode :: " ++ name ++ " -> Data.ByteString.Lazy.ByteString") $-            it-                (unwords-                     [ "ensures that encode and decode are inverses for"-                     , "\"" ++ genname-                     , name ++ "\"" ++ "'s"-                     ]) $-            encodeAndDecodeAreInversesOnGen gen+jsonSpecOnGen gen genname =+    parallel $ do+        let name = nameOf @a+        describe ("JSON " ++ name ++ " (" ++ genname ++ ")") $ do+            describe+                ("encode :: " ++ name ++ " -> Data.ByteString.Lazy.ByteString") $+                it+                    (unwords+                         [ "never fails to encode a"+                         , "\"" ++ genname+                         , name ++ "\""+                         ]) $+                neverFailsToEncodeOnGen gen+            describe+                ("decode :: " ++ name ++ " -> Data.ByteString.Lazy.ByteString") $+                it+                    (unwords+                         [ "ensures that encode and decode are inverses for"+                         , "\"" ++ genname+                         , name ++ "\"" ++ "'s"+                         ]) $+                encodeAndDecodeAreInversesOnGen gen  -- | --@@ -112,4 +119,27 @@     => Gen a -> Property encodeAndDecodeAreInversesOnGen gen =     forAll gen $ \(a :: a) ->-        JSON.eitherDecode (JSON.encode a) `shouldBe` Right a+        let encoded = JSON.encode a+            errOrDecoded = JSON.eitherDecode encoded+        in case errOrDecoded of+               Left err ->+                   expectationFailure $+                   unlines+                       [ "Decoding failed with error"+                       , err+                       , "instead of decoding to"+                       , show a+                       , "'encode' encoded it to the json"+                       , show encoded+                       ]+               Right decoded ->+                   unless (decoded == a) $+                   expectationFailure $+                   unlines+                       [ "Decoding succeeded, but the decoded value"+                       , show decoded+                       , "differs from expected decoded value"+                       , show a+                       , "'encode' encoded it to the json"+                       , show encoded+                       ]
test/Test/Validity/AesonSpec.hs view
@@ -1,10 +1,16 @@ {-# LANGUAGE TypeApplications #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE OverloadedStrings #-}  module Test.Validity.AesonSpec where  import Test.Hspec +import Data.Aeson import Data.GenValidity+import Data.GenValidity.Text ()+import Data.Text (Text)+import GHC.Generics import Test.Validity.Aeson  spec :: Spec@@ -13,3 +19,20 @@     jsonSpecOnValid @Double     jsonSpec @Int     jsonSpecOnArbitrary @Int+    jsonSpecOnValid @ForShow++data ForShow =+    ForShow Text+    deriving (Show, Eq, Generic)++instance Validity ForShow++instance GenUnchecked ForShow++instance GenValid ForShow++instance FromJSON ForShow++instance ToJSON ForShow+-- >>> decode (Data.Aeson.encode (ForShow "\248")) :: Maybe ForShow+-- Just (ForShow "\248")