001    /*
002     * Created on Mar 19, 2007
003     * 
004     * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
005     * the License. You may obtain a copy of the License at
006     * 
007     * http://www.apache.org/licenses/LICENSE-2.0
008     * 
009     * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
010     * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
011     * specific language governing permissions and limitations under the License.
012     * 
013     * Copyright @2007-2011 the original author or authors.
014     */
015    package org.fest.assertions.api;
016    
017    import org.fest.assertions.internal.Failures;
018    
019    /**
020     * Common failures.
021     * 
022     * @author Alex Ruiz
023     * @author Yvonne Wang
024     * @author Joel Costigliola
025     */
026    public final class Fail { 
027    
028      /**
029       * Sets wether we remove elements related to Fest from assertion error stack trace.
030       * @param removeFestRelatedElementsFromStackTrace flag.
031       */
032      public static void setRemoveFestRelatedElementsFromStackTrace(boolean removeFestRelatedElementsFromStackTrace) {
033        Failures.instance().setRemoveFestRelatedElementsFromStackTrace(removeFestRelatedElementsFromStackTrace);
034      }
035      
036      /**
037       * Fails with the given message.
038       * @param failureMessage error message.
039       * @throws AssertionError with the given message.
040       */
041      public static void fail(String failureMessage) {
042        throw Failures.instance().failure(failureMessage);
043      }
044    
045      /**
046       * Throws an {@link AssertionError} with the given message and with the {@link Throwable} that caused the failure.
047       * @param failureMessage the description of the failed assertion. It can be {@code null}.
048       * @param realCause cause of the error.
049       * @throws AssertionError with the given message and with the {@link Throwable} that caused the failure.
050       */
051      public static void fail(String failureMessage, Throwable realCause) {
052        AssertionError error = Failures.instance().failure(failureMessage);
053        error.initCause(realCause);
054        throw error;
055      }
056    
057      /**
058       * Throws an {@link AssertionError} with a message explaining that an expection of given exceptionClass type was expected to be thrown but had not been.
059       * @param exceptionClass the class exception that was expected to be thrown.
060       * @throws AssertionError with a message explaining that an expection of given exceptionClass type was expected to be thrown but had not been.
061       */
062      public static void failBecauseExceptionWasNotThrown(Class<? extends Exception> exceptionClass) {
063        String message = String.format("Expected %s to be thrown", exceptionClass.getSimpleName());
064        throw Failures.instance().failure(message);
065      }
066    
067      /**
068       * This constructor is protected to make it possible to subclass this class. Since all its methods are static, there
069       * is no point on creating a new instance of it.
070       */
071      protected Fail() {}
072    }