Class Throwables


  • public final class Throwables
    extends java.lang.Object
    Utility methods related to Throwables.
    • Field Detail

      • ORG_ASSERTJ_CORE_ERROR_CONSTRUCTOR_INVOKER

        private static final java.lang.String ORG_ASSERTJ_CORE_ERROR_CONSTRUCTOR_INVOKER
        See Also:
        Constant Field Values
      • JAVA_LANG_REFLECT_CONSTRUCTOR

        private static final java.lang.String JAVA_LANG_REFLECT_CONSTRUCTOR
        See Also:
        Constant Field Values
      • ERROR_DESCRIPTION_EXTRACTOR

        private static final java.util.function.Function<java.lang.Throwable,​java.lang.String> ERROR_DESCRIPTION_EXTRACTOR
    • Constructor Detail

      • Throwables

        private Throwables()
    • Method Detail

      • describeErrors

        public static java.util.List<java.lang.String> describeErrors​(java.util.List<? extends java.lang.Throwable> errors)
      • appendStackTraceInCurrentThreadToThrowable

        public static void appendStackTraceInCurrentThreadToThrowable​(java.lang.Throwable t,
                                                                      java.lang.String methodToStartFrom)
        Appends the stack trace of the current thread to the one in the given Throwable.
        Parameters:
        t - the given Throwable.
        methodToStartFrom - the name of the method used as the starting point of the current thread's stack trace.
      • stackTraceInCurrentThread

        private static java.util.List<java.lang.StackTraceElement> stackTraceInCurrentThread​(java.lang.String methodToStartFrom)
      • stackTraceInCurrentThread

        private static java.util.List<java.lang.StackTraceElement> stackTraceInCurrentThread()
      • removeAssertJRelatedElementsFromStackTrace

        public static void removeAssertJRelatedElementsFromStackTrace​(java.lang.Throwable throwable)
        Removes the AssertJ-related elements from the Throwable stack trace that have little value for end user. Therefore, instead of seeing this:
         org.junit.ComparisonFailure: expected:<'[Ronaldo]'> but was:<'[Messi]'>
           at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
           at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
           at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
           at java.lang.reflect.Constructor.newInstance(Constructor.java:501)
           at org.assertj.core.error.ConstructorInvoker.newInstance(ConstructorInvoker.java:34)
           at org.assertj.core.error.ShouldBeEqual.newComparisonFailure(ShouldBeEqual.java:111)
           at org.assertj.core.error.ShouldBeEqual.comparisonFailure(ShouldBeEqual.java:103)
           at org.assertj.core.error.ShouldBeEqual.newAssertionError(ShouldBeEqual.java:81)
           at org.assertj.core.internal.Failures.failure(Failures.java:76)
           at org.assertj.core.internal.Objects.assertEqual(Objects.java:116)
           at org.assertj.core.api.AbstractAssert.isEqualTo(AbstractAssert.java:74)
           at examples.StackTraceFilterExample.main(StackTraceFilterExample.java:13)
        We get this:
         org.junit.ComparisonFailure: expected:<'[Ronaldo]'> but was:<'[Messi]'>
           at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
           at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
           at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
           at examples.StackTraceFilterExample.main(StackTraceFilterExample.java:20)
        Parameters:
        throwable - the Throwable to filter stack trace.
      • getRootCause

        public static java.lang.Throwable getRootCause​(java.lang.Throwable throwable)
        Get the root cause (i.e., the last non-null cause) from a Throwable.
        Parameters:
        throwable - the Throwable to get root cause from.
        Returns:
        the root cause if any, else null.
      • getStackTrace

        public static java.lang.String getStackTrace​(java.lang.Throwable throwable)
        Get the stack trace from a Throwable as a String.

        The result of this method vary by JDK version as this method uses Throwable.printStackTrace(java.io.PrintWriter). On JDK1.3 and earlier, the cause exception will not be shown unless the specified throwable alters printStackTrace.

        Parameters:
        throwable - the Throwable to get stack trace from.
        Returns:
        the stack trace as a String.
      • addLineNumberToErrorMessages

        public static <T extends java.lang.Throwable> java.util.List<T> addLineNumberToErrorMessages​(java.util.List<? extends T> errors)
      • getFirstStackTraceElementFromTest

        public static java.lang.StackTraceElement getFirstStackTraceElementFromTest​(java.lang.StackTraceElement[] stacktrace)
      • isProxiedAssertionClass

        private static boolean isProxiedAssertionClass​(java.lang.String className)
      • addLineNumberToErrorMessage

        private static <T extends java.lang.Throwable> T addLineNumberToErrorMessage​(T error)
      • createNewInstanceWithLineNumberInErrorMessage

        private static <T extends java.lang.Throwable> T createNewInstanceWithLineNumberInErrorMessage​(T error,
                                                                                                       java.lang.StackTraceElement testStackTraceElement)
                                                                                                throws java.lang.ReflectiveOperationException
        Throws:
        java.lang.ReflectiveOperationException
      • isOpentest4jAssertionFailedError

        private static <T extends java.lang.Throwable> boolean isOpentest4jAssertionFailedError​(T error)
      • isInstanceOf

        private static boolean isInstanceOf​(java.lang.Object object,
                                            java.lang.String className)
      • buildAssertionErrorWithLineNumbersButNoActualOrExpectedValues

        private static <T extends java.lang.Throwable> T buildAssertionErrorWithLineNumbersButNoActualOrExpectedValues​(T error,
                                                                                                                       java.lang.StackTraceElement testStackTraceElement)
                                                                                                                throws java.lang.ReflectiveOperationException
        Throws:
        java.lang.ReflectiveOperationException
      • buildOpentest4jAssertionFailedErrorWithLineNumbers

        private static <T extends java.lang.Throwable> T buildOpentest4jAssertionFailedErrorWithLineNumbers​(T error,
                                                                                                            java.lang.StackTraceElement testStackTraceElement)
                                                                                                     throws java.lang.ReflectiveOperationException
        Throws:
        java.lang.ReflectiveOperationException
      • buildErrorMessageWithLineNumber

        private static java.lang.String buildErrorMessageWithLineNumber​(java.lang.String originalErrorMessage,
                                                                        java.lang.StackTraceElement testStackTraceElement)
      • simpleClassNameOf

        private static java.lang.String simpleClassNameOf​(java.lang.StackTraceElement testStackTraceElement)