on master help sign in
Add unit tests for gToJSONKey and gFromJSONKey
commitcb3d8ae1c15c161a892d16dde96f27c7e16c41d8 authorLysxia <lysxia@gmail.com> dateSat 15 Jun 2019, 11:14 (7 years ago) parente7e6861
2 files changed+18
tests/Encoders.hs+13 tests/UnitTests/NullaryConstructors.hs+5
tests/Encoders.hs+13
@@ -6,6 +6,7 @@
66module Encoders (module Encoders) where
77
88import Prelude.Compat
9+import Data.Text (Text)
910
1011import Data.Aeson.TH
1112import Data.Aeson.Types
@@ -96,6 +97,18 @@ gNullaryToEncodingObjectWithSingleField = genericToEncoding optsObjectWithSingle
9697gNullaryParseJSONObjectWithSingleField :: Value -> Parser Nullary
9798gNullaryParseJSONObjectWithSingleField = genericParseJSON optsObjectWithSingleField
9899
100+keyOptions :: JSONKeyOptions
101+keyOptions = defaultJSONKeyOptions { keyModifier = ('k' :) }
102+
103+gNullaryToJSONKey :: Nullary -> Either String Text
104+gNullaryToJSONKey x = case genericToJSONKey keyOptions of
105+ ToJSONKeyText p _ -> Right (p x)
106+ _ -> Left "Should be a ToJSONKeyText"
107+
108+gNullaryFromJSONKey :: Text -> Parser Nullary
109+gNullaryFromJSONKey t = case genericFromJSONKey keyOptions of
110+ FromJSONKeyTextParser p -> p t
111+ _ -> fail "Not a TextParser"
99112
100113--------------------------------------------------------------------------------
101114-- SomeType encoders/decoders
tests/UnitTests/NullaryConstructors.hs+5
@@ -14,6 +14,7 @@ import Data.Aeson (decode, eitherDecode, fromEncoding, Value)
1414import Data.Aeson.Internal (IResult (..), iparse)
1515import Data.Aeson.Types (Parser)
1616import Data.ByteString.Builder (toLazyByteString)
17+import Data.Foldable (for_)
1718import Data.Maybe (fromJust)
1819import Encoders
1920import Test.Tasty.HUnit ((@=?), Assertion)
@@ -52,6 +53,10 @@ nullaryConstructors =
5253 -- Make sure that the old `"contents" : []' is still allowed
5354 , ISuccess C1 @=? parse thNullaryParseJSONTaggedObject (dec "{\"tag\":\"c1\",\"contents\":[]}")
5455 , ISuccess C1 @=? parse gNullaryParseJSONTaggedObject (dec "{\"tag\":\"c1\",\"contents\":[]}")
56+
57+ , for_ [("kC1", C1), ("kC2", C2), ("kC3", C3)] $ \(jkey, key) -> do
58+ Right jkey @=? gNullaryToJSONKey key
59+ ISuccess key @=? parse gNullaryFromJSONKey jkey
5560 ]
5661 where
5762 enc = eitherDecode . toLazyByteString . fromEncoding