From fb96e870a95ed86c247e73578a75335a0586ac13 Mon Sep 17 00:00:00 2001 From: Zach Date: Wed, 17 Nov 2021 20:00:12 -0600 Subject: [PATCH] add test case and modified old ones --- .../java/org/json/junit/JSONObjectTest.java | 45 +++++++++++++++++-- .../org/json/junit/data/RecursiveBean.java | 8 ++-- 2 files changed, 45 insertions(+), 8 deletions(-) diff --git a/src/test/java/org/json/junit/JSONObjectTest.java b/src/test/java/org/json/junit/JSONObjectTest.java index df2144a..cb31c7a 100644 --- a/src/test/java/org/json/junit/JSONObjectTest.java +++ b/src/test/java/org/json/junit/JSONObjectTest.java @@ -3221,22 +3221,59 @@ public class JSONObjectTest { } @Test(expected=JSONException.class) public void testSimpleRecursiveObject() { + // B -> A -> B ... RecursiveBean ObjA = new RecursiveBean("ObjA"); - RecursiveBean ObjB = new RecursiveBean("ObjB", ObjA); + RecursiveBean ObjB = new RecursiveBean("ObjB"); + ObjB.setRef(ObjA); ObjA.setRef(ObjB); new JSONObject(ObjA); fail("Expected an exception"); } @Test(expected=JSONException.class) public void testLongRecursiveObject() { + // D -> C -> B -> A -> D ... RecursiveBean ObjA = new RecursiveBean("ObjA"); - RecursiveBean ObjB = new RecursiveBean("ObjB", ObjA); - RecursiveBean ObjC = new RecursiveBean("ObjB", ObjB); - RecursiveBean ObjD = new RecursiveBean("ObjB", ObjC); + RecursiveBean ObjB = new RecursiveBean("ObjB"); + RecursiveBean ObjC = new RecursiveBean("ObjC"); + RecursiveBean ObjD = new RecursiveBean("ObjD"); + ObjC.setRef(ObjB); + ObjB.setRef(ObjA); + ObjD.setRef(ObjC); ObjA.setRef(ObjD); new JSONObject(ObjB); fail("Expected an exception"); } + @Test + public void testRepeatObjectNotRecursive() { + // C -> B -> A + // -> A + RecursiveBean ObjA = new RecursiveBean("ObjA"); + RecursiveBean ObjB = new RecursiveBean("ObjB"); + RecursiveBean ObjC = new RecursiveBean("ObjC"); + ObjC.setRef(ObjA); + ObjB.setRef(ObjA); + ObjB.setRef2(ObjA); + new JSONObject(ObjC); + new JSONObject(ObjB); + new JSONObject(ObjA); + } + @Test(expected=JSONException.class) + public void testRepeatObjectRecursive() { + // C -> B -> A -> D -> C + // -> D -> C + RecursiveBean ObjA = new RecursiveBean("ObjA"); + RecursiveBean ObjB = new RecursiveBean("ObjB"); + RecursiveBean ObjC = new RecursiveBean("ObjC"); + RecursiveBean ObjD = new RecursiveBean("ObjD"); + ObjC.setRef(ObjB); + ObjB.setRef(ObjA); + ObjB.setRef2(ObjD); + ObjA.setRef(ObjD); + ObjD.setRef(ObjC); + new JSONObject(ObjC); + fail("Expected an exception"); + } + @Test public void testIssue548ObjectWithEmptyJsonArray() { diff --git a/src/test/java/org/json/junit/data/RecursiveBean.java b/src/test/java/org/json/junit/data/RecursiveBean.java index 18ec8bd..dad6e7a 100644 --- a/src/test/java/org/json/junit/data/RecursiveBean.java +++ b/src/test/java/org/json/junit/data/RecursiveBean.java @@ -8,16 +8,16 @@ package org.json.junit.data; public class RecursiveBean { private String name; private Object reference; + private Object reference2; public String getName() { return name; } public Object getRef() {return reference;} + public Object getRef2() {return reference2;} public void setRef(Object refObj) {reference = refObj;} + public void setRef2(Object refObj) {reference2 = refObj;} public RecursiveBean(String name) { this.name = name; reference = null; - } - public RecursiveBean(String name, Object refObj) { - this.name = name; - reference = refObj; + reference2 = null; } } \ No newline at end of file