View Javadoc

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  }