diff --git a/src/main/java/org/skyscreamer/jsonassert/JSONCompareResult.java b/src/main/java/org/skyscreamer/jsonassert/JSONCompareResult.java index 28406fbe..a8a913f4 100644 --- a/src/main/java/org/skyscreamer/jsonassert/JSONCompareResult.java +++ b/src/main/java/org/skyscreamer/jsonassert/JSONCompareResult.java @@ -192,13 +192,29 @@ public JSONCompareResult fail(String field, ValueMatcherException exception) { return this; } + /**CS304 Issue link: https://github.com/skyscreamer/JSONassert/issues/127 + * modified by adding a case when {@code expected} or {@code actual} == null, + * which the JSON may be an invalid JSON, + * return a warning sentence to inform the tester. + */ private String formatFailureMessage(String field, Object expected, Object actual) { - return field + String describeExp = describe(expected); + String describeAct = describe(actual); + String message = field + "\nExpected: " - + describe(expected) + + describeExp + "\n got: " - + describe(actual) + + describeAct + "\n"; + if(describeExp.equals("null")){ + message += "the expected JSON may be an invalid JSON" + + "\n"; + } + if(describeAct.equals("null")){ + message += "the actual JSON may be an invalid JSON" + + "\n"; + } + return message; } /** @@ -239,12 +255,20 @@ private String formatUnexpected(String field, Object actual) { + "\n"; } + /**CS304 Issue link: https://github.com/skyscreamer/JSONassert/issues/130 + * modified by adding a case when {@code value} == null, + * return a String "null" to avoid {@exception NullPointer} + */ private static String describe(Object value) { if (value instanceof JSONArray) { return "a JSON array"; } else if (value instanceof JSONObject) { return "a JSON object"; - } else { + } + else if(value == null){ + return "null"; + } + else { return value.toString(); } } diff --git a/src/main/java/org/skyscreamer/jsonassert/comparator/DefaultComparator.java b/src/main/java/org/skyscreamer/jsonassert/comparator/DefaultComparator.java index bc71eae4..a612fbdf 100644 --- a/src/main/java/org/skyscreamer/jsonassert/comparator/DefaultComparator.java +++ b/src/main/java/org/skyscreamer/jsonassert/comparator/DefaultComparator.java @@ -47,6 +47,15 @@ public void compareJSON(String prefix, JSONObject expected, JSONObject actual, J } } + + /**CS304 Issue link: https://github.com/skyscreamer/JSONassert/issues/130 + * modified by adding {@code return} to the second {@code if}. + * because one of the {@param expectedValue} and {@param actualValue} + * should be null can enter the the second {@code if}, + * after that if continue running, the next function {@code .getClass()} + * will always cause a {@exception NullPointer}. + * to avoid that case the {@code return} is added to the second {@code if}. + */ @Override public void compareValues(String prefix, Object expectedValue, Object actualValue, JSONCompareResult result) throws JSONException { @@ -55,6 +64,7 @@ public void compareValues(String prefix, Object expectedValue, Object actualValu } if ((expectedValue == null && actualValue != null) || (expectedValue != null && actualValue == null)) { result.fail(prefix, expectedValue, actualValue); + return; } if (areNumbers(expectedValue, actualValue)) { if (areNotSameDoubles(expectedValue, actualValue)) {