Skip to content

Commit ae02195

Browse files
committed
Expose field comparison failures as a list in JSONCompareResult
Add new bean, FieldComparisonFailure. Deprecate field, expected and actual accessors.
1 parent 59f118b commit ae02195

File tree

3 files changed

+53
-2
lines changed

3 files changed

+53
-2
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package org.skyscreamer.jsonassert;
2+
3+
/**
4+
* Models a failure when comparing two fields.
5+
*/
6+
public class FieldComparisonFailure {
7+
private final String _field;
8+
private final Object _expected;
9+
private final Object _actual;
10+
11+
public FieldComparisonFailure(String field, Object expected, Object actual) {
12+
this._field = field;
13+
this._expected = expected;
14+
this._actual = actual;
15+
}
16+
17+
public String getField() {
18+
return _field;
19+
}
20+
21+
public Object getExpected() {
22+
return _expected;
23+
}
24+
25+
public Object getActual() {
26+
return _actual;
27+
}
28+
}

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

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package org.skyscreamer.jsonassert;
22

3+
import java.util.ArrayList;
4+
import java.util.Collections;
5+
import java.util.List;
6+
37
/**
48
* Bean for holding results from JSONCompare.
59
*/
@@ -9,6 +13,7 @@ public class JSONCompareResult {
913
private String _field;
1014
private Object _expected;
1115
private Object _actual;
16+
private final List<FieldComparisonFailure> _fieldFailures = new ArrayList<FieldComparisonFailure>();
1217

1318
/**
1419
* Default constructor.
@@ -46,12 +51,20 @@ public String getMessage() {
4651
return _message;
4752
}
4853

54+
/**
55+
* Get the list of failures on field comparisons
56+
*/
57+
public List<FieldComparisonFailure> getFieldFailures() {
58+
return Collections.unmodifiableList(_fieldFailures);
59+
}
60+
4961
/**
5062
* Actual field value
5163
*
5264
* @return a {@code JSONObject}, {@code JSONArray} or other {@code Object}
5365
* instance, or {@code null} if the comparison did not fail on a
5466
* particular field
67+
* @deprecated Superseded by {@link #getFieldFailures()}
5568
*/
5669
public Object getActual() {
5770
return _actual;
@@ -63,23 +76,25 @@ public Object getActual() {
6376
* @return a {@code JSONObject}, {@code JSONArray} or other {@code Object}
6477
* instance, or {@code null} if the comparison did not fail on a
6578
* particular field
79+
* @deprecated Superseded by {@link #getFieldFailures()}
6680
*/
6781
public Object getExpected() {
6882
return _expected;
6983
}
7084

7185
/**
72-
* Check if comparison failed on a particular field
86+
* Check if comparison failed on any particular fields
7387
*/
7488
public boolean isFailureOnField() {
75-
return _field != null;
89+
return !_fieldFailures.isEmpty();
7690
}
7791

7892
/**
7993
* Dot-separated path the the field that failed comparison
8094
*
8195
* @return a {@code String} instance, or {@code null} if the comparison did
8296
* not fail on a particular field
97+
* @deprecated Superseded by {@link #getFieldFailures()}
8398
*/
8499
public String getField() {
85100
return _field;
@@ -102,6 +117,7 @@ protected void fail(String message) {
102117
* @param actual Actual result
103118
*/
104119
protected void fail(String field, Object expected, Object actual) {
120+
_fieldFailures.add(new FieldComparisonFailure(field, expected, actual));
105121
this._field = field;
106122
this._expected = expected;
107123
this._actual = actual;

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.skyscreamer.jsonassert;
22

3+
import java.util.Arrays;
4+
35
import org.json.JSONException;
46
import org.junit.Assert;
57
import org.junit.Test;
@@ -147,6 +149,11 @@ public void testFieldMismatch() throws JSONException {
147149
Assert.assertEquals("Pat", result.getExpected());
148150
Assert.assertEquals("Sue", result.getActual());
149151
Assert.assertEquals("name", result.getField());
152+
153+
FieldComparisonFailure comparisonFailure = result.getFieldFailures().iterator().next();
154+
Assert.assertEquals("Pat", comparisonFailure.getExpected());
155+
Assert.assertEquals("Sue", comparisonFailure.getActual());
156+
Assert.assertEquals("name", comparisonFailure.getField());
150157
}
151158

152159
@Test

0 commit comments

Comments
 (0)