aeson 1.3.1.0 → 1.3.1.1
raw patch · 17 files changed
+51/−39 lines, 17 filesdep +tastydep +tasty-hunitdep +tasty-quickcheckdep −test-frameworkdep −test-framework-hunitdep −test-framework-quickcheck2PVP ok
version bump matches the API change (PVP)
Dependencies added: tasty, tasty-hunit, tasty-quickcheck
Dependencies removed: test-framework, test-framework-hunit, test-framework-quickcheck2
API changes (from Hackage documentation)
Files
- Data/Aeson/Types/FromJSON.hs +6/−3
- Data/Aeson/Types/Internal.hs +3/−1
- aeson.cabal +4/−4
- benchmarks/Compare/BufferBuilder.hs +0/−1
- benchmarks/Compare/JsonBench.hs +1/−1
- benchmarks/Compare/JsonBuilder.hs +1/−1
- changelog.md +4/−0
- examples/Twitter/Manual.hs +0/−1
- stack-lts6.yaml +0/−1
- stack-lts7.yaml +0/−1
- stack-lts8.yaml +0/−1
- tests/DataFamilies/Properties.hs +3/−3
- tests/ErrorMessages.hs +3/−3
- tests/Properties.hs +3/−3
- tests/SerializationFormatSpec.hs +5/−5
- tests/Tests.hs +3/−2
- tests/UnitTests.hs +15/−8
Data/Aeson/Types/FromJSON.hs view
@@ -1258,9 +1258,12 @@ _ -> Scientific.toRealFloat <$> parseScientificText t instance (FromJSON a, Integral a) => FromJSON (Ratio a) where- parseJSON = withObject "Rational" $ \obj ->- (%) <$> obj .: "numerator"- <*> obj .: "denominator"+ parseJSON = withObject "Rational" $ \obj -> do+ numerator <- obj .: "numerator"+ denominator <- obj .: "denominator"+ if denominator == 0+ then fail "Ratio denominator was 0"+ else pure $ numerator % denominator {-# INLINE parseJSON #-} -- | /WARNING:/ Only parse fixed-precision numbers from trusted input
Data/Aeson/Types/Internal.hs view
@@ -270,7 +270,9 @@ -- | Success continuation. type Success a f r = a -> f r --- | A JSON parser.+-- | A JSON parser. N.B. This might not fit your usual understanding of+-- "parser". Instead you might like to think of 'Parser' as a "parse result",+-- i.e. a parser to which the input has already been applied. newtype Parser a = Parser { runParser :: forall f r. JSONPath
aeson.cabal view
@@ -1,5 +1,5 @@ name: aeson-version: 1.3.1.0+version: 1.3.1.1 license: BSD3 license-file: LICENSE category: Text, Web, JSON@@ -204,9 +204,9 @@ scientific, tagged, template-haskell,- test-framework,- test-framework-hunit,- test-framework-quickcheck2,+ tasty,+ tasty-hunit,+ tasty-quickcheck, text, time, time-locale-compat,
benchmarks/Compare/BufferBuilder.hs view
@@ -11,7 +11,6 @@ import Data.BufferBuilder.Json import Data.Int (Int64)-import Data.Monoid ((<>)) import Twitter import qualified Data.BufferBuilder.Utf8 as UB
benchmarks/Compare/JsonBench.hs view
@@ -11,7 +11,7 @@ module Compare.JsonBench (benchmarks) where import Prelude ()-import Prelude.Compat+import Prelude.Compat hiding ((<>)) import Control.DeepSeq (NFData(..)) import Criterion
benchmarks/Compare/JsonBuilder.hs view
@@ -6,7 +6,7 @@ module Compare.JsonBuilder () where import Prelude ()-import Prelude.Compat+import Prelude.Compat hiding ((<>)) import Data.Json.Builder import Data.Monoid ((<>))
changelog.md view
@@ -1,5 +1,9 @@ For the latest version of this document, please see [https://github.com/bos/aeson/blob/master/changelog.md](https://github.com/bos/aeson/blob/master/changelog.md). +### 1.3.1.1++* Catch 0 denominators when parsing Ratio+ ### 1.3.1.0 * Fix bug in generically derived `FromJSON` instances that are using `unwrapUnaryRecords`, thanks to Xia Li-yao
examples/Twitter/Manual.hs view
@@ -16,7 +16,6 @@ import Prelude.Compat import Control.Applicative-import Data.Monoid ((<>)) import Twitter import Data.Aeson hiding (Result)
stack-lts6.yaml view
@@ -12,7 +12,6 @@ - hashable-1.2.6.1 - integer-logarithms-1 - quickcheck-instances-0.3.16-- test-framework-quickcheck2-0.3.0.4 - th-abstraction-0.2.2.0 flags: flags:
stack-lts7.yaml view
@@ -8,7 +8,6 @@ - hashable-1.2.6.1 - integer-logarithms-1 - quickcheck-instances-0.3.16-- test-framework-quickcheck2-0.3.0.4 - th-abstraction-0.2.2.0 flags: aeson:
stack-lts8.yaml view
@@ -7,7 +7,6 @@ - base-compat-0.9.3 - quickcheck-instances-0.3.16 - th-abstraction-0.2.2.0-- test-framework-quickcheck2-0.3.0.4 flags: aeson: fast: true
tests/DataFamilies/Properties.hs view
@@ -9,12 +9,12 @@ import DataFamilies.Instances () import Properties hiding (tests) -import Test.Framework (Test, testGroup)-import Test.Framework.Providers.QuickCheck2 (testProperty)+import Test.Tasty (TestTree, testGroup)+import Test.Tasty.QuickCheck (testProperty) -------------------------------------------------------------------------------- -tests :: Test+tests :: TestTree tests = testGroup "data families" [ testGroup "template-haskell" [ testGroup "toJSON" [
tests/ErrorMessages.hs view
@@ -13,13 +13,13 @@ import Data.Proxy (Proxy(..)) import Instances () import Numeric.Natural (Natural)-import Test.Framework (Test)-import Test.Framework.Providers.HUnit (testCase)+import Test.Tasty (TestTree)+import Test.Tasty.HUnit (testCase) import Test.HUnit (Assertion, assertFailure, assertEqual) import qualified Data.ByteString.Lazy.Char8 as L import qualified Data.HashMap.Strict as HM -tests :: [Test]+tests :: [TestTree] tests = [ testCase "Int" int
tests/Properties.hs view
@@ -33,8 +33,8 @@ import Encoders import Instances () import Numeric.Natural (Natural)-import Test.Framework (Test, testGroup)-import Test.Framework.Providers.QuickCheck2 (testProperty)+import Test.Tasty (TestTree, testGroup)+import Test.Tasty.QuickCheck (testProperty) import Test.QuickCheck (Arbitrary(..), Property, Testable, (===), (.&&.), counterexample) import Types import qualified Data.Attoparsec.Lazy as L@@ -228,7 +228,7 @@ -------------------------------------------------------------------------------- -tests :: Test+tests :: TestTree tests = testGroup "properties" [ testGroup "encode" [ testProperty "encodeDouble" encodeDouble
tests/SerializationFormatSpec.hs view
@@ -35,8 +35,8 @@ import Data.Word (Word8) import GHC.Generics (Generic) import Instances ()-import Test.Framework (Test, testGroup)-import Test.Framework.Providers.HUnit (testCase)+import Test.Tasty (TestTree, testGroup)+import Test.Tasty.HUnit (testCase) import Test.HUnit (assertFailure, assertEqual) import Types (Approx(..), Compose3, Compose3', I) import qualified Data.ByteString.Lazy.Char8 as L@@ -54,7 +54,7 @@ import qualified Data.UUID.Types as UUID import qualified Data.Vector as Vector -tests :: [Test]+tests :: [TestTree] tests = [ testGroup "To JSON representation" $ fmap assertJsonEncodingExample jsonEncodingExamples@@ -246,7 +246,7 @@ instance (FromJSON a, FromJSON b) => FromJSON (MyEither a b) where parseJSON = genericParseJSON defaultOptions { sumEncoding = UntaggedValue } -assertJsonExample :: Example -> Test+assertJsonExample :: Example -> TestTree assertJsonExample (Example name bss val) = testCase name $ do assertSomeEqual "encode" bss (encode val) assertSomeEqual "encode/via value" bss (encode $ toJSON val)@@ -255,7 +255,7 @@ assertJsonExample (MaybeExample name bs mval) = testCase name $ assertEqual "decode" mval (decode bs) -assertJsonEncodingExample :: Example -> Test+assertJsonEncodingExample :: Example -> TestTree assertJsonEncodingExample (Example name bss val) = testCase name $ do assertSomeEqual "encode" bss (encode val) assertSomeEqual "encode/via value" bss (encode $ toJSON val)
tests/Tests.hs view
@@ -3,7 +3,7 @@ import Prelude () import Prelude.Compat -import Test.Framework (defaultMain)+import Test.Tasty (defaultMain, testGroup) import qualified DataFamilies.Properties as DF import qualified Properties import qualified UnitTests@@ -11,4 +11,5 @@ main :: IO () main = do ioTests <- UnitTests.ioTests- defaultMain (DF.tests : Properties.tests : UnitTests.tests : ioTests)+ let allTests = DF.tests : Properties.tests : UnitTests.tests : ioTests+ defaultMain (testGroup "tests" allTests)
tests/UnitTests.hs view
@@ -43,8 +43,8 @@ import Instances () import System.Directory (getDirectoryContents) import System.FilePath ((</>), takeExtension, takeFileName)-import Test.Framework (Test, testGroup)-import Test.Framework.Providers.HUnit (testCase)+import Test.Tasty (TestTree, testGroup)+import Test.Tasty.HUnit (testCase) import Test.HUnit (Assertion, assertBool, assertFailure, assertEqual) import Text.Printf (printf) import UnitTests.NullaryConstructors (nullaryConstructors)@@ -62,7 +62,7 @@ import Data.Aeson.Parser.UnescapeFFI () import Data.Aeson.Parser.UnescapePure () -tests :: Test+tests :: TestTree tests = testGroup "unit" [ testGroup "SerializationFormatSpec" SerializationFormatSpec.tests , testGroup "ErrorMessages" ErrorMessages.tests@@ -100,6 +100,7 @@ , testGroup "SingleMaybeField" singleMaybeField , testCase "withEmbeddedJSON" withEmbeddedJSONTest , testCase "SingleFieldCon" singleFieldCon+ , testCase "Ratio with denominator 0" ratioDenominator0 ] roundTripCamel :: String -> Assertion@@ -346,13 +347,13 @@ -- Comparison between bytestring and text encoders ------------------------------------------------------------------------------ -ioTests :: IO [Test]+ioTests :: IO [TestTree] ioTests = do enc <- encoderComparisonTests js <- jsonTestSuite return [enc, js] -encoderComparisonTests :: IO Test+encoderComparisonTests :: IO TestTree encoderComparisonTests = do encoderTests <- forM testFiles $ \file0 -> do let file = "benchmarks/json-data/" ++ file0@@ -412,7 +413,7 @@ -- JSONTestSuite -jsonTestSuiteTest :: FilePath -> Test+jsonTestSuiteTest :: FilePath -> TestTree jsonTestSuiteTest path = testCase fileName $ do payload <- L.readFile path let result = eitherDecode payload :: Either String Value@@ -427,7 +428,7 @@ -- Build a collection of tests based on the current contents of the -- JSONTestSuite test directories. -jsonTestSuite :: IO Test+jsonTestSuite :: IO TestTree jsonTestSuite = do let suitePath = "tests/JSONTestSuite" let suites = ["test_parsing", "test_transform"]@@ -508,7 +509,7 @@ newtype SingleMaybeField = SingleMaybeField { smf :: Maybe Int } deriving (Eq, Show, Generic) -singleMaybeField :: [Test]+singleMaybeField :: [TestTree] singleMaybeField = do (gName, gToJSON, gToEncoding, gFromJSON) <- [ ("generic", genericToJSON opts, genericToEncoding opts, parse (genericParseJSON opts))@@ -545,6 +546,12 @@ singleFieldCon :: Assertion singleFieldCon = assertEqual "fromJSON" (Right (SingleFieldCon 0)) (eitherDecode "0")++ratioDenominator0 :: Assertion+ratioDenominator0 =+ assertEqual "Ratio with denominator 0"+ (Left "Error in $: Ratio denominator was 0")+ (eitherDecode "{ \"numerator\": 1, \"denominator\": 0 }" :: Either String Rational) deriveJSON defaultOptions{omitNothingFields=True} ''MyRecord