on master help sign in
Add withEmbeddedJSON test case
ff1fc5aAdam Bergmark
tests/UnitTests.hs+16−1
@@ -12,13 +12,14 @@ module UnitTests
12 (
12 (
13 ioTests
13 ioTests
14 , tests
14 , tests
15+ , withEmbeddedJSONTest
15 ) where
16 ) where
16
17
17import Prelude ()
18import Prelude ()
18import Prelude.Compat
19import Prelude.Compat
19
20
20import Control.Monad (forM, forM_)
21import Control.Monad (forM, forM_)
21−import Data.Aeson ((.=), (.:), (.:?), (.:!), FromJSON(..), FromJSONKeyFunction(..), FromJSONKey(..), ToJSON1(..), decode, eitherDecode, encode, fromJSON, genericParseJSON, genericToEncoding, genericToJSON, object, withObject)
22+import Data.Aeson ((.=), (.:), (.:?), (.:!), FromJSON(..), FromJSONKeyFunction(..), FromJSONKey(..), ToJSON1(..), decode, eitherDecode, encode, fromJSON, genericParseJSON, genericToEncoding, genericToJSON, object, withObject, withEmbeddedJSON)
22import Data.Aeson.Internal (JSONPathElement(..), formatError)
23import Data.Aeson.Internal (JSONPathElement(..), formatError)
23import Data.Aeson.TH (deriveJSON, deriveToJSON, deriveToJSON1)
24import Data.Aeson.TH (deriveJSON, deriveToJSON, deriveToJSON1)
24import Data.Aeson.Text (encodeToTextBuilder)
25import Data.Aeson.Text (encodeToTextBuilder)
@@ -93,6 +94,7 @@ tests = testGroup "unit" [
93 , testCase "Unescape string (PR #477)" unescapeString
94 , testCase "Unescape string (PR #477)" unescapeString
94 , testCase "Show Options" showOptions
95 , testCase "Show Options" showOptions
95 , testGroup "SingleMaybeField" singleMaybeField
96 , testGroup "SingleMaybeField" singleMaybeField
97+ , testCase "withEmbeddedJSON" withEmbeddedJSONTest
96 ]
98 ]
97
99
98roundTripCamel :: String -> Assertion
100roundTripCamel :: String -> Assertion
@@ -515,6 +517,19 @@ singleMaybeField = do
515 v = SingleMaybeField Nothing
517 v = SingleMaybeField Nothing
516 opts = defaultOptions{omitNothingFields=True,unwrapUnaryRecords=True}
518 opts = defaultOptions{omitNothingFields=True,unwrapUnaryRecords=True}
517
519
520+
521+newtype EmbeddedJSONTest = EmbeddedJSONTest Int
522+ deriving (Eq, Show)
523+
524+instance FromJSON EmbeddedJSONTest where
525+ parseJSON =
526+ withObject "Object" $ \o ->
527+ EmbeddedJSONTest <$> (o .: "prop" >>= withEmbeddedJSON "Quoted Int" parseJSON)
528+
529+withEmbeddedJSONTest :: Assertion
530+withEmbeddedJSONTest =
531+ assertEqual "Unquote embedded JSON" (Right $ EmbeddedJSONTest 1) (eitherDecode "{\"prop\":\"1\"}")
532+
518deriveJSON defaultOptions{omitNothingFields=True} ''MyRecord
533deriveJSON defaultOptions{omitNothingFields=True} ''MyRecord
519
534
520deriveToJSON defaultOptions ''Foo
535deriveToJSON defaultOptions ''Foo