Issue #292 - update JsonParserImpl and reject duplicate keys unit test
Signed-off-by: John T.E. Timm <johntimm@us.ibm.com>
diff --git a/impl/src/main/java/org/eclipse/jsonp/JsonParserImpl.java b/impl/src/main/java/org/eclipse/jsonp/JsonParserImpl.java
index a6fe3d5..ac993b4 100644
--- a/impl/src/main/java/org/eclipse/jsonp/JsonParserImpl.java
+++ b/impl/src/main/java/org/eclipse/jsonp/JsonParserImpl.java
@@ -170,7 +170,7 @@
case START_ARRAY:
return getArray(new JsonArrayBuilderImpl(bufferPool));
case START_OBJECT:
- return getObject(new JsonObjectBuilderImpl(bufferPool));
+ return getObject(new JsonObjectBuilderImpl(bufferPool, rejectDuplicateKeys));
case KEY_NAME:
case VALUE_STRING:
return new JsonStringImpl(getCharSequence());
diff --git a/impl/src/test/java/org/eclipse/jsonp/tests/JsonDuplicateKeyTest.java b/impl/src/test/java/org/eclipse/jsonp/tests/JsonDuplicateKeyTest.java
index 4cf716f..0fdbeb1 100644
--- a/impl/src/test/java/org/eclipse/jsonp/tests/JsonDuplicateKeyTest.java
+++ b/impl/src/test/java/org/eclipse/jsonp/tests/JsonDuplicateKeyTest.java
@@ -56,24 +56,46 @@
assertEquals("Duplicate key 'a' is not allowed", e.getMessage());
}
}
-
+
+ @Test
+ public void testJsonReaderDuplicateKey3() {
+ String json = "{\"a\":\"b\",\"b\":{\"c\":\"d\",\"c\":\"e\"}}";
+ JsonReader jsonReader = Json.createReader(new StringReader(json));
+ JsonObject jsonObject = jsonReader.readObject();
+ assertEquals(jsonObject.getJsonObject("b").getString("c"), "e");
+ }
+
+ @Test
+ public void testJsonReaderDuplicateKey4() {
+ String json = "{\"a\":\"b\",\"b\":{\"c\":\"d\",\"c\":\"e\"}}";;
+ JsonReaderFactory jsonReaderFactory = Json.createReaderFactory(Collections.singletonMap(JsonConfig.REJECT_DUPLICATE_KEYS, true));
+ JsonReader jsonReader = jsonReaderFactory.createReader(new StringReader(json));
+ try {
+ jsonReader.readObject();
+ fail();
+ } catch (Exception e) {
+ assertTrue(e instanceof JsonParsingException);
+ assertEquals("Duplicate key 'c' is not allowed", e.getMessage());
+ }
+ }
+
@Test
public void testJsonObjectBuilderDuplcateKey1() {
- JsonObjectBuilder objectBuilder = Json.createObjectBuilder();
- JsonObject jsonObject = objectBuilder.add("a", "b").add("a", "c").build();
- assertEquals(jsonObject.getString("a"), "c");
+ JsonObjectBuilder objectBuilder = Json.createObjectBuilder();
+ JsonObject jsonObject = objectBuilder.add("a", "b").add("a", "c").build();
+ assertEquals(jsonObject.getString("a"), "c");
}
-
+
@Test
public void testJsonObjectBuilderDuplcateKey2() {
- JsonBuilderFactory jsonBuilderFactory = Json.createBuilderFactory(Collections.singletonMap(JsonConfig.REJECT_DUPLICATE_KEYS, true));
- JsonObjectBuilder objectBuilder = jsonBuilderFactory.createObjectBuilder();
- try {
- objectBuilder.add("a", "b").add("a", "c").build();
- fail();
- } catch (Exception e) {
+ JsonBuilderFactory jsonBuilderFactory = Json.createBuilderFactory(Collections.singletonMap(JsonConfig.REJECT_DUPLICATE_KEYS, true));
+ JsonObjectBuilder objectBuilder = jsonBuilderFactory.createObjectBuilder();
+ try {
+ objectBuilder.add("a", "b").add("a", "c").build();
+ fail();
+ } catch (Exception e) {
assertTrue(e instanceof IllegalStateException);
assertEquals("Duplicate key 'a' is not allowed", e.getMessage());
- }
+ }
}
}