    001    package junit.framework;
    002
    003    import org.junit.internal.Throwables;
    004
    005
    006    /**
    007     * A {@code TestFailure} collects a failed test together with
    008     * the caught exception.
    009     *
    010     * @see TestResult
    011     */
    012    public class TestFailure {
    013        protected Test fFailedTest;
    014        protected Throwable fThrownException;
    015
    016        /**
    017         * Constructs a TestFailure with the given test and exception.
    018         */
    019        public TestFailure(Test failedTest, Throwable thrownException) {
    020            fFailedTest = failedTest;
    021            fThrownException = thrownException;
    022        }
    023
    024        /**
    025         * Gets the failed test.
    026         */
    027        public Test failedTest() {
    028            return fFailedTest;
    029        }
    030
    031        /**
    032         * Gets the thrown exception.
    033         */
    034        public Throwable thrownException() {
    035            return fThrownException;
    036        }
    037
    038        /**
    039         * Returns a short description of the failure.
    040         */
    041        @Override
    042        public String toString() {
    043            return fFailedTest + ": " + fThrownException.getMessage();
    044        }
    045
    046        /**
    047         * Returns a String containing the stack trace of the error
    048         * thrown by TestFailure.
    049         */
    050        public String trace() {
    051            return Throwables.getStacktrace(thrownException());
    052        }
    053
    054        /**
    055         * Returns a String containing the message from the thrown exception.
    056         */
    057        public String exceptionMessage() {
    058            return thrownException().getMessage();
    059        }
    060
    061        /**
    062         * Returns {@code true} if the error is considered a failure
    063         * (i.e. if it is an instance of {@code AssertionFailedError}),
    064         * {@code false} otherwise.
    065         */
    066        public boolean isFailure() {
    067            return thrownException() instanceof AssertionFailedError;
    068        }
    069    }