Class RecursiveComparisonDifferenceCalculator
java.lang.Object
org.assertj.core.api.recursive.comparison.RecursiveComparisonDifferenceCalculator
Based on
DeepDifference
but takes a RecursiveComparisonConfiguration
, DeepDifference
being itself based on the deep equals implementation of https://github.com/jdereg/java-util-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static class
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate static boolean
areDualValueEqual
(DualValue dualValue, RecursiveComparisonConfiguration recursiveComparisonConfiguration) private static boolean
areEqualUsingComparator
(Object actual, Object expected, Comparator<Object> comparator, String fieldName) private static void
compareArrays
(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) private static void
compareAsEnums
(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState, RecursiveComparisonConfiguration recursiveComparisonConfiguration) private static void
compareAtomicBoolean
(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) private static void
compareAtomicInteger
(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) private static void
compareAtomicIntegerArray
(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) private static void
compareAtomicLong
(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) private static void
compareAtomicLongArray
(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) private static void
compareAtomicReference
(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) private static void
compareAtomicReferenceArray
(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
compareUnorderedIterables
(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) private static void
compareUnorderedMap
(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) private static String
private static List
<ComparisonDifference> determineDifferences
(Object actual, Object expected, FieldLocation fieldLocation, VisitedDualValues visitedDualValues, RecursiveComparisonConfiguration recursiveComparisonConfiguration) determineDifferences
(Object actual, Object expected, RecursiveComparisonConfiguration recursiveComparisonConfiguration) Compare two objects for differences by doing a 'deep' comparison.private static String
differentTypeErrorMessage
(DualValue dualValue, String actualTypeDescription) private static void
enumComparedToDifferentTypeError
(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) private static ComparisonDifference
expectedAndActualTypeDifference
(Object actual, Object expected) private static boolean
expectedTypeIsNotSubtypeOfActualType
(Object actual, Object expected) private static boolean
expectedTypeIsNotSubtypeOfActualType
(DualValue dualField) private static String
getChildFieldForValidation
(FieldLocation field, FieldLocation fieldValue) (package private) static boolean
hasOverriddenEquals
(Class<?> c) Determine if the passed in class has a non-Object.equals() method.private static boolean
isChildOfSpecifiedComparatorField
(DualValue dualValue, FieldLocation field) private static FieldLocation
keyFieldLocation
(FieldLocation parentFieldLocation, Object key) private static boolean
searchIterableForElement
(Iterator<?> actualIterator, Object expectedElement, DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) private static boolean
shouldHonorEquals
(DualValue dualValue, RecursiveComparisonConfiguration recursiveComparisonConfiguration) private static boolean
shouldHonorOverriddenEquals
(DualValue dualValue, RecursiveComparisonConfiguration recursiveComparisonConfiguration)
-
Field Details
-
DIFFERENT_ACTUAL_AND_EXPECTED_FIELD_TYPES
- See Also:
-
ACTUAL_IS_AN_ENUM_WHILE_EXPECTED_IS_NOT
- See Also:
-
ACTUAL_NOT_ORDERED_COLLECTION
-
VALUE_FIELD_NAME
- See Also:
-
ARRAY_FIELD_NAME
- See Also:
-
STRICT_TYPE_ERROR
- See Also:
-
DIFFERENT_SIZE_ERROR
- See Also:
-
MISSING_FIELDS
- See Also:
-
customEquals
-
-
Constructor Details
-
RecursiveComparisonDifferenceCalculator
public RecursiveComparisonDifferenceCalculator()
-
-
Method Details
-
determineDifferences
public List<ComparisonDifference> determineDifferences(Object actual, Object expected, RecursiveComparisonConfiguration recursiveComparisonConfiguration) Compare two objects for differences by doing a 'deep' comparison. This will traverse the Object graph and perform either a field-by-field comparison on each object (if not .equals() method has been overridden from Object), or it will call the customized .equals() method if it exists.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.
- Parameters:
actual
- Object one to compareexpected
- Object two to comparerecursiveComparisonConfiguration
- the recursive comparison configuration- Returns:
- the list of differences found or an empty list if objects are equivalent. Equivalent means that all field values of both subgraphs are the same, either at the field level or via the respectively encountered overridden .equals() methods during traversal.
-
determineDifferences
private static List<ComparisonDifference> determineDifferences(Object actual, Object expected, FieldLocation fieldLocation, VisitedDualValues visitedDualValues, RecursiveComparisonConfiguration recursiveComparisonConfiguration) -
isChildOfSpecifiedComparatorField
-
getChildFieldForValidation
-
compareAsEnums
private static void compareAsEnums(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState, RecursiveComparisonConfiguration recursiveComparisonConfiguration) -
enumComparedToDifferentTypeError
private static void enumComparedToDifferentTypeError(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) -
shouldHonorEquals
private static boolean shouldHonorEquals(DualValue dualValue, RecursiveComparisonConfiguration recursiveComparisonConfiguration) -
shouldHonorOverriddenEquals
private static boolean shouldHonorOverriddenEquals(DualValue dualValue, RecursiveComparisonConfiguration recursiveComparisonConfiguration) -
compareArrays
private static void compareArrays(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) -
compareOrderedCollections
private static void compareOrderedCollections(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) -
differentTypeErrorMessage
-
compareUnorderedIterables
private static void compareUnorderedIterables(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) -
searchIterableForElement
private static boolean searchIterableForElement(Iterator<?> actualIterator, Object expectedElement, DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) -
compareSortedMap
private static <K,V> void compareSortedMap(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) -
compareUnorderedMap
private static void compareUnorderedMap(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) -
keyFieldLocation
-
compareOptional
private static void compareOptional(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) -
compareAtomicBoolean
private static void compareAtomicBoolean(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) -
compareAtomicInteger
private static void compareAtomicInteger(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) -
compareAtomicIntegerArray
private static void compareAtomicIntegerArray(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) -
compareAtomicLong
private static void compareAtomicLong(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) -
compareAtomicLongArray
private static void compareAtomicLongArray(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) -
compareAtomicReferenceArray
private static void compareAtomicReferenceArray(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) -
compareAtomicReference
private static void compareAtomicReference(DualValue dualValue, RecursiveComparisonDifferenceCalculator.ComparisonState comparisonState) -
hasOverriddenEquals
Determine if the passed in class has a non-Object.equals() method. This method caches its results in static ConcurrentHashMap to benefit execution performance.- Parameters:
c
- Class to check.- Returns:
- true, if the passed in Class has a .equals() method somewhere between itself and just below Object in it's inheritance.
-
areDualValueEqual
private static boolean areDualValueEqual(DualValue dualValue, RecursiveComparisonConfiguration recursiveComparisonConfiguration) -
areEqualUsingComparator
private static boolean areEqualUsingComparator(Object actual, Object expected, Comparator<Object> comparator, String fieldName) -
expectedAndActualTypeDifference
-
expectedTypeIsNotSubtypeOfActualType
-
expectedTypeIsNotSubtypeOfActualType
-
describeOrderedCollectionTypes
-