Skip to content

Commit 4e175c3

Browse files
authored
Avoid NullPointerException describing null value (#172)
Signed-off-by: Michael Edgar <[email protected]>
1 parent 8b9be3c commit 4e175c3

File tree

3 files changed

+30
-4
lines changed

3 files changed

+30
-4
lines changed

src/main/java/org/skyscreamer/jsonassert/JSONCompareResult.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ private static String describe(Object value) {
245245
} else if (value instanceof JSONObject) {
246246
return "a JSON object";
247247
} else {
248-
return value.toString();
248+
return String.valueOf(value);
249249
}
250250
}
251251

src/main/java/org/skyscreamer/jsonassert/comparator/DefaultComparator.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,9 @@ public void compareValues(String prefix, Object expectedValue, Object actualValu
5050
if (expectedValue == actualValue) {
5151
return;
5252
}
53-
if ((expectedValue == null && actualValue != null) || (expectedValue != null && actualValue == null)) {
53+
if (expectedValue == null || actualValue == null) {
5454
result.fail(prefix, expectedValue, actualValue);
55-
}
56-
if (areNumbers(expectedValue, actualValue)) {
55+
} else if (areNumbers(expectedValue, actualValue)) {
5756
if (areNotSameDoubles(expectedValue, actualValue)) {
5857
result.fail(prefix, expectedValue, actualValue);
5958
}

src/test/java/org/skyscreamer/jsonassert/JSONCompareTest.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import static org.skyscreamer.jsonassert.JSONCompare.compareJSON;
2222
import static org.skyscreamer.jsonassert.JSONCompareMode.LENIENT;
2323
import static org.skyscreamer.jsonassert.JSONCompareMode.NON_EXTENSIBLE;
24+
import static org.skyscreamer.jsonassert.JSONCompareMode.STRICT;
2425

2526
import org.hamcrest.Description;
2627
import org.hamcrest.Matcher;
@@ -158,6 +159,32 @@ public void reportsUnmatchedJSONArrayWhereExpectedContainsJSONObjectWithUniqueKe
158159
assertThat(result, failsWithMessage(equalTo("[0] Could not find match for element {\"id\":3}")));
159160
}
160161

162+
@Test
163+
public void reportsUnmatchedJSONArrayWhereExpectedContainsNonnullIntegerButActualContainsNullElement() throws JSONException {
164+
JSONCompareResult result = compareJSON("[ 3 ]", "[ null ]", LENIENT);
165+
assertThat(result, failsWithMessage(equalTo("[]\nExpected: 3\n but none found\n ; " +
166+
"[]\nUnexpected: null\n")));
167+
}
168+
169+
@Test
170+
public void reportsUnmatchedJSONArrayWhereExpectedContainsNullElementButActualContainsNonnullInteger() throws JSONException {
171+
JSONCompareResult result = compareJSON("[ null ]", "[ 3 ]", LENIENT);
172+
assertThat(result, failsWithMessage(equalTo("[]\nExpected: null\n but none found\n ; " +
173+
"[]\nUnexpected: 3\n")));
174+
}
175+
176+
@Test
177+
public void reportsStrictUnmatchedJSONArrayWhereExpectedContainsNonnullIntegerButActualContainsNullElement() throws JSONException {
178+
JSONCompareResult result = compareJSON("[ 3 ]", "[ null ]", STRICT);
179+
assertThat(result, failsWithMessage(equalTo("[0]\nExpected: 3\n got: null\n")));
180+
}
181+
182+
@Test
183+
public void reportsStrictUnmatchedJSONArrayWhereExpectedContainsNullButActualContainsNonnullInteger() throws JSONException {
184+
JSONCompareResult result = compareJSON("[ null ]", "[ 3 ]", STRICT);
185+
assertThat(result, failsWithMessage(equalTo("[0]\nExpected: null\n got: 3\n")));
186+
}
187+
161188
private Matcher<JSONCompareResult> failsWithMessage(final Matcher<String> expectedMessage) {
162189
return new TypeSafeMatcher<JSONCompareResult>() {
163190
@Override

0 commit comments

Comments
 (0)