test/java/lang/Throwable/ChainedExceptions.java

Print this page


   1 /*
   2  * @test    /nodynamiccopyright/
   3  * @bug     4209652 4363318
   4  * @summary Basic test for chained exceptions & Exception.getStackTrace().
   5  * @author  Josh Bloch
   6  */
   7 
   8 public class ChainedExceptions {
   9     public static void main(String args[]) {
  10         try {
  11             a();
  12         } catch(HighLevelException e) {
  13             StackTraceElement[] highTrace = e.getStackTrace();
  14             int depthTrim = highTrace.length - 2;
  15 
  16             check(highTrace[0], "a",    48);
  17             check(highTrace[1], "main", 11);
  18 
  19             Throwable mid = e.getCause();
  20             StackTraceElement[] midTrace = mid.getStackTrace();
  21             if (midTrace.length - depthTrim != 4)
  22                 throw new RuntimeException("Mid depth");
  23             check(midTrace[0], "c",    58);
  24             check(midTrace[1], "b",    52);
  25             check(midTrace[2], "a",    46);
  26             check(midTrace[3], "main", 11);
  27 
  28             Throwable low = mid.getCause();
  29             StackTraceElement[] lowTrace = low.getStackTrace();
  30             if (lowTrace.length - depthTrim != 6)
  31                 throw new RuntimeException("Low depth");
  32             check(lowTrace[0], "e",    65);
  33             check(lowTrace[1], "d",    62);
  34             check(lowTrace[2], "c",    56);
  35             check(lowTrace[3], "b",    52);
  36             check(lowTrace[4], "a",    46);
  37             check(lowTrace[5], "main", 11);
  38 
  39             if (low.getCause() != null)
  40                 throw new RuntimeException("Low cause != null");
  41         }
  42     }
  43 
  44     static void a() throws HighLevelException {
  45         try {
  46             b();
  47         } catch(MidLevelException e) {
  48             throw new HighLevelException(e);
  49         }
  50     }
  51     static void b() throws MidLevelException {
  52         c();
  53     }
  54     static void c() throws MidLevelException {
  55         try {
  56             d();
  57         } catch(LowLevelException e) {
  58             throw new MidLevelException(e);
  59         }
  60     }
  61     static void d() throws LowLevelException {
  62        e();
  63     }
  64     static void e() throws LowLevelException {
  65         throw new LowLevelException();
  66     }
  67 
  68     private static final String OUR_CLASS  = ChainedExceptions.class.getName();
  69     private static final String OUR_FILE_NAME = "ChainedExceptions.java";
  70 
  71     private static void check(StackTraceElement e, String methodName, int n) {
  72         if (!e.getClassName().equals(OUR_CLASS))
  73             throw new RuntimeException("Class: " + e);
  74         if (!e.getMethodName().equals(methodName))
  75             throw new RuntimeException("Method name: " + e);
  76         if (!e.getFileName().equals(OUR_FILE_NAME))
  77             throw new RuntimeException("File name: " + e);
  78         if (e.getLineNumber() != n)
  79             throw new RuntimeException("Line number: " + e);
  80     }
  81 }
  82 
  83 class HighLevelException extends Exception {
  84     HighLevelException(Throwable cause) { super(cause); }
  85 }
  86 
  87 class MidLevelException extends Exception {
  88     MidLevelException(Throwable cause)  { super(cause); }
  89 }
  90 
  91 class LowLevelException extends Exception {
  92 }
   1 /*
   2  * @test    /nodynamiccopyright/
   3  * @bug     4209652 4363318
   4  * @summary Basic test for chained exceptions & Exception.getStackTrace().
   5  * @author  Josh Bloch
   6  */
   7 
   8 public class ChainedExceptions {
   9     public static void main(String args[]) {
  10         try {
  11             a();
  12         } catch(HighLevelException e) {
  13             StackTraceElement[] highTrace = e.getStackTrace();
  14             int depthTrim = highTrace.length - 2;
  15 
  16             check(e, highTrace[0], "a",    48);
  17             check(e, highTrace[1], "main", 11);
  18 
  19             Throwable mid = e.getCause();
  20             StackTraceElement[] midTrace = mid.getStackTrace();
  21             if (midTrace.length - depthTrim != 4)
  22                 throw new RuntimeException("Mid depth");
  23             check(mid, midTrace[0], "c",    58);
  24             check(mid, midTrace[1], "b",    52);
  25             check(mid, midTrace[2], "a",    46);
  26             check(mid, midTrace[3], "main", 11);
  27 
  28             Throwable low = mid.getCause();
  29             StackTraceElement[] lowTrace = low.getStackTrace();
  30             if (lowTrace.length - depthTrim != 6)
  31                 throw new RuntimeException("Low depth");
  32             check(low, lowTrace[0], "e",    65);
  33             check(low, lowTrace[1], "d",    62);
  34             check(low, lowTrace[2], "c",    56);
  35             check(low, lowTrace[3], "b",    52);
  36             check(low, lowTrace[4], "a",    46);
  37             check(low, lowTrace[5], "main", 11);
  38 
  39             if (low.getCause() != null)
  40                 throw new RuntimeException("Low cause != null");
  41         }
  42     }
  43 
  44     static void a() throws HighLevelException {
  45         try {
  46             b();
  47         } catch(MidLevelException e) {
  48             throw new HighLevelException(e);
  49         }
  50     }
  51     static void b() throws MidLevelException {
  52         c();
  53     }
  54     static void c() throws MidLevelException {
  55         try {
  56             d();
  57         } catch(LowLevelException e) {
  58             throw new MidLevelException(e);
  59         }
  60     }
  61     static void d() throws LowLevelException {
  62        e();
  63     }
  64     static void e() throws LowLevelException {
  65         throw new LowLevelException();
  66     }
  67 
  68     private static final String OUR_CLASS  = ChainedExceptions.class.getName();
  69     private static final String OUR_FILE_NAME = "ChainedExceptions.java";
  70 
  71     private static void check(Throwable t, StackTraceElement e, String methodName, int n) {
  72         if (!e.getClassName().equals(OUR_CLASS))
  73             throw new RuntimeException("Class: " + e, t);
  74         if (!e.getMethodName().equals(methodName))
  75             throw new RuntimeException("Method name: " + e, t);
  76         if (!e.getFileName().equals(OUR_FILE_NAME))
  77             throw new RuntimeException("File name: " + e, t);
  78         if (e.getLineNumber() != n)
  79             throw new RuntimeException("Line number: " + e, t);
  80     }
  81 }
  82 
  83 class HighLevelException extends Exception {
  84     HighLevelException(Throwable cause) { super(cause); }
  85 }
  86 
  87 class MidLevelException extends Exception {
  88     MidLevelException(Throwable cause)  { super(cause); }
  89 }
  90 
  91 class LowLevelException extends Exception {
  92 }