public class RecursiveComparisonDifferenceCalculator
extends java.lang.Object
DeepDifference
but takes a RecursiveComparisonConfiguration
, DeepDifference
being itself based on the deep equals implementation of https://github.com/jdereg/java-utilModifier and Type | Class and Description |
---|---|
private static class |
RecursiveComparisonDifferenceCalculator.ComparisonState |
Modifier and Type | Field and Description |
---|---|
private static java.lang.String |
ACTUAL_NOT_ORDERED_COLLECTION |
private static java.util.Map<java.lang.Class<?>,java.lang.Boolean> |
customEquals |
private static java.util.Map<java.lang.Class<?>,java.lang.Boolean> |
customHash |
private static java.lang.String |
DIFFERENT_ACTUAL_AND_EXPECTED_FIELD_TYPES |
private static java.lang.String |
DIFFERENT_SIZE_ERROR |
private static java.lang.String |
MISSING_FIELDS |
private static java.lang.String |
STRICT_TYPE_ERROR |
private static java.lang.String |
VALUE_FIELD_NAME |
Constructor and Description |
---|
RecursiveComparisonDifferenceCalculator() |
Modifier and Type | Method and Description |
---|---|
private static void |
compareArrays(DualValue dualValue,
RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) |
private static void |
compareIterables(DualValue dualValue,
RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) |
private static void |
compareOptional(DualValue dualValue,
RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) |
private static void |
compareOrderedCollections(DualValue dualValue,
RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) |
private static <K,V> void |
compareSortedMap(DualValue dualValue,
RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) |
private static void |
compareUnorderedMap(DualValue dualValue,
RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) |
(package private) static int |
deepHashCode(java.lang.Object obj)
Get a deterministic hashCode (int) value for an Object, regardless of
when it was created or where it was loaded into memory.
|
private static java.lang.String |
describeOrderedCollectionTypes() |
private static java.util.List<ComparisonDifference> |
determineDifferences(java.lang.Object actual,
java.lang.Object expected,
java.util.List<java.lang.String> parentPath,
java.util.Set<DualValue> visited,
RecursiveComparisonConfiguration recursiveComparisonConfiguration) |
java.util.List<ComparisonDifference> |
determineDifferences(java.lang.Object actual,
java.lang.Object expected,
RecursiveComparisonConfiguration recursiveComparisonConfiguration)
Compare two objects for differences by doing a 'deep' comparison.
|
private static java.lang.String |
differentTypeErrorMessage(DualValue dualValue,
java.lang.String actualTypeDescription) |
private static ComparisonDifference |
expectedAndActualTypeDifference(java.lang.Object actual,
java.lang.Object expected) |
private static boolean |
expectedTypeIsNotSubtypeOfActualType(DualValue dualField) |
private static boolean |
expectedTypeIsNotSubtypeOfActualType(java.lang.Object actual,
java.lang.Object expected) |
private static java.util.Set<java.lang.String> |
getFieldsNames(java.lang.Class<?> clazz) |
private static java.util.Set<java.lang.String> |
getNonIgnoredFieldNames(java.lang.Class<?> actualClass,
java.util.List<java.lang.String> parentPath,
RecursiveComparisonConfiguration recursiveComparisonConfiguration) |
private static boolean |
hasCustomComparator(DualValue dualValue,
RecursiveComparisonConfiguration recursiveComparisonConfiguration) |
(package private) static boolean |
hasCustomEquals(java.lang.Class<?> c)
Determine if the passed in class has a non-Object.equals() method.
|
(package private) static boolean |
hasCustomHashCode(java.lang.Class<?> c)
Determine if the passed in class has a non-Object.hashCode() method.
|
private static boolean |
isContainerType(java.lang.Object o) |
private static boolean |
propertyOrFieldValuesAreEqual(DualValue dualValue,
RecursiveComparisonConfiguration recursiveComparisonConfiguration) |
private static final java.lang.String DIFFERENT_ACTUAL_AND_EXPECTED_FIELD_TYPES
private static final java.lang.String ACTUAL_NOT_ORDERED_COLLECTION
private static final java.lang.String VALUE_FIELD_NAME
private static final java.lang.String STRICT_TYPE_ERROR
private static final java.lang.String DIFFERENT_SIZE_ERROR
private static final java.lang.String MISSING_FIELDS
private static final java.util.Map<java.lang.Class<?>,java.lang.Boolean> customEquals
private static final java.util.Map<java.lang.Class<?>,java.lang.Boolean> customHash
public RecursiveComparisonDifferenceCalculator()
public java.util.List<ComparisonDifference> determineDifferences(java.lang.Object actual, java.lang.Object expected, RecursiveComparisonConfiguration recursiveComparisonConfiguration)
This method handles cycles correctly, for example A->B->C->A. Suppose a and a' are two separate instances of the A with the same values for all fields on A, B, and C. Then a.deepEquals(a') will return an empty list. It uses cycle detection storing visited objects in a Set to prevent endless loops.
actual
- Object one to compareexpected
- Object two to comparerecursiveComparisonConfiguration
- the recursive comparison configurationprivate static java.util.List<ComparisonDifference> determineDifferences(java.lang.Object actual, java.lang.Object expected, java.util.List<java.lang.String> parentPath, java.util.Set<DualValue> visited, RecursiveComparisonConfiguration recursiveComparisonConfiguration)
private static boolean hasCustomComparator(DualValue dualValue, RecursiveComparisonConfiguration recursiveComparisonConfiguration)
private static java.util.Set<java.lang.String> getNonIgnoredFieldNames(java.lang.Class<?> actualClass, java.util.List<java.lang.String> parentPath, RecursiveComparisonConfiguration recursiveComparisonConfiguration)
private static java.util.Set<java.lang.String> getFieldsNames(java.lang.Class<?> clazz)
private static boolean isContainerType(java.lang.Object o)
private static void compareArrays(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState)
private static void compareOrderedCollections(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState)
private static java.lang.String differentTypeErrorMessage(DualValue dualValue, java.lang.String actualTypeDescription)
private static void compareIterables(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState)
private static <K,V> void compareSortedMap(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState)
private static void compareUnorderedMap(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState)
private static void compareOptional(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState)
static boolean hasCustomEquals(java.lang.Class<?> c)
c
- Class to check.static int deepHashCode(java.lang.Object obj)
obj
- Object who hashCode is desired.static boolean hasCustomHashCode(java.lang.Class<?> c)
c
- Class to check.private static boolean propertyOrFieldValuesAreEqual(DualValue dualValue, RecursiveComparisonConfiguration recursiveComparisonConfiguration)
private static ComparisonDifference expectedAndActualTypeDifference(java.lang.Object actual, java.lang.Object expected)
private static boolean expectedTypeIsNotSubtypeOfActualType(DualValue dualField)
private static boolean expectedTypeIsNotSubtypeOfActualType(java.lang.Object actual, java.lang.Object expected)
private static java.lang.String describeOrderedCollectionTypes()