diff --git a/src/main/java/org/json/JSONArray.java b/src/main/java/org/json/JSONArray.java index 18e57e6..3be3e14 100644 --- a/src/main/java/org/json/JSONArray.java +++ b/src/main/java/org/json/JSONArray.java @@ -1366,6 +1366,10 @@ public class JSONArray implements Iterable { if (!JSONObject.isNumberSimilar((Number)valueThis, (Number)valueOther)) { return false; } + } else if (valueThis instanceof JSONString && valueOther instanceof JSONString) { + if (!((JSONString) valueThis).toJSONString().equals(((JSONString) valueOther).toJSONString())) { + return false; + } } else if (!valueThis.equals(valueOther)) { return false; } diff --git a/src/main/java/org/json/JSONObject.java b/src/main/java/org/json/JSONObject.java index 9f6ee5f..68d302d 100644 --- a/src/main/java/org/json/JSONObject.java +++ b/src/main/java/org/json/JSONObject.java @@ -2125,6 +2125,10 @@ public class JSONObject { if (!isNumberSimilar((Number)valueThis, (Number)valueOther)) { return false; } + } else if (valueThis instanceof JSONString && valueOther instanceof JSONString) { + if (!((JSONString) valueThis).toJSONString().equals(((JSONString) valueOther).toJSONString())) { + return false; + } } else if (!valueThis.equals(valueOther)) { return false; } diff --git a/src/test/java/org/json/junit/JSONArrayTest.java b/src/test/java/org/json/junit/JSONArrayTest.java index e98259c..1a2df7f 100644 --- a/src/test/java/org/json/junit/JSONArrayTest.java +++ b/src/test/java/org/json/junit/JSONArrayTest.java @@ -6,6 +6,7 @@ Public Domain. import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; @@ -29,7 +30,9 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.json.JSONPointerException; +import org.json.JSONString; import org.json.JSONTokener; +import org.json.junit.data.MyJsonString; import org.junit.Test; import com.jayway.jsonpath.Configuration; @@ -1334,4 +1337,25 @@ public class JSONArrayTest { fail("Excepected Exception."); Util.checkJSONArrayMaps(json_input); } + + @Test + public void testIssue682SimilarityOfJSONString() { + JSONArray ja1 = new JSONArray() + .put(new MyJsonString()) + .put(2); + JSONArray ja2 = new JSONArray() + .put(new MyJsonString()) + .put(2); + assertTrue(ja1.similar(ja2)); + + JSONArray ja3 = new JSONArray() + .put(new JSONString() { + @Override + public String toJSONString() { + return "\"different value\""; + } + }) + .put(2); + assertFalse(ja1.similar(ja3)); + } } diff --git a/src/test/java/org/json/junit/JSONObjectTest.java b/src/test/java/org/json/junit/JSONObjectTest.java index 32f4a42..ea0cec3 100644 --- a/src/test/java/org/json/junit/JSONObjectTest.java +++ b/src/test/java/org/json/junit/JSONObjectTest.java @@ -30,6 +30,7 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.json.JSONPointerException; +import org.json.JSONString; import org.json.JSONTokener; import org.json.XML; import org.json.junit.data.BrokenToString; @@ -3487,4 +3488,25 @@ public class JSONObjectTest { assertNotNull(json_input); fail("Excepected Exception."); } + + @Test + public void testIssue682SimilarityOfJSONString() { + JSONObject jo1 = new JSONObject() + .put("a", new MyJsonString()) + .put("b", 2); + JSONObject jo2 = new JSONObject() + .put("a", new MyJsonString()) + .put("b", 2); + assertTrue(jo1.similar(jo2)); + + JSONObject jo3 = new JSONObject() + .put("a", new JSONString() { + @Override + public String toJSONString() { + return "\"different value\""; + } + }) + .put("b", 2); + assertFalse(jo1.similar(jo3)); + } }