/******************************************************************************* * 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; /** * Assert 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. *

* 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 true, an * IllegalArgumentException is thrown. * * @param expression * the boolean expression of the check * @return true 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 true, an * IllegalArgumentException 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 true 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 null. 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 null. 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 null. 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 * "Execution flow problem. %s expected, but %s found.". * @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 * "Execution flow problem. {0} expected, but {1} found.". */ 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 null. 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 null. 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 null. 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 * "Execution flow problem. %s expected, but %s found.". * @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 * "Execution flow problem. {0} expected, but {1} found.". */ 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 "{0} expected, but {1} found.". */ 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 true. If this is not the case, some kind of * unchecked exception is thrown. * * @param expression * the boolean expression of the check * @return true 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 true. 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 true 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 true. 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 * "Execution flow problem. %s expected, but %s found.". * @param args * the arguments for {@code errorFormat} * @return true 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 true. 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 "{0} expected, but {1} found.". */ 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 null 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."); } } }