Skip to content

Commit

Permalink
Support lazy message building in Assertions
Browse files Browse the repository at this point in the history
  • Loading branch information
sbrannen committed Oct 25, 2015
1 parent 8bdce2d commit 405c6f1
Show file tree
Hide file tree
Showing 2 changed files with 117 additions and 81 deletions.
190 changes: 113 additions & 77 deletions junit-core/src/main/java/org/junit/core/Assertions.java
@@ -1,9 +1,16 @@

package org.junit.core;

import java.util.function.Supplier;

import org.junit.core.util.ObjectUtils;
import org.opentestalliance.AssertionFailedException;

/**
* @author JUnit Community
* @author Sam Brannen
* @since 5.0
*/
public final class Assertions {

private Assertions() {
Expand All @@ -17,96 +24,138 @@ public static void fail(String message) {
throw new AssertionFailedException(message);
}

public static void fail(Supplier<String> messageSupplier) {
fail(nullSafeGet(messageSupplier));
}

public static void assertTrue(boolean condition) {
assertTrue(null, condition);
assertTrue(condition, (String) null);
}

public static void assertTrue(String message, boolean condition) {
public static void assertTrue(boolean condition, String message) {
if (!condition) {
fail(message);
}
}

public static void assertTrue(boolean condition, Supplier<String> messageSupplier) {
if (!condition) {
fail(messageSupplier);
}
}

public static void assertFalse(boolean condition) {
assertFalse(null, condition);
assertFalse(condition, (String) null);
}

public static void assertFalse(String message, boolean condition) {
public static void assertFalse(boolean condition, String message) {
if (condition) {
fail(message);
}
}

public static void assertEqual(Object expected, Object actual) {
assertEqual(null, expected, actual);
public static void assertFalse(boolean condition, Supplier<String> messageSupplier) {
if (condition) {
fail(messageSupplier);
}
}

public static void assertEqual(String message, Object expected, Object actual) {
if (!ObjectUtils.nullSafeEquals(expected, actual)) {
failNotEqual(message, expected, actual);
}
public static void assertNull(Object actual) {
assertNull(actual, (String) null);
}

public static void assertNotEqual(Object unexpected, Object actual) {
assertNotEqual(null, unexpected, actual);
public static void assertNull(Object actual, String message) {
if (actual != null) {
failNotNull(actual, message);
}
}

public static void assertNotEqual(String message, Object unexpected, Object actual) {
if (ObjectUtils.nullSafeEquals(unexpected, actual)) {
failEqual(message, actual);
public static void assertNull(Object actual, Supplier<String> messageSupplier) {
if (actual != null) {
failNotNull(actual, nullSafeGet(messageSupplier));
}
}

public static void assertEqual(long expected, long actual) {
assertEqual(null, expected, actual);
public static void assertNotNull(Object actual) {
assertNotNull(actual, (String) null);
}

public static void assertEqual(String message, long expected, long actual) {
if (expected != actual) {
failNotEqual(message, Long.valueOf(expected), Long.valueOf(actual));
public static void assertNotNull(Object actual, String message) {
if (actual == null) {
failNull(message);
}
}

public static void assertNull(Object object) {
assertNull(null, object);
public static void assertNotNull(Object actual, Supplier<String> messageSupplier) {
if (actual == null) {
failNull(nullSafeGet(messageSupplier));
}
}

public static void assertNull(String message, Object object) {
if (object != null) {
failNotNull(message, object);
public static void assertEqual(Object expected, Object actual) {
assertEqual(expected, actual, (String) null);
}

public static void assertEqual(Object expected, Object actual, String message) {
if (!ObjectUtils.nullSafeEquals(expected, actual)) {
failNotEqual(expected, actual, message);
}
}

public static void assertNotNull(Object object) {
assertNotNull(null, object);
public static void assertEqual(Object expected, Object actual, Supplier<String> messageSupplier) {
if (!ObjectUtils.nullSafeEquals(expected, actual)) {
failNotEqual(expected, actual, nullSafeGet(messageSupplier));
}
}

public static void assertNotNull(String message, Object object) {
if (object == null) {
failNull(message);
public static void assertNotEqual(Object unexpected, Object actual) {
assertNotEqual(unexpected, actual, (String) null);
}

public static void assertNotEqual(Object unexpected, Object actual, String message) {
if (ObjectUtils.nullSafeEquals(unexpected, actual)) {
failEqual(actual, message);
}
}

public static void assertNotEqual(Object unexpected, Object actual, Supplier<String> messageSupplier) {
if (ObjectUtils.nullSafeEquals(unexpected, actual)) {
failEqual(actual, nullSafeGet(messageSupplier));
}
}

public static void assertSame(Object expected, Object actual) {
assertSame(null, expected, actual);
assertSame(expected, actual, (String) null);
}

public static void assertSame(String message, Object expected, Object actual) {
public static void assertSame(Object expected, Object actual, String message) {
if (expected != actual) {
failNotSame(message, expected, actual);
failNotSame(expected, actual, message);
}
}

public static void assertSame(Object expected, Object actual, Supplier<String> messageSupplier) {
if (expected != actual) {
failNotSame(expected, actual, nullSafeGet(messageSupplier));
}
}

public static void assertNotSame(Object unexpected, Object actual) {
assertNotSame(null, unexpected, actual);
assertNotSame(unexpected, actual, (String) null);
}

public static void assertNotSame(String message, Object unexpected, Object actual) {
public static void assertNotSame(Object unexpected, Object actual, String message) {
if (unexpected == actual) {
failSame(message);
}
}

public static void assertNotSame(Object unexpected, Object actual, Supplier<String> messageSupplier) {
if (unexpected == actual) {
failSame(nullSafeGet(messageSupplier));
}
}

public static void assertThrows(Class<? extends Throwable> expected, Executable executable) {
expectThrows(expected, executable);
}
Expand All @@ -121,74 +170,53 @@ public static <T extends Throwable> T expectThrows(Class<T> expected, Executable
return (T) actual;
}
else {
String message = Assertions.format("unexpected exception type thrown;", expected.getSimpleName(),
actual.getClass().getSimpleName());
String message = Assertions.format(expected.getName(), actual.getClass().getName(),
"unexpected exception type thrown;");
throw new AssertionFailedException(message, actual);
}
}
String message = String.format("expected %s to be thrown, but nothing was thrown", expected.getSimpleName());
throw new AssertionFailedException(message);
throw new AssertionFailedException(
String.format("expected %s to be thrown, but nothing was thrown", expected.getName()));
}

private static void failEqual(String message, Object actual) {
String formatted = "Values should be different. ";
if (message != null) {
formatted = message + ". ";
private static void failEqual(Object actual, String message) {
String prefix = "Values should be different. ";
if (message != null && !message.isEmpty()) {
prefix = message + ". ";
}

formatted += "Actual: " + actual;
fail(formatted);
fail(prefix + "Actual: " + actual);
}

private static void failNull(String message) {
String formatted = "";
if (message != null) {
formatted = message + " ";
}
fail(formatted + "expected not null");
fail(buildPrefix(message) + "expected not null");
}

private static void failNotNull(String message, Object actual) {
String formatted = "";
if (message != null) {
formatted = message + " ";
}
fail(formatted + "expected null, but was:<" + actual + ">");
private static void failNotNull(Object actual, String message) {
fail(buildPrefix(message) + "expected null, but was:<" + actual + ">");
}

private static void failSame(String message) {
String formatted = "";
if (message != null) {
formatted = message + " ";
}
fail(formatted + "expected not same");
fail(buildPrefix(message) + "expected not same");
}

private static void failNotSame(String message, Object expected, Object actual) {
String formatted = "";
if (message != null) {
formatted = message + " ";
}
fail(formatted + "expected same:<" + expected + "> was not:<" + actual + ">");
private static void failNotSame(Object expected, Object actual, String message) {
fail(buildPrefix(message) + "expected same:<" + expected + "> was not:<" + actual + ">");
}

private static void failNotEqual(String message, Object expected, Object actual) {
fail(format(message, expected, actual));
private static void failNotEqual(Object expected, Object actual, String message) {
fail(format(expected, actual, message));
}

private static String format(String message, Object expected, Object actual) {
String formatted = "";
if (message != null && !message.equals("")) {
formatted = message + " ";
}
private static String format(Object expected, Object actual, String message) {
String prefix = buildPrefix(message);
String expectedString = String.valueOf(expected);
String actualString = String.valueOf(actual);
if (expectedString.equals(actualString)) {
return formatted + "expected: " + formatClassAndValue(expected, expectedString) + " but was: "
return prefix + "expected: " + formatClassAndValue(expected, expectedString) + " but was: "
+ formatClassAndValue(actual, actualString);
}
else {
return formatted + "expected:<" + expectedString + "> but was:<" + actualString + ">";
return prefix + "expected:<" + expectedString + "> but was:<" + actualString + ">";
}
}

Expand All @@ -197,4 +225,12 @@ private static String formatClassAndValue(Object value, String valueString) {
return className + "<" + valueString + ">";
}

private static String buildPrefix(String message) {
return (message != null && !message.isEmpty() ? message + " ==> " : "");
}

private static String nullSafeGet(Supplier<String> messageSupplier) {
return (messageSupplier != null ? messageSupplier.get() : null);
}

}
Expand Up @@ -50,14 +50,14 @@ private static void constructor() throws Exception {

private static void from() throws Exception {
JavaTestDescriptor descriptor = JavaTestDescriptor.from(TEST_METHOD_UID);
assertNotNull("descriptor:", descriptor);
assertEqual("display name:", "test", descriptor.getDisplayName());
assertNotNull(descriptor, "descriptor:");
assertEqual("test", descriptor.getDisplayName(), "display name:");
assertEqual(JavaTestDescriptorTestCase.class, descriptor.getTestClass());
assertEqual(JavaTestDescriptorTestCase.class.getDeclaredMethod("test"), descriptor.getTestMethod());

descriptor = JavaTestDescriptor.from(TEST_METHOD_STRING_BIGDECIMAL_UID);
assertNotNull("descriptor:", descriptor);
assertEqual("display name:", "test", descriptor.getDisplayName());
assertNotNull(descriptor, "descriptor:");
assertEqual("test", descriptor.getDisplayName(), "display name:");
assertEqual(JavaTestDescriptorTestCase.class, descriptor.getTestClass());
assertEqual(JavaTestDescriptorTestCase.class.getDeclaredMethod("test", String.class, BigDecimal.class),
descriptor.getTestMethod());
Expand Down

0 comments on commit 405c6f1

Please sign in to comment.