![JAR search and dependency download from the Maven repository](/logo.png)
com.github.fslev.jsonassert_extended.comparator.ExtensibleArrayComparator Maven / Gradle / Ivy
package com.github.fslev.jsonassert_extended.comparator;
import org.json.JSONArray;
import org.json.JSONException;
import org.skyscreamer.jsonassert.Customization;
import org.skyscreamer.jsonassert.JSONCompareMode;
import org.skyscreamer.jsonassert.JSONCompareResult;
import org.skyscreamer.jsonassert.comparator.CustomComparator;
import org.skyscreamer.jsonassert.comparator.JSONCompareUtil;
public class ExtensibleArrayComparator extends CustomComparator {
JSONCompareMode arrayCompareMode;
public ExtensibleArrayComparator(JSONCompareMode objectCompareMode, JSONCompareMode arrayCompareMode, Customization... customizations) {
super(objectCompareMode, customizations);
this.arrayCompareMode = arrayCompareMode;
}
@Override
public void compareJSONArray(String prefix, JSONArray expected, JSONArray actual, JSONCompareResult result) throws JSONException {
if (expected.length() > actual.length()) {
result.fail(prefix + "[]: Expected size is " + expected.length() + " but an actual array of size " + actual.length());
} else if (!arrayCompareMode.isExtensible() && expected.length() != actual.length()) {
result.fail(prefix + "[]: Expected " + expected.length() + " values but got " + actual.length());
} else {
if (expected.length() != 0) {
if (arrayCompareMode.hasStrictOrder()) {
this.compareJSONArrayWithStrictOrder(prefix, expected, actual, result);
} else if (!arrayCompareMode.isExtensible() && JSONCompareUtil.allSimpleValues(expected)) {
this.compareJSONArrayOfObjects(prefix, expected, actual, result);
} else if (!arrayCompareMode.isExtensible() && JSONCompareUtil.allJSONObjects(expected)) {
this.compareJSONArrayOfObjects(prefix, expected, actual, result);
} else if (!arrayCompareMode.isExtensible()) {
this.compareJSONArrayOfObjects(prefix, expected, actual, result);
} else {
compareExtensibleJSONArrayOfObjects(prefix, expected, actual, result);
}
}
}
}
protected void compareExtensibleJSONArrayOfObjects(String key, JSONArray expectedArray, JSONArray actualArray, JSONCompareResult result) throws JSONException {
for (int i = 0; i < expectedArray.length(); i++) {
int failures = 0;
Object expectedValue = expectedArray.get(i);
for (int j = 0; j < actualArray.length(); j++) {
Object actualValue = actualArray.get(j);
JSONCompareResult mediateResult = new JSONCompareResult();
compareValues(key + "[" + i + "]", expectedValue, actualValue, mediateResult);
if (!mediateResult.passed()) {
failures++;
}
if (failures == actualArray.length()) {
result.fail("Element " + key + "[" + i + "] has no match");
return;
}
}
}
}
protected void compareJSONArrayOfObjects(String key, JSONArray expectedArray, JSONArray actualArray, JSONCompareResult result) throws JSONException {
if (expectedArray.length() != actualArray.length()) {
result.fail(key + "[]: Expected size " + expectedArray.length() + " is different than actual array size " + actualArray.length());
return;
}
compareExtensibleJSONArrayOfObjects(key, expectedArray, actualArray, result);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy