protected <T extends RuntimeException> T catches(Closure c, Class<T> rex) {
   T t = null;
   try {
     c.f();
   } catch (RuntimeException ex) {
     ex.printStackTrace();
     assertTrue(
         ex.getClass().getName() + " is not assignable to runtime exception " + rex.getName(),
         ex.getClass().isAssignableFrom(rex));
     t = rex.cast(ex);
   }
   assertNotNull("No exception was caught of class " + rex.getName(), t);
   return t;
 }