@Test public void testGenerateRootCause() {
Throwable nested = new IllegalAccessException("nested");
Throwable cause1 = new Exception("cause1");
Throwable cause2 = new Exception("cause2", nested);
RootCause rootCause = ExceptionUtils.generateRootCause(cause1);
assertNotNull(rootCause);
assertEquals(cause1.getClass().getName(), rootCause.getName());
assertEquals(cause1.getClass().getCanonicalName(), rootCause.getCanonicalName());
assertEquals(cause1.getClass().getSimpleName(), rootCause.getSimpleName());
assertEquals(cause1.getMessage(), rootCause.getMessage());
assertNull(rootCause.getCause());
rootCause = ExceptionUtils.generateRootCause(cause2);
assertEquals(cause2.getClass().getName(), rootCause.getName());
assertEquals(cause2.getClass().getCanonicalName(), rootCause.getCanonicalName());
assertEquals(cause1.getClass().getSimpleName(), rootCause.getSimpleName());
assertEquals(cause2.getMessage(), rootCause.getMessage());
assertNotNull(rootCause.getCause());
assertEquals(nested.getClass().getName(), rootCause.getCause().getName());
assertEquals(nested.getClass().getCanonicalName(), rootCause.getCause().getCanonicalName());
assertEquals(nested.getClass().getSimpleName(), rootCause.getCause().getSimpleName());
assertEquals(nested.getMessage(), rootCause.getCause().getMessage());
}