package org.ovirt.engine.core.common.utils; import static org.junit.Assert.assertEquals; import java.math.BigDecimal; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.Map; import org.junit.Test; public class ToStringBuilderTest { /** * If no class and attributes were specified, then empty string should be returned */ @Test public void testEmptyForClass() { assertEquals( "", ToStringBuilder.forClass(null).build()); } /** * If class without attributes was specified, then class name with empty attributes list should be returned */ @Test public void testClassOnlyOutput() { String expected = getClass().getSimpleName() + ToStringBuilder.CLASS_NAME_SUFFIX + ToStringBuilder.ATTRIBUTES_LIST_PREFIX + ToStringBuilder.ATTRIBUTES_LIST_SUFFIX; assertEquals( expected, ToStringBuilder.forClass(ToStringBuilderTest.class).build()); } /** * If no instance and attributes were specified, then empty string should be returned */ @Test public void testEmptyForInstance() { assertEquals( "", ToStringBuilder.forInstance(null).build()); } /** * If instance without attributes was specified, then class name with empty attributes list should be returned */ @Test public void testInstanceOnlyOutput() { String expected = getClass().getSimpleName() + ToStringBuilder.CLASS_NAME_SUFFIX + ToStringBuilder.ATTRIBUTES_LIST_PREFIX + ToStringBuilder.ATTRIBUTES_LIST_SUFFIX; assertEquals( expected, ToStringBuilder.forInstance(this).build()); } /** * If attributes without class/instance were specified, then attributes list should be returned */ @Test public void testAttributeOnlyOutput() { String attributeName = "attr1"; int attributeValue = 100; String expected = ToStringBuilder.ATTRIBUTES_LIST_PREFIX + createFirstAttributeOutput(attributeName, String.valueOf(attributeValue)) + ToStringBuilder.ATTRIBUTES_LIST_SUFFIX; assertEquals( expected, ToStringBuilder.forInstance(null) .append(attributeName, attributeValue) .build()); } /** * Tests valid output for all attribute types */ @Test public void testAttributesConversion() { final String booleanName = "booleanAttr"; final boolean booleanValue = true; final String booleanArrayName = "booleanArrayAttr"; final boolean[] booleanArrayValue = {true, false}; final String byteName = "byteAttr"; final byte byteValue = 1; final String byteArrayName = "byteArrayAttr"; final byte[] byteArrayValue = {2, 3}; final String charName = "charAttr"; final char charValue = 'a'; final String charArrayName = "charArrayAttr"; final char[] charArrayValue = {'b', 'c'}; final String doubleName = "doubleAttr"; final double doubleValue = 0.1d; final String doubleArrayName = "doubleArrayAttr"; final double[] doubleArrayValue = {0.2d, 0.3d}; final String floatName = "floatAttr"; final float floatValue = 0.5f; final String floatArrayName = "floatArrayAttr"; final float[] floatArrayValue = {0.6f, 0.7f}; final String intName = "intAttr"; final int intValue = 100; final String intArrayName = "intArrayAttr"; final int[] intArrayValue = {110, 120}; final String longName = "longAttr"; final long longValue = 1000L; final String longArrayName = "longArrayAttr"; final long[] longArrayValue = {1001L, 1002L}; final String objectName = "objectAttr"; final Object objectValue = new BigDecimal("123.45"); final String objectArrayName = "objectArrayAttr"; final Object[] objectArrayValue = {new BigDecimal("56.7"), new Date()}; final String shortName = "shortAttr"; final short shortValue = 10; final String shortArrayName = "shortArrayAttr"; final short[] shortArrayValue = {11, 12}; final String passwordName = "password"; final String passwordValue = "qwerty"; final String nullPasswordName = "nullPassword"; final String nullPasswordValue = null; final String nullName = null; final String nullValue = null; final String nullArrayName = "nullArray"; final Object[] nullArrayValue = null; final String nullCollectionName = "nullCollection"; final Collection<Object> nullCollectionValue = null; final String emptyCollectionName = "emptyCollection"; final Collection<Object> emptyCollectionValue = Collections.emptyList(); final String collectionName = "collection"; final Collection<String> collectionValue = Arrays.asList("item1", "item2"); final String nullMapName = "nullMap"; final Map<Object, Object> nullMapValue = null; final String emptyMapName = "emptyMap"; final Map<Object, Object> emptyMapValue = Collections.emptyMap(); final String mapName = "map"; final Map<String, String> mapValue = new HashMap<>(); mapValue.put("key1", "value1"); mapValue.put("key2", "value2"); String expected = ToStringBuilder.ATTRIBUTES_LIST_PREFIX + createFirstAttributeOutput(booleanName, String.valueOf(booleanValue)) + createAttributeOutput(booleanArrayName, Arrays.toString(booleanArrayValue)) + createAttributeOutput(byteName, String.valueOf(byteValue)) + createAttributeOutput(byteArrayName, Arrays.toString(byteArrayValue)) + createAttributeOutput(charName, String.valueOf(charValue)) + createAttributeOutput(charArrayName, Arrays.toString(charArrayValue)) + createAttributeOutput(doubleName, String.valueOf(doubleValue)) + createAttributeOutput(doubleArrayName, Arrays.toString(doubleArrayValue)) + createAttributeOutput(floatName, String.valueOf(floatValue)) + createAttributeOutput(floatArrayName, Arrays.toString(floatArrayValue)) + createAttributeOutput(intName, String.valueOf(intValue)) + createAttributeOutput(intArrayName, Arrays.toString(intArrayValue)) + createAttributeOutput(longName, String.valueOf(longValue)) + createAttributeOutput(longArrayName, Arrays.toString(longArrayValue)) + createAttributeOutput(objectName, String.valueOf(objectValue)) + createAttributeOutput(objectArrayName, Arrays.toString(objectArrayValue)) + createAttributeOutput(shortName, String.valueOf(shortValue)) + createAttributeOutput(shortArrayName, Arrays.toString(shortArrayValue)) + createAttributeOutput(nullName, String.valueOf(nullValue)) + createAttributeOutput(nullArrayName, Arrays.toString(nullArrayValue)) + createAttributeOutput(passwordName, ToStringBuilder.FILTERED_CONTENT) + createAttributeOutput(nullPasswordName, nullPasswordValue) + createAttributeOutput(nullCollectionName, null) + createAttributeOutput(emptyCollectionName, Arrays.toString(emptyCollectionValue.toArray())) + createAttributeOutput(collectionName, Arrays.toString(collectionValue.toArray())) + createAttributeOutput(nullMapName, null) + createAttributeOutput(emptyMapName, Arrays.toString(emptyMapValue.entrySet().toArray())) + createAttributeOutput(mapName, Arrays.toString(mapValue.entrySet().toArray())) + ToStringBuilder.ATTRIBUTES_LIST_SUFFIX; assertEquals( expected, ToStringBuilder.forInstance(null) .append(booleanName, booleanValue) .append(booleanArrayName, booleanArrayValue) .append(byteName, byteValue) .append(byteArrayName, byteArrayValue) .append(charName, charValue) .append(charArrayName, charArrayValue) .append(doubleName, doubleValue) .append(doubleArrayName, doubleArrayValue) .append(floatName, floatValue) .append(floatArrayName, floatArrayValue) .append(intName, intValue) .append(intArrayName, intArrayValue) .append(longName, longValue) .append(longArrayName, longArrayValue) .append(objectName, objectValue) .append(objectArrayName, objectArrayValue) .append(shortName, shortValue) .append(shortArrayName, shortArrayValue) .append(nullName, nullValue) .append(nullArrayName, nullArrayValue) .appendFiltered(passwordName, passwordValue) .appendFiltered(nullPasswordName, nullPasswordValue) .append(nullCollectionName, nullCollectionValue) .append(emptyCollectionName, emptyCollectionValue) .append(collectionName, collectionValue) .append(nullMapName, nullMapValue) .append(emptyMapName, emptyMapValue) .append(mapName, mapValue) .build()); } private String createAttributeOutput(String name, String value) { return ToStringBuilder.ATTRIBUTES_SEPARATOR + createFirstAttributeOutput(name, value); } private String createFirstAttributeOutput(String name, String value) { return name + ToStringBuilder.NAME_VALUE_SEPARATOR + value + ToStringBuilder.VALUE_SUFFIX; } }