[LANG-1724] Customise text pattern in DiffResult#toString()
Internal refactoring toward solution
This commit is contained in:
parent
75c6b58777
commit
b1b409ae40
|
@ -70,11 +70,14 @@ import org.apache.commons.lang3.ObjectUtils;
|
|||
*/
|
||||
public class DiffBuilder<T> implements Builder<DiffResult<T>> {
|
||||
|
||||
static final String TO_STRING_FORMAT = "%s differs from %s";
|
||||
|
||||
private final List<Diff<?>> diffs;
|
||||
private final boolean objectsTriviallyEqual;
|
||||
private final T left;
|
||||
private final T right;
|
||||
private final ToStringStyle style;
|
||||
private final String toStringFormat;
|
||||
|
||||
/**
|
||||
* Constructs a builder for the specified objects with the specified style.
|
||||
|
@ -100,10 +103,8 @@ public class DiffBuilder<T> implements Builder<DiffResult<T>> {
|
|||
* @throws NullPointerException
|
||||
* if {@code lhs} or {@code rhs} is {@code null}
|
||||
*/
|
||||
public DiffBuilder(final T lhs, final T rhs,
|
||||
final ToStringStyle style) {
|
||||
|
||||
this(lhs, rhs, style, true);
|
||||
public DiffBuilder(final T lhs, final T rhs, final ToStringStyle style) {
|
||||
this(lhs, rhs, style, true);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -132,17 +133,12 @@ public class DiffBuilder<T> implements Builder<DiffResult<T>> {
|
|||
* if {@code lhs} or {@code rhs} is {@code null}
|
||||
* @since 3.4
|
||||
*/
|
||||
public DiffBuilder(final T lhs, final T rhs,
|
||||
final ToStringStyle style, final boolean testTriviallyEqual) {
|
||||
|
||||
Objects.requireNonNull(lhs, "lhs");
|
||||
Objects.requireNonNull(rhs, "rhs");
|
||||
|
||||
public DiffBuilder(final T lhs, final T rhs, final ToStringStyle style, final boolean testTriviallyEqual) {
|
||||
this.left = Objects.requireNonNull(lhs, "lhs");
|
||||
this.right = Objects.requireNonNull(rhs, "rhs");
|
||||
this.diffs = new ArrayList<>();
|
||||
this.left = lhs;
|
||||
this.right = rhs;
|
||||
this.style = style;
|
||||
|
||||
this.toStringFormat = DiffBuilder.TO_STRING_FORMAT;
|
||||
this.style = style != null ? style : ToStringStyle.DEFAULT_STYLE;
|
||||
// Don't compare any fields if objects equal
|
||||
this.objectsTriviallyEqual = testTriviallyEqual && Objects.equals(lhs, rhs);
|
||||
}
|
||||
|
@ -160,8 +156,7 @@ public class DiffBuilder<T> implements Builder<DiffResult<T>> {
|
|||
* @throws NullPointerException
|
||||
* if field name is {@code null}
|
||||
*/
|
||||
public DiffBuilder<T> append(final String fieldName, final boolean lhs,
|
||||
final boolean rhs) {
|
||||
public DiffBuilder<T> append(final String fieldName, final boolean lhs, final boolean rhs) {
|
||||
validateFieldNameNotNull(fieldName);
|
||||
|
||||
if (objectsTriviallyEqual) {
|
||||
|
@ -198,8 +193,7 @@ public class DiffBuilder<T> implements Builder<DiffResult<T>> {
|
|||
* @throws NullPointerException
|
||||
* if field name is {@code null}
|
||||
*/
|
||||
public DiffBuilder<T> append(final String fieldName, final boolean[] lhs,
|
||||
final boolean[] rhs) {
|
||||
public DiffBuilder<T> append(final String fieldName, final boolean[] lhs, final boolean[] rhs) {
|
||||
validateFieldNameNotNull(fieldName);
|
||||
if (objectsTriviallyEqual) {
|
||||
return this;
|
||||
|
@ -235,8 +229,7 @@ public class DiffBuilder<T> implements Builder<DiffResult<T>> {
|
|||
* @throws NullPointerException
|
||||
* if field name is {@code null}
|
||||
*/
|
||||
public DiffBuilder<T> append(final String fieldName, final byte lhs,
|
||||
final byte rhs) {
|
||||
public DiffBuilder<T> append(final String fieldName, final byte lhs, final byte rhs) {
|
||||
validateFieldNameNotNull(fieldName);
|
||||
if (objectsTriviallyEqual) {
|
||||
return this;
|
||||
|
@ -272,8 +265,7 @@ public class DiffBuilder<T> implements Builder<DiffResult<T>> {
|
|||
* @throws NullPointerException
|
||||
* if field name is {@code null}
|
||||
*/
|
||||
public DiffBuilder<T> append(final String fieldName, final byte[] lhs,
|
||||
final byte[] rhs) {
|
||||
public DiffBuilder<T> append(final String fieldName, final byte[] lhs, final byte[] rhs) {
|
||||
validateFieldNameNotNull(fieldName);
|
||||
|
||||
if (objectsTriviallyEqual) {
|
||||
|
@ -310,8 +302,7 @@ public class DiffBuilder<T> implements Builder<DiffResult<T>> {
|
|||
* @throws NullPointerException
|
||||
* if field name is {@code null}
|
||||
*/
|
||||
public DiffBuilder<T> append(final String fieldName, final char lhs,
|
||||
final char rhs) {
|
||||
public DiffBuilder<T> append(final String fieldName, final char lhs, final char rhs) {
|
||||
validateFieldNameNotNull(fieldName);
|
||||
|
||||
if (objectsTriviallyEqual) {
|
||||
|
@ -348,8 +339,7 @@ public class DiffBuilder<T> implements Builder<DiffResult<T>> {
|
|||
* @throws NullPointerException
|
||||
* if field name is {@code null}
|
||||
*/
|
||||
public DiffBuilder<T> append(final String fieldName, final char[] lhs,
|
||||
final char[] rhs) {
|
||||
public DiffBuilder<T> append(final String fieldName, final char[] lhs, final char[] rhs) {
|
||||
validateFieldNameNotNull(fieldName);
|
||||
|
||||
if (objectsTriviallyEqual) {
|
||||
|
@ -429,8 +419,7 @@ public class DiffBuilder<T> implements Builder<DiffResult<T>> {
|
|||
* @throws NullPointerException
|
||||
* if field name is {@code null}
|
||||
*/
|
||||
public DiffBuilder<T> append(final String fieldName, final double lhs,
|
||||
final double rhs) {
|
||||
public DiffBuilder<T> append(final String fieldName, final double lhs, final double rhs) {
|
||||
validateFieldNameNotNull(fieldName);
|
||||
|
||||
if (objectsTriviallyEqual) {
|
||||
|
@ -467,8 +456,7 @@ public class DiffBuilder<T> implements Builder<DiffResult<T>> {
|
|||
* @throws NullPointerException
|
||||
* if field name is {@code null}
|
||||
*/
|
||||
public DiffBuilder<T> append(final String fieldName, final double[] lhs,
|
||||
final double[] rhs) {
|
||||
public DiffBuilder<T> append(final String fieldName, final double[] lhs, final double[] rhs) {
|
||||
validateFieldNameNotNull(fieldName);
|
||||
|
||||
if (objectsTriviallyEqual) {
|
||||
|
@ -543,8 +531,7 @@ public class DiffBuilder<T> implements Builder<DiffResult<T>> {
|
|||
* @throws NullPointerException
|
||||
* if field name is {@code null}
|
||||
*/
|
||||
public DiffBuilder<T> append(final String fieldName, final float[] lhs,
|
||||
final float[] rhs) {
|
||||
public DiffBuilder<T> append(final String fieldName, final float[] lhs, final float[] rhs) {
|
||||
validateFieldNameNotNull(fieldName);
|
||||
|
||||
if (objectsTriviallyEqual) {
|
||||
|
@ -581,8 +568,7 @@ public class DiffBuilder<T> implements Builder<DiffResult<T>> {
|
|||
* @throws NullPointerException
|
||||
* if field name is {@code null}
|
||||
*/
|
||||
public DiffBuilder<T> append(final String fieldName, final int lhs,
|
||||
final int rhs) {
|
||||
public DiffBuilder<T> append(final String fieldName, final int lhs, final int rhs) {
|
||||
validateFieldNameNotNull(fieldName);
|
||||
|
||||
if (objectsTriviallyEqual) {
|
||||
|
@ -619,8 +605,7 @@ public class DiffBuilder<T> implements Builder<DiffResult<T>> {
|
|||
* @throws NullPointerException
|
||||
* if field name is {@code null}
|
||||
*/
|
||||
public DiffBuilder<T> append(final String fieldName, final int[] lhs,
|
||||
final int[] rhs) {
|
||||
public DiffBuilder<T> append(final String fieldName, final int[] lhs, final int[] rhs) {
|
||||
validateFieldNameNotNull(fieldName);
|
||||
|
||||
if (objectsTriviallyEqual) {
|
||||
|
@ -657,8 +642,7 @@ public class DiffBuilder<T> implements Builder<DiffResult<T>> {
|
|||
* @throws NullPointerException
|
||||
* if field name is {@code null}
|
||||
*/
|
||||
public DiffBuilder<T> append(final String fieldName, final long lhs,
|
||||
final long rhs) {
|
||||
public DiffBuilder<T> append(final String fieldName, final long lhs, final long rhs) {
|
||||
validateFieldNameNotNull(fieldName);
|
||||
|
||||
if (objectsTriviallyEqual) {
|
||||
|
@ -695,8 +679,7 @@ public class DiffBuilder<T> implements Builder<DiffResult<T>> {
|
|||
* @throws NullPointerException
|
||||
* if field name is {@code null}
|
||||
*/
|
||||
public DiffBuilder<T> append(final String fieldName, final long[] lhs,
|
||||
final long[] rhs) {
|
||||
public DiffBuilder<T> append(final String fieldName, final long[] lhs, final long[] rhs) {
|
||||
validateFieldNameNotNull(fieldName);
|
||||
|
||||
if (objectsTriviallyEqual) {
|
||||
|
@ -733,8 +716,7 @@ public class DiffBuilder<T> implements Builder<DiffResult<T>> {
|
|||
* @throws NullPointerException
|
||||
* if field name is {@code null}
|
||||
*/
|
||||
public DiffBuilder<T> append(final String fieldName, final Object lhs,
|
||||
final Object rhs) {
|
||||
public DiffBuilder<T> append(final String fieldName, final Object lhs, final Object rhs) {
|
||||
validateFieldNameNotNull(fieldName);
|
||||
if (objectsTriviallyEqual) {
|
||||
return this;
|
||||
|
@ -815,8 +797,7 @@ public class DiffBuilder<T> implements Builder<DiffResult<T>> {
|
|||
* @throws NullPointerException
|
||||
* if field name is {@code null}
|
||||
*/
|
||||
public DiffBuilder<T> append(final String fieldName, final Object[] lhs,
|
||||
final Object[] rhs) {
|
||||
public DiffBuilder<T> append(final String fieldName, final Object[] lhs, final Object[] rhs) {
|
||||
validateFieldNameNotNull(fieldName);
|
||||
if (objectsTriviallyEqual) {
|
||||
return this;
|
||||
|
@ -854,8 +835,7 @@ public class DiffBuilder<T> implements Builder<DiffResult<T>> {
|
|||
* @throws NullPointerException
|
||||
* if field name is {@code null}
|
||||
*/
|
||||
public DiffBuilder<T> append(final String fieldName, final short lhs,
|
||||
final short rhs) {
|
||||
public DiffBuilder<T> append(final String fieldName, final short lhs, final short rhs) {
|
||||
validateFieldNameNotNull(fieldName);
|
||||
|
||||
if (objectsTriviallyEqual) {
|
||||
|
@ -892,8 +872,7 @@ public class DiffBuilder<T> implements Builder<DiffResult<T>> {
|
|||
* @throws NullPointerException
|
||||
* if field name is {@code null}
|
||||
*/
|
||||
public DiffBuilder<T> append(final String fieldName, final short[] lhs,
|
||||
final short[] rhs) {
|
||||
public DiffBuilder<T> append(final String fieldName, final short[] lhs, final short[] rhs) {
|
||||
validateFieldNameNotNull(fieldName);
|
||||
|
||||
if (objectsTriviallyEqual) {
|
||||
|
@ -926,7 +905,7 @@ public class DiffBuilder<T> implements Builder<DiffResult<T>> {
|
|||
*/
|
||||
@Override
|
||||
public DiffResult<T> build() {
|
||||
return new DiffResult<>(left, right, diffs, style);
|
||||
return new DiffResult<>(left, right, diffs, style, toStringFormat);
|
||||
}
|
||||
|
||||
private void validateFieldNameNotNull(final String fieldName) {
|
||||
|
|
|
@ -44,12 +44,11 @@ public class DiffResult<T> implements Iterable<Diff<?>> {
|
|||
*/
|
||||
public static final String OBJECTS_SAME_STRING = StringUtils.EMPTY;
|
||||
|
||||
private static final String DIFFERS_STRING = "differs from";
|
||||
|
||||
private final List<Diff<?>> diffList;
|
||||
private final T lhs;
|
||||
private final T rhs;
|
||||
private final ToStringStyle style;
|
||||
private final String toStringFormat;
|
||||
|
||||
/**
|
||||
* Creates a {@link DiffResult} containing the differences between two
|
||||
|
@ -65,23 +64,16 @@ public class DiffResult<T> implements Iterable<Diff<?>> {
|
|||
* the style to use for the {@link #toString()} method. May be
|
||||
* {@code null}, in which case
|
||||
* {@link ToStringStyle#DEFAULT_STYLE} is used
|
||||
* @throws NullPointerException if {@code lhs}, {@code rhs} or {@code diffs} is {@code null}
|
||||
* @param toStringFormat
|
||||
* Two-argument format string for {@link String#format(String, Object...)}, for example {@code "%s differs from %s"}.
|
||||
* @throws NullPointerException if {@code lhs}, {@code rhs} or {@code diffs} are {@code null}.
|
||||
*/
|
||||
DiffResult(final T lhs, final T rhs, final List<Diff<?>> diffList,
|
||||
final ToStringStyle style) {
|
||||
Objects.requireNonNull(lhs, "lhs");
|
||||
Objects.requireNonNull(rhs, "rhs");
|
||||
Objects.requireNonNull(diffList, "diffList");
|
||||
|
||||
this.diffList = diffList;
|
||||
this.lhs = lhs;
|
||||
this.rhs = rhs;
|
||||
|
||||
if (style == null) {
|
||||
this.style = ToStringStyle.DEFAULT_STYLE;
|
||||
} else {
|
||||
this.style = style;
|
||||
}
|
||||
DiffResult(final T lhs, final T rhs, final List<Diff<?>> diffList, final ToStringStyle style, final String toStringFormat) {
|
||||
this.diffList = Objects.requireNonNull(diffList, "diffList");
|
||||
this.lhs = Objects.requireNonNull(lhs, "lhs");
|
||||
this.rhs = Objects.requireNonNull(rhs, "rhs");
|
||||
this.style = Objects.requireNonNull(style, "style");
|
||||
this.toStringFormat = Objects.requireNonNull(toStringFormat, "toStringFormat");
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -198,6 +190,6 @@ public class DiffResult<T> implements Iterable<Diff<?>> {
|
|||
rhsBuilder.append(diff.getFieldName(), diff.getRight());
|
||||
});
|
||||
|
||||
return String.format("%s %s %s", lhsBuilder.build(), DIFFERS_STRING, rhsBuilder.build());
|
||||
return String.format(toStringFormat, lhsBuilder.build(), rhsBuilder.build());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -52,11 +52,18 @@ public class DiffResultTest extends AbstractLangTest {
|
|||
.build();
|
||||
}
|
||||
}
|
||||
private static final ToStringStyle SHORT_STYLE = ToStringStyle.SHORT_PREFIX_STYLE;
|
||||
|
||||
private static final SimpleClass SIMPLE_FALSE = new SimpleClass(false);
|
||||
|
||||
private static final SimpleClass SIMPLE_TRUE = new SimpleClass(true);
|
||||
|
||||
private static final ToStringStyle SHORT_STYLE = ToStringStyle.SHORT_PREFIX_STYLE;
|
||||
@Test
|
||||
public void testDefaultStyle() {
|
||||
final DiffResult<SimpleClass> diffResult = new DiffResult<>(SIMPLE_TRUE, SIMPLE_FALSE, SIMPLE_TRUE.diff(SIMPLE_FALSE).getDiffs(),
|
||||
ToStringStyle.DEFAULT_STYLE, DiffBuilder.TO_STRING_FORMAT);
|
||||
assertEquals(ToStringStyle.DEFAULT_STYLE, diffResult.getToStringStyle());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIterator() {
|
||||
|
@ -66,7 +73,7 @@ public class DiffResultTest extends AbstractLangTest {
|
|||
final List<Diff<?>> diffs = lhs.diff(rhs).getDiffs();
|
||||
final Iterator<Diff<?>> expectedIterator = diffs.iterator();
|
||||
|
||||
final DiffResult<SimpleClass> list = new DiffResult<>(lhs, rhs, diffs, SHORT_STYLE);
|
||||
final DiffResult<SimpleClass> list = new DiffResult<>(lhs, rhs, diffs, SHORT_STYLE, DiffBuilder.TO_STRING_FORMAT);
|
||||
final Iterator<Diff<?>> iterator = list.iterator();
|
||||
|
||||
while (iterator.hasNext()) {
|
||||
|
@ -81,7 +88,7 @@ public class DiffResultTest extends AbstractLangTest {
|
|||
final SimpleClass right = new SimpleClass(false);
|
||||
|
||||
final List<Diff<?>> diffs = left.diff(right).getDiffs();
|
||||
final DiffResult diffResult = new DiffResult(left, right, diffs, SHORT_STYLE);
|
||||
final DiffResult diffResult = new DiffResult(left, right, diffs, SHORT_STYLE, DiffBuilder.TO_STRING_FORMAT);
|
||||
|
||||
assertEquals(left, diffResult.getLeft());
|
||||
assertEquals(right, diffResult.getRight());
|
||||
|
@ -94,7 +101,7 @@ public class DiffResultTest extends AbstractLangTest {
|
|||
|
||||
final List<Diff<?>> diffs = lhs.diff(rhs).getDiffs();
|
||||
|
||||
final DiffResult<SimpleClass> list = new DiffResult<>(lhs, rhs, diffs, SHORT_STYLE);
|
||||
final DiffResult<SimpleClass> list = new DiffResult<>(lhs, rhs, diffs, SHORT_STYLE, DiffBuilder.TO_STRING_FORMAT);
|
||||
assertEquals(diffs, list.getDiffs());
|
||||
assertEquals(1, list.getNumberOfDiffs());
|
||||
assertThrows(UnsupportedOperationException.class, () -> list.getDiffs().remove(0));
|
||||
|
@ -110,26 +117,19 @@ public class DiffResultTest extends AbstractLangTest {
|
|||
@Test
|
||||
public void testNullLhs() {
|
||||
assertThrows(NullPointerException.class,
|
||||
() -> new DiffResult<>(null, SIMPLE_FALSE, SIMPLE_TRUE.diff(SIMPLE_FALSE).getDiffs(), SHORT_STYLE));
|
||||
() -> new DiffResult<>(null, SIMPLE_FALSE, SIMPLE_TRUE.diff(SIMPLE_FALSE).getDiffs(), SHORT_STYLE, DiffBuilder.TO_STRING_FORMAT));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNullList() {
|
||||
assertThrows(NullPointerException.class,
|
||||
() -> new DiffResult<>(SIMPLE_TRUE, SIMPLE_FALSE, null, SHORT_STYLE));
|
||||
() -> new DiffResult<>(SIMPLE_TRUE, SIMPLE_FALSE, null, SHORT_STYLE, null));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNullRhs() {
|
||||
assertThrows(NullPointerException.class,
|
||||
() -> new DiffResult<>(SIMPLE_TRUE, null, SIMPLE_TRUE.diff(SIMPLE_FALSE).getDiffs(), SHORT_STYLE));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNullStyle() {
|
||||
final DiffResult<SimpleClass> diffResult = new DiffResult<>(SIMPLE_TRUE, SIMPLE_FALSE, SIMPLE_TRUE
|
||||
.diff(SIMPLE_FALSE).getDiffs(), null);
|
||||
assertEquals(ToStringStyle.DEFAULT_STYLE, diffResult.getToStringStyle());
|
||||
() -> new DiffResult<>(SIMPLE_TRUE, null, SIMPLE_TRUE.diff(SIMPLE_FALSE).getDiffs(), SHORT_STYLE, DiffBuilder.TO_STRING_FORMAT));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
Loading…
Reference in New Issue