@Override public int compare(Object actual, Object other) { if (actual == null && other == null) return 0; if (actual == null || other == null) return NOT_EQUAL; // value returned is not relevant for ordering if objects are not equal. return areEqual(actual, other) ? 0 : NOT_EQUAL; }
protected String describeUsedComparators() { if (comparatorsByPropertyOrField.isEmpty()) { return format("%nComparators used:%n%s", describeFieldComparatorsByType()); } return format("%nComparators used:%n%s%n%s", describeFieldComparatorsByName(), describeFieldComparatorsByType()); }
@Override public String toString() { return description() + describeUsedComparators(); }
/** * Use field/property by field/property comparison (including inherited fields/properties) instead of relying on * actual type A <code>equals</code> method to compare the {@link Optional} value's object for incoming assertion * checks. Private fields are included but this can be disabled using * {@link Assertions#setAllowExtractingPrivateFields(boolean)}. * <p> * This can be handy if <code>equals</code> method of the {@link Optional} value's object to compare does not suit * you. * </p> * Note that the comparison is <b>not</b> recursive, if one of the fields/properties is an Object, it will be * compared to the other field/property using its <code>equals</code> method. * <p> * Example: * * <pre><code class='java'> TolkienCharacter frodo = new TolkienCharacter("Frodo", 33, HOBBIT); * TolkienCharacter frodoClone = new TolkienCharacter("Frodo", 33, HOBBIT); * * // Fail if equals has not been overridden in TolkienCharacter as equals default implementation only compares references * assertThat(Optional.of(frodo)).contains(frodoClone); * * // frodo and frodoClone are equals when doing a field by field comparison. * assertThat(Optional.of(frodo)).usingFieldByFieldValueComparator().contains(frodoClone);</code></pre> * * @return {@code this} assertion object. */ @CheckReturnValue public SELF usingFieldByFieldValueComparator() { return usingValueComparator(new FieldByFieldComparator()); }
public FieldByFieldComparator(Map<String, Comparator<?>> comparatorsByPropertyOrField, TypeComparators typeComparators) { this.comparatorsByPropertyOrField = comparatorsByPropertyOrField == null ? new TreeMap<>() : comparatorsByPropertyOrField; this.comparatorsByType = isNullOrEmpty(typeComparators) ? defaultTypeComparators() : typeComparators; }
/** * Use field/property by field/property comparison (including inherited fields/properties) instead of relying on * actual type A <code>equals</code> method to compare the {@link Optional} value's object for incoming assertion * checks. Private fields are included but this can be disabled using * {@link Assertions#setAllowExtractingPrivateFields(boolean)}. * <p> * This can be handy if <code>equals</code> method of the {@link Optional} value's object to compare does not suit * you. * </p> * Note that the comparison is <b>not</b> recursive, if one of the fields/properties is an Object, it will be * compared to the other field/property using its <code>equals</code> method. * <p> * Example: * * <pre><code class='java'> TolkienCharacter frodo = new TolkienCharacter("Frodo", 33, HOBBIT); * TolkienCharacter frodoClone = new TolkienCharacter("Frodo", 33, HOBBIT); * * // Fail if equals has not been overridden in TolkienCharacter as equals default implementation only compares references * assertThat(Optional.of(frodo)).contains(frodoClone); * * // frodo and frodoClone are equals when doing a field by field comparison. * assertThat(Optional.of(frodo)).usingFieldByFieldValueComparator().contains(frodoClone);</code></pre> * * @return {@code this} assertion object. */ @CheckReturnValue public SELF usingFieldByFieldValueComparator() { return usingValueComparator(new FieldByFieldComparator()); }
public FieldByFieldComparator(Map<String, Comparator<?>> comparatorsByPropertyOrField, TypeComparators typeComparators) { this.comparatorsByPropertyOrField = comparatorsByPropertyOrField == null ? new TreeMap<>() : comparatorsByPropertyOrField; this.comparatorsByType = isNullOrEmpty(typeComparators) ? defaultTypeComparators() : typeComparators; }
return usingExtendedByTypesElementComparator(new FieldByFieldComparator(comparatorsForElementPropertyOrFieldNames, getComparatorsForElementPropertyOrFieldTypes()));
@Override public int compare(Object actual, Object other) { if (actual == null && other == null) return 0; if (actual == null || other == null) return NOT_EQUAL; // value returned is not relevant for ordering if objects are not equal. return areEqual(actual, other) ? 0 : NOT_EQUAL; }
protected String describeUsedComparators() { if (comparatorsByPropertyOrField.isEmpty()) { return format("%nComparators used:%n%s", describeFieldComparatorsByType()); } return format("%nComparators used:%n%s%n%s", describeFieldComparatorsByName(), describeFieldComparatorsByType()); }
@Override public String toString() { return description() + describeUsedComparators(); }
return usingExtendedByTypesElementComparator(new FieldByFieldComparator(comparatorsForElementPropertyOrFieldNames, getComparatorsForElementPropertyOrFieldTypes()));
@Override public int compare(Object actual, Object other) { if (actual == null && other == null) return 0; if (actual == null || other == null) return NOT_EQUAL; // value returned is not relevant for ordering if objects are not equal. return areEqual(actual, other) ? 0 : NOT_EQUAL; }
return usingExtendedByTypesElementComparator(new FieldByFieldComparator(comparatorsForElementPropertyOrFieldNames, getComparatorsForElementPropertyOrFieldTypes()));
return usingExtendedByTypesElementComparator(new FieldByFieldComparator(comparatorsForElementPropertyOrFieldNames, getComparatorsForElementPropertyOrFieldTypes()));
return usingExtendedByTypesElementComparator(new FieldByFieldComparator(comparatorsForElementPropertyOrFieldNames, getComparatorsForElementPropertyOrFieldTypes()));
return usingExtendedByTypesElementComparator(new FieldByFieldComparator(comparatorsForElementPropertyOrFieldNames, getComparatorsForElementPropertyOrFieldTypes()));
/** * Use field by field comparison (including inherited fields) instead of relying on actual type A <code>equals</code> * method to compare group elements for incoming assertion checks. * <p/> * This can be handy if <code>equals</code> method of the objects to compare does not suit you. * <p/> * Note that only <b>accessible </b>fields values are compared, accessible fields include directly accessible fields * (e.g. public) or fields with an accessible getter.<br/> * Moreover comparison is <b>not</b> recursive, if one of the field is an Object, it will be compared to the other * field using its <code>equals</code> method. * </p> * Example: * * <pre><code class='java'> * TolkienCharacter frodo = new TolkienCharacter("Frodo", 33, HOBBIT); * TolkienCharacter frodoClone = new TolkienCharacter("Frodo", 33, HOBBIT); * * // Fail if equals has not been overriden in TolkienCharacter as equals default implementation only compares references * assertThat(newArrayList(frodo)).contains(frodoClone); * * // frodo and frodoClone are equals when doing a field by field comparison. * assertThat(newArrayList(frodo)).usingFieldByFieldElementComparator().contains(frodoClone); * </code></pre> * * @return {@code this} assertion object. */ public S usingFieldByFieldElementComparator() { return usingElementComparator(new FieldByFieldComparator()); }
/** * Use field/property by field/property comparison (including inherited fields/properties) instead of relying on * actual type A <code>equals</code> method to compare the {@link Either} value's object for incoming assertion * checks. Private fields are included but this can be disabled using * {@link Assertions#setAllowExtractingPrivateFields(boolean)}. * * @return {@code this} assertion object. */ @CheckReturnValue public SELF usingFieldByFieldValueComparator() { return usingValueComparator(new FieldByFieldComparator()); }
/** * Use field/property by field/property comparison (including inherited fields/properties) instead of relying on * actual type A <code>equals</code> method to compare the {@link Option} value's object for incoming assertion * checks. Private fields are included but this can be disabled using * {@link Assertions#setAllowExtractingPrivateFields(boolean)}. * * @return {@code this} assertion object. */ @CheckReturnValue public SELF usingFieldByFieldValueComparator() { return usingValueComparator(new FieldByFieldComparator()); }