1 package uk.co.datumedge.hamcrest.json;
2
3 import static org.skyscreamer.jsonassert.JSONCompareMode.STRICT;
4
5 import org.json.JSONException;
6 import org.skyscreamer.jsonassert.JSONCompareMode;
7
8 final class JSONAssertComparator<T> implements JSONModalComparator<T> {
9 private final JSONAssertComparatorFactory<T> factory;
10 private final JSONCompareMode compareMode;
11
12 static <T> JSONModalComparator<T> modalComparatorFor(JSONAssertComparatorFactory<T> factory) {
13 return new JSONAssertComparator<T>(factory);
14 }
15
16 private JSONAssertComparator(JSONAssertComparatorFactory<T> factory) {
17 this(factory, STRICT);
18 }
19
20 private JSONAssertComparator(JSONAssertComparatorFactory<T> factory, JSONCompareMode compareMode) {
21 this.factory = factory;
22 this.compareMode = compareMode;
23 }
24
25 @Override
26 public JSONComparisonResult compare(T expected, T actual) throws JSONException {
27 return factory.comparatorWith(compareMode).compare(expected, actual);
28 }
29
30 @Override
31 public JSONModalComparator<T> butAllowingAnyArrayOrdering() {
32 return new JSONAssertComparator<T>(factory, compareMode.withStrictOrdering(false));
33 }
34
35 @Override
36 public JSONModalComparator<T> butAllowingExtraUnexpectedFields() {
37 return new JSONAssertComparator<T>(factory, compareMode.withExtensible(true));
38 }
39 }