blob: 28de0b6c2b6aa46a0a3bf415ab2f460faa8c7564 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011 Google, Inc.
* 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
*
* Contributors:
* Google, Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.wb.internal.core.utils.check;
import java.text.MessageFormat;
/**
* <code>Assert</code> is useful for for embedding runtime sanity checks in code. The predicate
* methods all test a condition and throw some type of unchecked exception if the condition does not
* hold.
* <p>
* Assertion failure exceptions, like most runtime exceptions, are thrown when something is
* misbehaving. Assertion failures are invariably unspecified behavior; consequently, clients should
* never rely on these being thrown (and certainly should not being catching them specifically).
*
* @author scheglov_ke
* @coverage core.util
*/
public final class Assert {
////////////////////////////////////////////////////////////////////////////
//
// Constructor
//
////////////////////////////////////////////////////////////////////////////
private Assert() {
}
////////////////////////////////////////////////////////////////////////////
//
// "legal"
//
////////////////////////////////////////////////////////////////////////////
/**
* Asserts that an argument is legal. If the given boolean is not <code>true</code>, an
* <code>IllegalArgumentException</code> is thrown.
*
* @param expression
* the boolean expression of the check
* @return <code>true</code> if the check passes (does not return if the check fails)
* @exception IllegalArgumentException
* if the legality test failed
*/
public static boolean isLegal(boolean expression) {
return isLegal(expression, ""); //$NON-NLS-1$
}
/**
* Asserts that an argument is legal. If the given boolean is not <code>true</code>, an
* <code>IllegalArgumentException</code> is thrown. The given message is included in that
* exception, to aid debugging.
*
* @param expression
* the boolean expression of the check
* @param message
* the message to include in the exception
* @return <code>true</code> if the check passes (does not return if the check fails)
* @exception IllegalArgumentException
* if the legality test failed
*/
public static boolean isLegal(boolean expression, String message) {
if (!expression) {
throw new IllegalArgumentException(message);
}
return expression;
}
////////////////////////////////////////////////////////////////////////////
//
// "null"
//
////////////////////////////////////////////////////////////////////////////
/**
* Asserts that the given object is <code>null</code>. If this is not the case, some kind of
* unchecked exception is thrown.
*
* @param object
* the value to test
*/
public static void isNull(Object object) {
isNull(object, ""); //$NON-NLS-1$
}
/**
* Asserts that the given object is <code>null</code>. If this is not the case, some kind of
* unchecked exception is thrown. The given message is included in that exception, to aid
* debugging.
*
* @param object
* the value to test
* @param message
* the message to include in the exception
*/
public static void isNull(Object object, String message) {
if (object != null) {
throw new AssertionFailedException("null argument expected: " + message); //$NON-NLS-1$
}
}
/**
* Asserts that the given object is not <code>null</code>. If this is not the case, some kind of
* unchecked exception is thrown. The given message is included in that exception, to aid
* debugging.
*
* @param object
* the value to test
* @param errorFormat
* the format of error message to produce if the check fails, as expected by
* {@link String#format(String, Object...)}. For example
* <code>"Execution flow problem. %s expected, but %s found."</code>.
* @param args
* the arguments for {@code errorFormat}
*/
public static void isNull(Object object, String errorFormat, Object... args) {
if (object != null) {
fail("null argument expected: " + String.format(errorFormat, args)); //$NON-NLS-1$
}
}
/**
* @param errorFormat
* the format of error message suitable for {@link MessageFormat}.
* @param errorFormat
* the format of error message to produce if the check fails, as expected by
* {@link MessageFormat}. For example
* <code>"Execution flow problem. {0} expected, but {1} found."</code>.
*/
public static void isNull2(Object object, String errorFormat, Object... args) {
if (object != null) {
String message = "null argument expected: " + MessageFormat.format(errorFormat, args); //$NON-NLS-1$
fail(message);
}
}
////////////////////////////////////////////////////////////////////////////
//
// not "null"
//
////////////////////////////////////////////////////////////////////////////
/**
* Asserts that the given object is not <code>null</code>. If this is not the case, some kind of
* unchecked exception is thrown.
*
* @param object
* the value to test
*/
public static void isNotNull(Object object) {
isNotNull(object, ""); //$NON-NLS-1$
}
/**
* Asserts that the given object is not <code>null</code>. If this is not the case, some kind of
* unchecked exception is thrown. The given message is included in that exception, to aid
* debugging.
*
* @param object
* the value to test
* @param message
* the message to include in the exception
*/
public static void isNotNull(Object object, String message) {
if (object == null) {
fail("null argument: " + message); //$NON-NLS-1$
}
}
/**
* Asserts that the given object is not <code>null</code>. If this is not the case, some kind of
* unchecked exception is thrown. The given message is included in that exception, to aid
* debugging.
*
* @param object
* the value to test
* @param errorFormat
* the format of error message to produce if the check fails, as expected by
* {@link String#format(String, Object...)}. For example
* <code>"Execution flow problem. %s expected, but %s found."</code>.
* @param args
* the arguments for {@code errorFormat}
*/
public static void isNotNull(Object object, String errorFormat, Object... args) {
if (object == null) {
fail("null argument: " + String.format(errorFormat, args)); //$NON-NLS-1$
}
}
/**
* @param errorFormat
* the format of error message suitable for {@link MessageFormat}.
* @param errorFormat
* the format of error message to produce if the check fails, as expected by
* {@link MessageFormat}. For example
* <code>"Execution flow problem. {0} expected, but {1} found."</code>.
*/
public static void isNotNull2(Object object, String errorFormat, Object... args) {
if (object == null) {
String message = "null argument: " + MessageFormat.format(errorFormat, args); //$NON-NLS-1$
fail(message);
}
}
////////////////////////////////////////////////////////////////////////////
//
// Fail
//
////////////////////////////////////////////////////////////////////////////
/**
* Fails with given message.
*
* @param message
* the message to include in the exception
*/
public static void fail(String message) {
throw new AssertionFailedException(message);
}
/**
* @param errorFormat
* the format of error message to produce if the check fails, as expected by
* {@link MessageFormat}. For example <code>"{0} expected, but {1} found."</code>.
*/
public static void fail(String errorFormat, Object... args) {
String message = MessageFormat.format(errorFormat, args);
throw new AssertionFailedException(message);
}
////////////////////////////////////////////////////////////////////////////
//
// "true"
//
////////////////////////////////////////////////////////////////////////////
/**
* Asserts that the given boolean is <code>true</code>. If this is not the case, some kind of
* unchecked exception is thrown.
*
* @param expression
* the boolean expression of the check
* @return <code>true</code> if the check passes (does not return if the check fails)
*/
public static boolean isTrue(boolean expression) {
return isTrue(expression, ""); //$NON-NLS-1$
}
/**
* Asserts that the given boolean is <code>true</code>. If this is not the case, some kind of
* unchecked exception is thrown. The given message is included in that exception, to aid
* debugging.
*
* @param expression
* the boolean expression of the check
* @param message
* the message to include in the exception
* @return <code>true</code> if the check passes (does not return if the check fails)
*/
public static boolean isTrue(boolean expression, String message) {
if (!expression) {
fail("assertion failed: " + message); //$NON-NLS-1$
}
return expression;
}
/**
* Asserts that the given boolean is <code>true</code>. If this is not the case, some kind of
* unchecked exception is thrown. The given message is included in that exception, to aid
* debugging.
*
* @param expression
* the boolean expression of the check
* @param errorFormat
* the format of error message to produce if the check fails, as expected by
* {@link String#format(String, Object...)}. For example
* <code>"Execution flow problem. %s expected, but %s found."</code>.
* @param args
* the arguments for {@code errorFormat}
* @return <code>true</code> if the check passes (does not return if the check fails)
*/
public static boolean isTrue(boolean expression, String errorFormat, Object... args) {
if (!expression) {
fail("assertion failed: " + String.format(errorFormat, args)); //$NON-NLS-1$
}
return expression;
}
/**
* Asserts that the given boolean is <code>true</code>. If this is not the case, some kind of
* unchecked exception is thrown. The given message is included in that exception, to aid
* debugging.
*
* @param expression
* the boolean expression to check.
* @param errorFormat
* the format of error message to produce if the check fails, as expected by
* {@link MessageFormat}. For example <code>"{0} expected, but {1} found."</code>.
*/
public static boolean isTrue2(boolean expression, String errorFormat, Object... args) {
if (!expression) {
fail(errorFormat, args);
}
return expression;
}
////////////////////////////////////////////////////////////////////////////
//
// equals
//
////////////////////////////////////////////////////////////////////////////
/**
* Asserts that given actual value equals expected value. If this is not the case, some kind of
* unchecked exception is thrown.
*
* @param expected
* the expected value
* @param the
* actual value to check
*/
public static void equals(int expected, int actual) {
equals(expected, actual, expected + " expected, but " + actual + " found");
}
/**
* Asserts that given actual value equals expected value. If this is not the case, some kind of
* unchecked exception is thrown. The given message is included in that exception, to aid
* debugging.
*
* @param expected
* the expected value
* @param the
* actual value to check
* @param message
* the message to include in the exception
*/
public static void equals(int expected, int actual, String message) {
if (expected != actual) {
fail("assertation failed: " + message);
}
}
////////////////////////////////////////////////////////////////////////////
//
// instanceOf
//
////////////////////////////////////////////////////////////////////////////
/**
* Asserts that given object is not <code>null</code> and has class compatible with given.
*/
public static void instanceOf(Class<?> expectedClass, Object o) {
if (o == null) {
fail(expectedClass.getName() + " expected, but 'null' found.");
}
if (!expectedClass.isAssignableFrom(o.getClass())) {
fail(expectedClass.getName() + " expected, but " + o.getClass().getName() + " found.");
}
}
}