package org.junit; import static java.util.Arrays.asList; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.CoreMatchers.nullValue; import org.hamcrest.Matcher; import org.junit.internal.AssumptionViolatedException; import org.junit.internal.matchers.Each; /** * A set of methods useful for stating assumptions about the conditions in which a test is meaningful. * A failed assumption does not mean the code is broken, but that the test provides no useful information. * The default JUnit runner treats tests with failing assumptions as ignored. Custom runners may behave differently. * * For example: *
 * // only provides information if database is reachable.
 * \@Test public void calculateTotalSalary() {
 *    DBConnection dbc = Database.connect();
 *    assumeNotNull(dbc);
 *    // ...
 * }
 * 
* These methods can be used directly: Assume.assumeTrue(...), however, they * read better if they are referenced through static import:
*
 * import static org.junit.Assume.*;
 *    ...
 *    assumeTrue(...);
 * 
*/ public class Assume { /** * If called with an expression evaluating to {@code false}, the test will halt and be ignored. * @param b */ public static void assumeTrue(boolean b) { assumeThat(b, is(true)); } /** * If called with one or more null elements in objects, the test will halt and be ignored. * @param objects */ public static void assumeNotNull(Object... objects) { assumeThat(asList(objects), Each.each(notNullValue())); } /** * Call to assume that actual satisfies the condition specified by matcher. * If not, the test halts and is ignored. * Example: *
:
	     *   assumeThat(1, is(1)); // passes
	     *   foo(); // will execute
	     *   assumeThat(0, is(1)); // assumption failure! test halts
	     *   int x = 1 / 0; // will never execute
	     * 
* * @param the static type accepted by the matcher (this can flag obvious compile-time problems such as {@code assumeThat(1, is("a"))} * @param actual the computed value being compared * @param matcher an expression, built of {@link Matcher}s, specifying allowed values * * @see org.hamcrest.CoreMatchers * @see org.junit.matchers.JUnitMatchers */ public static void assumeThat(T actual, Matcher matcher) { if (!matcher.matches(actual)) throw new AssumptionViolatedException(actual, matcher); } /** * Use to assume that an operation completes normally. If {@code t} is non-null, the test will halt and be ignored. * * For example: *
	 * \@Test public void parseDataFile() {
	 *   DataFile file;
	 *   try {
	 *     file = DataFile.open("sampledata.txt");
	 *   } catch (IOException e) {
	 *     // stop test and ignore if data can't be opened
	 *     assumeNoException(e);
	 *   }
	 *   // ...
	 * }
	 * 
* @param t if non-null, the offending exception */ public static void assumeNoException(Throwable t) { assumeThat(t, nullValue()); } }