on master help sign in
Merge pull request #532 from Lysxia/bug-single-maybe
7b8d3ceAdam Bergmark
tests/UnitTests.hs+22−2
@@ -18,11 +18,11 @@ import Prelude ()
18import Prelude.Compat
18import Prelude.Compat
19
19
20import Control.Monad (forM, forM_)
20import Control.Monad (forM, forM_)
21−import Data.Aeson ((.=), (.:), (.:?), (.:!), FromJSON(..), FromJSONKeyFunction(..), FromJSONKey(..), ToJSON1(..), decode, eitherDecode, encode, genericToEncoding, genericToJSON, object, withObject)
21+import Data.Aeson ((.=), (.:), (.:?), (.:!), FromJSON(..), FromJSONKeyFunction(..), FromJSONKey(..), ToJSON1(..), decode, eitherDecode, encode, fromJSON, genericParseJSON, genericToEncoding, genericToJSON, object, withObject)
22import Data.Aeson.Internal (JSONPathElement(..), formatError)
22import Data.Aeson.Internal (JSONPathElement(..), formatError)
23import Data.Aeson.TH (deriveJSON, deriveToJSON, deriveToJSON1)
23import Data.Aeson.TH (deriveJSON, deriveToJSON, deriveToJSON1)
24import Data.Aeson.Text (encodeToTextBuilder)
24import Data.Aeson.Text (encodeToTextBuilder)
25−import Data.Aeson.Types (Options(..), ToJSON(..), Value, camelTo, camelTo2, defaultOptions, omitNothingFields)
25+import Data.Aeson.Types (Options(..), Result(Success), ToJSON(..), Value(Null), camelTo, camelTo2, defaultOptions, omitNothingFields, parse)
26import Data.Char (toUpper)
26import Data.Char (toUpper)
27import Data.Either.Compat (isLeft, isRight)
27import Data.Either.Compat (isLeft, isRight)
28import Data.Hashable (hash)
28import Data.Hashable (hash)
@@ -92,6 +92,7 @@ tests = testGroup "unit" [
92 , testCase "PR #455" pr455
92 , testCase "PR #455" pr455
93 , testCase "Unescape string (PR #477)" unescapeString
93 , testCase "Unescape string (PR #477)" unescapeString
94 , testCase "Show Options" showOptions
94 , testCase "Show Options" showOptions
95+ , testGroup "SingleMaybeField" singleMaybeField
95 ]
96 ]
96
97
97roundTripCamel :: String -> Assertion
98roundTripCamel :: String -> Assertion
@@ -496,7 +497,26 @@ showOptions =
496 ++ "}")
497 ++ "}")
497 (show defaultOptions)
498 (show defaultOptions)
498
499
500+newtype SingleMaybeField = SingleMaybeField { smf :: Maybe Int }
501+ deriving (Eq, Show, Generic)
502+
503+singleMaybeField :: [Test]
504+singleMaybeField = do
505+ (gName, gToJSON, gToEncoding, gFromJSON) <-
506+ [ ("generic", genericToJSON opts, genericToEncoding opts, parse (genericParseJSON opts))
507+ , ("th", toJSON, toEncoding, fromJSON) ]
508+ return $
509+ testCase gName $ do
510+ assertEqual "toJSON" Null (gToJSON v)
511+ assertEqual "toEncoding" (toEncoding (gToJSON v)) (gToEncoding v)
512+ assertEqual "fromJSON" (Success v) (gFromJSON Null)
513+ where
514+ v = SingleMaybeField Nothing
515+ opts = defaultOptions{omitNothingFields=True,unwrapUnaryRecords=True}
516+
499deriveJSON defaultOptions{omitNothingFields=True} ''MyRecord
517deriveJSON defaultOptions{omitNothingFields=True} ''MyRecord
500
518
501deriveToJSON defaultOptions ''Foo
519deriveToJSON defaultOptions ''Foo
502deriveToJSON1 defaultOptions ''Foo
520deriveToJSON1 defaultOptions ''Foo
521+
522+deriveJSON defaultOptions{omitNothingFields=True,unwrapUnaryRecords=True} ''SingleMaybeField