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 }