aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org/apache/commons/lang3/builder/MultilineRecursiveToStringStyleTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/org/apache/commons/lang3/builder/MultilineRecursiveToStringStyleTest.java')
-rw-r--r--src/test/java/org/apache/commons/lang3/builder/MultilineRecursiveToStringStyleTest.java310
1 files changed, 310 insertions, 0 deletions
diff --git a/src/test/java/org/apache/commons/lang3/builder/MultilineRecursiveToStringStyleTest.java b/src/test/java/org/apache/commons/lang3/builder/MultilineRecursiveToStringStyleTest.java
new file mode 100644
index 000000000..0353a2fc0
--- /dev/null
+++ b/src/test/java/org/apache/commons/lang3/builder/MultilineRecursiveToStringStyleTest.java
@@ -0,0 +1,310 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.lang3.builder;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang3.AbstractLangTest;
+import org.junit.jupiter.api.Test;
+
+/**
+ */
+public class MultilineRecursiveToStringStyleTest extends AbstractLangTest {
+
+ private static final String LS = System.lineSeparator();
+ private static final String BASE_WITH_ARRAYS_TO_STRING = "[" + LS
+ + " boolArray=#BOOLEAN#," + LS
+ + " byteArray=#BYTE#," + LS
+ + " charArray=#CHAR#," + LS
+ + " doubleArray=#DOUBLE#," + LS
+ + " floatArray=#FLOAT#," + LS
+ + " intArray=#INT#," + LS
+ + " longArray=#LONG#," + LS
+ + " shortArray=#SHORT#," + LS
+ + " stringArray=#STRING#" + LS
+ + "]";
+
+ @Test
+ public void simpleObject() {
+ final Transaction tx = new Transaction("2014.10.15", 100);
+ final String expected = getClassPrefix(tx) + "[" + LS
+ + " amount=100.0," + LS
+ + " date=2014.10.15" + LS
+ + "]";
+ assertEquals(expected, toString(tx));
+ }
+
+ @Test
+ public void nestedElements() {
+ final Customer customer = new Customer("Douglas Adams");
+ final Bank bank = new Bank("ASF Bank");
+ customer.bank = bank;
+ final String exp = getClassPrefix(customer) + "[" + LS
+ + " accounts=<null>," + LS
+ + " bank=" + getClassPrefix(bank) + "[" + LS
+ + " name=ASF Bank" + LS
+ + " ]," + LS
+ + " name=Douglas Adams" + LS
+ + "]";
+ assertEquals(exp, toString(customer));
+ }
+
+ @Test
+ public void nestedAndArray() {
+ final Account acc = new Account();
+ final Transaction tx1 = new Transaction("2014.10.14", 100);
+ final Transaction tx2 = new Transaction("2014.10.15", 50);
+ acc.transactions.add(tx1);
+ acc.transactions.add(tx2);
+ final String expected = getClassPrefix(acc) + "[" + LS
+ + " owner=<null>," + LS
+ + " transactions=" + getClassPrefix(acc.transactions) + "{" + LS
+ + " " + getClassPrefix(tx1) + "[" + LS
+ + " amount=100.0," + LS
+ + " date=2014.10.14" + LS
+ + " ]," + LS
+ + " " + getClassPrefix(tx2) + "[" + LS
+ + " amount=50.0," + LS
+ + " date=2014.10.15" + LS
+ + " ]" + LS
+ + " }" + LS
+ + "]";
+ assertEquals(expected, toString(acc));
+ }
+
+ @Test
+ public void noArray() {
+ final WithArrays wa = new WithArrays();
+ final String exp = getExpectedToString(wa, WithArraysTestType.NONE, "");
+ assertEquals(exp, toString(wa));
+ }
+
+ @Test
+ public void boolArray() {
+ final WithArrays wa = new WithArrays();
+ wa.boolArray = new boolean[] { true, false, true };
+ final String exp = getExpectedToString(
+ wa, WithArraysTestType.BOOLEAN,
+ "{" + LS
+ + " true," + LS
+ + " false," + LS
+ + " true" + LS
+ + " }");
+ assertEquals(exp, toString(wa));
+ }
+
+ @Test
+ public void byteArray() {
+ final WithArrays wa = new WithArrays();
+ wa.byteArray = new byte[] { 1, 2 };
+ final String exp = getExpectedToString(
+ wa, WithArraysTestType.BYTE,
+ "{" + LS
+ + " 1," + LS
+ + " 2" + LS
+ + " }");
+ assertEquals(exp, toString(wa));
+ }
+
+ @Test
+ public void charArray() {
+ final WithArrays wa = new WithArrays();
+ wa.charArray = new char[] { 'a', 'A' };
+ final String exp = getExpectedToString(
+ wa, WithArraysTestType.CHAR,
+ "{" + LS
+ + " a," + LS
+ + " A" + LS
+ + " }");
+ assertEquals(exp, toString(wa));
+ }
+
+ @Test
+ public void intArray() {
+ final WithArrays wa = new WithArrays();
+ wa.intArray = new int[] { 1, 2 };
+ final String exp = getExpectedToString(
+ wa, WithArraysTestType.INT,
+ "{" + LS
+ + " 1," + LS
+ + " 2" + LS
+ + " }");
+ assertEquals(exp, toString(wa));
+ }
+
+ @Test
+ public void doubleArray() {
+ final WithArrays wa = new WithArrays();
+ wa.doubleArray = new double[] { 1, 2 };
+ final String exp = getExpectedToString(
+ wa, WithArraysTestType.DOUBLE,
+ "{" + LS
+ + " 1.0," + LS
+ + " 2.0" + LS
+ + " }");
+ assertEquals(exp, toString(wa));
+ }
+
+ @Test
+ public void floatArray() {
+ final WithArrays wa = new WithArrays();
+ wa.floatArray = new float[] { 1f, 2f };
+ final String exp = getExpectedToString(
+ wa, WithArraysTestType.FLOAT,
+ "{" + LS
+ + " 1.0," + LS
+ + " 2.0" + LS
+ + " }");
+ assertEquals(exp, toString(wa));
+ }
+
+ @Test
+ public void longArray() {
+ final WithArrays wa = new WithArrays();
+ wa.longArray = new long[] { 1L, 2L };
+ final String exp = getExpectedToString(
+ wa, WithArraysTestType.LONG,
+ "{" + LS
+ + " 1," + LS
+ + " 2" + LS
+ + " }");
+ assertEquals(exp, toString(wa));
+ }
+
+ @Test
+ public void stringArray() {
+ final WithArrays wa = new WithArrays();
+ wa.stringArray = new String[] { "a", "A" };
+ final String exp = getExpectedToString(
+ wa, WithArraysTestType.STRING,
+ "{" + LS
+ + " a," + LS
+ + " A" + LS
+ + " }");
+ assertEquals(exp, toString(wa));
+ }
+
+ @Test
+ public void shortArray() {
+ final WithArrays wa = new WithArrays();
+ wa.shortArray = new short[] { 1, 2 };
+ final String exp = getExpectedToString(
+ wa, WithArraysTestType.SHORT,
+ "{" + LS
+ + " 1," + LS
+ + " 2" + LS
+ + " }");
+ assertEquals(exp, toString(wa));
+ }
+
+ @Test
+ public void testLANG1319() {
+ final String[] stringArray = {"1", "2"};
+
+ final String exp = getClassPrefix(stringArray) + "[" + LS
+ + " {" + LS
+ + " 1," + LS
+ + " 2" + LS
+ + " }" + LS
+ + "]";
+ assertEquals(exp, toString(stringArray));
+ }
+
+ private String getClassPrefix(final Object object) {
+ return object.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(object));
+ }
+
+ private String toString(final Object object) {
+ return new ReflectionToStringBuilder(object, new MultilineRecursiveToStringStyle()).toString();
+ }
+
+ static class WithArrays {
+ boolean[] boolArray;
+ byte[] byteArray;
+ char[] charArray;
+ double[] doubleArray;
+ float[] floatArray;
+ int[] intArray;
+ long[] longArray;
+ short[] shortArray;
+ String[] stringArray;
+ }
+
+ /**
+ * Create an expected to String for the given WithArraysInstance
+ * @param wa Instance
+ * @param arrayType Type - empty used to indicate expect all nulls
+ * @param expectedArrayValue Expected value for the array type
+ * @return expected toString
+ */
+ private String getExpectedToString(final WithArrays wa, final WithArraysTestType arrayType, final String expectedArrayValue) {
+ return getClassPrefix(wa)
+ + BASE_WITH_ARRAYS_TO_STRING
+ .replace("#" + arrayType + "#", expectedArrayValue)
+ .replaceAll("#[A-Z]+#", "<null>");
+ }
+
+ private enum WithArraysTestType {
+ NONE, BOOLEAN, BYTE, CHAR, DOUBLE, FLOAT, INT, LONG, SHORT, STRING
+ }
+
+ static class Bank {
+ String name;
+
+ Bank(final String name) {
+ this.name = name;
+ }
+ }
+
+ static class Customer {
+ String name;
+ Bank bank;
+ List<Account> accounts;
+
+ Customer(final String name) {
+ this.name = name;
+ }
+ }
+
+ static class Account {
+ Customer owner;
+ List<Transaction> transactions = new ArrayList<>();
+
+ public double getBalance() {
+ double balance = 0;
+ for (final Transaction tx : transactions) {
+ balance += tx.amount;
+ }
+ return balance;
+ }
+ }
+
+ static class Transaction {
+ double amount;
+ String date;
+
+ Transaction(final String datum, final double betrag) {
+ this.date = datum;
+ this.amount = betrag;
+ }
+ }
+
+}