diff options
author | Linnea Gräf <nea@nea.moe> | 2024-11-14 02:26:29 +0100 |
---|---|---|
committer | Linnea Gräf <nea@nea.moe> | 2024-11-14 02:26:29 +0100 |
commit | 05937d237c2fdf793e21b36523d06902c5a0a725 (patch) | |
tree | 5dd003d917197e58cbbe8642fec61fd558eb1b56 | |
parent | d19c25d5d58944d03011a99ff2dbeaaa29e416d2 (diff) | |
download | profunctor-codecs-java-05937d237c2fdf793e21b36523d06902c5a0a725.tar.gz profunctor-codecs-java-05937d237c2fdf793e21b36523d06902c5a0a725.tar.bz2 profunctor-codecs-java-05937d237c2fdf793e21b36523d06902c5a0a725.zip |
Add duplicate keys test
-rw-r--r-- | gson/src/test/java/moe/nea/jcp/gson/test/TestBasic.java | 48 |
1 files changed, 32 insertions, 16 deletions
diff --git a/gson/src/test/java/moe/nea/jcp/gson/test/TestBasic.java b/gson/src/test/java/moe/nea/jcp/gson/test/TestBasic.java index c525303..58727f2 100644 --- a/gson/src/test/java/moe/nea/jcp/gson/test/TestBasic.java +++ b/gson/src/test/java/moe/nea/jcp/gson/test/TestBasic.java @@ -9,6 +9,8 @@ import moe.nea.jcp.gson.GsonOperations; import moe.nea.pcj.Codec; import moe.nea.pcj.Decode; import moe.nea.pcj.Result; +import moe.nea.pcj.json.AtField; +import moe.nea.pcj.json.DuplicateJsonKey; import moe.nea.pcj.json.JsonLikeError; import moe.nea.pcj.json.JsonLikeOperations; import moe.nea.pcj.json.MissingKey; @@ -44,6 +46,23 @@ public class TestBasic { return result; } + static JsonElement mkPrim(Object arg) { + if (arg instanceof JsonElement el) return el; + if (arg instanceof String str) return new JsonPrimitive(str); + if (arg instanceof Number num) return new JsonPrimitive(num); + if (arg == null) return JsonNull.INSTANCE; + if (arg instanceof Boolean b) return new JsonPrimitive(b); + throw new IllegalArgumentException("Cannot convert " + arg + " to json object"); + } + + static JsonObject mkJsonObject(Object... args) { + JsonObject obj = new JsonObject(); + for (int i = 0; i < args.length; i += 2) { + obj.add((String) args[i], mkPrim(args[i + 1])); + } + return obj; + } + GsonCodecs codecs = GsonCodecs.INSTANCE; @Test @@ -65,22 +84,6 @@ public class TestBasic { int bar ) {} - static JsonElement mkPrim(Object arg) { - if (arg instanceof JsonElement el) return el; - if (arg instanceof String str) return new JsonPrimitive(str); - if (arg instanceof Number num) return new JsonPrimitive(num); - if (arg == null) return JsonNull.INSTANCE; - if (arg instanceof Boolean b) return new JsonPrimitive(b); - throw new IllegalArgumentException("Cannot convert " + arg + " to json object"); - } - - static JsonObject mkJsonObject(Object... args) { - JsonObject obj = new JsonObject(); - for (int i = 0; i < args.length; i += 2) { - obj.add((String) args[i], mkPrim(args[i + 1])); - } - return obj; - } @Test void testObject() { @@ -93,6 +96,19 @@ public class TestBasic { new TestObject("fooValue", -10)); assertFail(decode(codec, mkJsonObject("foo", "fooValue")), new MissingKey("bar")); + assertFail(decode(codec, mkJsonObject("foo", "fooValue", "bar", "test")), + new AtField("bar", new UnexpectedJsonElement("number", mkPrim("test")))); + } + @Test + void testDuplicateKeys() { + var codec = RecordJoiners.join( + codecs.STRING.fieldOf("foo").withGetter(TestObject::foo), + codecs.INTEGER.fieldOf("foo").withGetter(TestObject::bar), + TestObject::new + ); + // TODO: add test for decoding with duplicate keys warning (esp. optional fields) + assertFail(codec.encode(new TestObject("", 0), GsonOperations.INSTANCE), + new DuplicateJsonKey("foo")); } } |