Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JsonObject.similar() number entry check bug fix #613

Merged
merged 4 commits into from Jul 26, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/main/java/org/json/JSONArray.java
Expand Up @@ -1383,7 +1383,9 @@ public boolean similar(Object other) {
return false;
}
} else if (valueThis instanceof Number && valueOther instanceof Number) {
return JSONObject.isNumberSimilar((Number)valueThis, (Number)valueOther);
if (!JSONObject.isNumberSimilar((Number)valueThis, (Number)valueOther)) {
return false;
}
} else if (!valueThis.equals(valueOther)) {
return false;
}
Expand Down
4 changes: 3 additions & 1 deletion src/main/java/org/json/JSONObject.java
Expand Up @@ -2108,7 +2108,9 @@ public boolean similar(Object other) {
return false;
}
} else if (valueThis instanceof Number && valueOther instanceof Number) {
return isNumberSimilar((Number)valueThis, (Number)valueOther);
if (!isNumberSimilar((Number)valueThis, (Number)valueOther)) {
return false;
};
} else if (!valueThis.equals(valueOther)) {
return false;
}
Expand Down
17 changes: 14 additions & 3 deletions src/test/java/org/json/junit/JSONArrayTest.java
Expand Up @@ -87,6 +87,7 @@ public class JSONArrayTest {
@Test
public void verifySimilar() {
final String string1 = "HasSameRef";
final String string2 = "HasDifferentRef";
JSONArray obj1 = new JSONArray()
.put("abc")
.put(string1)
Expand All @@ -101,10 +102,20 @@ public void verifySimilar() {
.put("abc")
.put(new String(string1))
.put(2);

JSONArray obj4 = new JSONArray()
.put("abc")
.put(2.0)
.put(new String(string1));

JSONArray obj5 = new JSONArray()
.put("abc")
.put(2.0)
.put(new String(string2));

assertFalse("Should eval to false", obj1.similar(obj2));

assertTrue("Should eval to true", obj1.similar(obj3));
assertFalse("obj1-obj2 Should eval to false", obj1.similar(obj2));
assertTrue("obj1-obj3 Should eval to true", obj1.similar(obj3));
assertFalse("obj4-obj5 Should eval to false", obj4.similar(obj5));
}

/**
Expand Down
20 changes: 14 additions & 6 deletions src/test/java/org/json/junit/JSONObjectTest.java
Expand Up @@ -100,6 +100,7 @@ public class JSONObjectTest {
@Test
public void verifySimilar() {
final String string1 = "HasSameRef";
final String string2 = "HasDifferentRef";
JSONObject obj1 = new JSONObject()
.put("key1", "abc")
.put("key2", 2)
Expand All @@ -119,16 +120,23 @@ public void verifySimilar() {
.put("key1", "abc")
.put("key2", 2.0)
.put("key3", new String(string1));

assertFalse("Should eval to false", obj1.similar(obj2));

assertTrue("Should eval to true", obj1.similar(obj3));

assertTrue("Should eval to true", obj1.similar(obj4));
JSONObject obj5 = new JSONObject()
.put("key1", "abc")
.put("key2", 2.0)
.put("key3", new String(string2));

assertFalse("obj1-obj2 Should eval to false", obj1.similar(obj2));
assertTrue("obj1-obj3 Should eval to true", obj1.similar(obj3));
assertTrue("obj1-obj4 Should eval to true", obj1.similar(obj4));
assertFalse("obj1-obj5 Should eval to false", obj1.similar(obj5));
// verify that a double and big decimal are "similar"
assertTrue("should eval to true",new JSONObject().put("a",1.1d).similar(new JSONObject("{\"a\":1.1}")));

// Confirm #618 is fixed (compare should not exit early if similar numbers are found)
// Note that this test may not work if the JSONObject map entry order changes
JSONObject first = new JSONObject("{\"a\": 1, \"b\": 2, \"c\": 3}");
JSONObject second = new JSONObject("{\"a\": 1, \"b\": 2.0, \"c\": 4}");
assertFalse("first-second should eval to false", first.similar(second));
}

@Test
Expand Down