/* * Copyright 2015-2017 the original author or authors. * * All rights reserved. This program and the accompanying materials are * made available under the terms of the Eclipse Public License v1.0 which * accompanies this distribution and is available at * * http://www.eclipse.org/legal/epl-v10.html */ package org.junit.platform.commons.util; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import java.util.LinkedHashMap; import java.util.Map; import org.junit.jupiter.api.Test; /** * Unit tests for {@link ToStringBuilder}. * * @since 1.0 */ class ToStringBuilderTests { @Test void withNullObject() { assertThrows(PreconditionViolationException.class, () -> { new ToStringBuilder((Object) null); }); } @Test void withNullClass() { assertThrows(PreconditionViolationException.class, () -> { new ToStringBuilder((Class<?>) null); }); } @Test void appendWithIllegalName() { ToStringBuilder builder = new ToStringBuilder(""); assertThrows(PreconditionViolationException.class, () -> builder.append(null, "")); assertThrows(PreconditionViolationException.class, () -> builder.append("", "")); assertThrows(PreconditionViolationException.class, () -> builder.append(" ", "")); } @Test void withZeroFields() { assertEquals("RoleModel []", new ToStringBuilder(new RoleModel()).toString()); assertEquals("RoleModel []", new ToStringBuilder(RoleModel.class).toString()); } @Test void withOneField() { assertEquals("RoleModel [name = 'Dilbert']", new ToStringBuilder(new RoleModel()).append("name", "Dilbert").toString()); } @Test void withNullField() { assertEquals("RoleModel [name = null]", new ToStringBuilder(new RoleModel()).append("name", null).toString()); } @Test void withTwoFields() { assertEquals("RoleModel [name = 'Dilbert', age = 42]", new ToStringBuilder(new RoleModel()).append("name", "Dilbert").append("age", 42).toString()); } @Test void withIntegerArrayField() { assertEquals("RoleModel [magic numbers = [1, 42, 99]]", new ToStringBuilder(new RoleModel()).append("magic numbers", new Integer[] { 1, 42, 99 }).toString()); } @Test void withIntArrayField() { assertEquals("RoleModel [magic numbers = [1, 42, 23]]", new ToStringBuilder(new RoleModel()).append("magic numbers", new int[] { 1, 42, 23 }).toString()); } @Test void withCharArrayField() { assertEquals("RoleModel [magic characters = [a, b]]", new ToStringBuilder(new RoleModel()).append("magic characters", new char[] { 'a', 'b' }).toString()); } @Test void withPrimitiveBooleanArrayField() { assertEquals("RoleModel [booleans = [true, false, true]]", new ToStringBuilder(new RoleModel()).append("booleans", new boolean[] { true, false, true }).toString()); } @Test void withShortArrayField() { assertEquals("RoleModel [values = [23, 42]]", new ToStringBuilder(new RoleModel()).append("values", new short[] { 23, 42 }).toString()); } @Test void withByteArrayField() { assertEquals("RoleModel [values = [23, 42]]", new ToStringBuilder(new RoleModel()).append("values", new byte[] { 23, 42 }).toString()); } @Test void withPrimitiveLongArrayField() { assertEquals("RoleModel [values = [23, 42]]", new ToStringBuilder(new RoleModel()).append("values", new long[] { 23, 42 }).toString()); } @Test void withPrimitiveFloatArrayField() { assertEquals("RoleModel [values = [23.45, 17.13]]", new ToStringBuilder(new RoleModel()).append("values", new float[] { 23.45f, 17.13f }).toString()); } @Test void withPrimitiveDoubleArrayField() { assertEquals("RoleModel [values = [23.45, 17.13]]", new ToStringBuilder(new RoleModel()).append("values", new double[] { 23.45d, 17.13d }).toString()); } @Test @SuppressWarnings("serial") void withMapField() { // @formatter:off Map<String,Object> map = new LinkedHashMap<String,Object>() {{ put("foo", 42); put("bar", "enigma"); }}; // @formatter:on assertEquals("RoleModel [mystery map = {foo=42, bar=enigma}]", new ToStringBuilder(new RoleModel()).append("mystery map", map).toString()); } @Test void withDemoImplementation() { RoleModel roleModel = new RoleModel("Dilbert", 42); assertEquals("RoleModel [name = 'Dilbert', age = 42]", roleModel.toString()); } static class RoleModel { String name; int age; RoleModel() { } RoleModel(String name, int age) { super(); this.name = name; this.age = age; } @Override public String toString() { // @formatter:off return new ToStringBuilder(this) .append("name", this.name) .append("age", this.age) .toString(); // @formatter:on } } }