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 +1/−0
- genvalidity-hspec-aeson.cabal +32/−28
- src/Test/Validity/Aeson.hs +47/−17
- test/Test/Validity/AesonSpec.hs +23/−0
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")