/* * Copyright 2002-2005 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.core; import java.io.ByteArrayOutputStream; import java.io.PrintWriter; import javax.servlet.ServletException; import junit.framework.TestCase; /** * @author Rod Johnson * @author Juergen Hoeller */ public class NestedExceptionTests extends TestCase { public void testNestedRuntimeExceptionWithNoRootCause() { String mesg = "mesg of mine"; // Making a class abstract doesn't _really_ prevent instantiation :-) NestedRuntimeException nex = new NestedRuntimeException(mesg) {}; assertNull(nex.getCause()); assertEquals(nex.getMessage(), mesg); // Check printStackTrace ByteArrayOutputStream baos = new ByteArrayOutputStream(); PrintWriter pw = new PrintWriter(baos); nex.printStackTrace(pw); pw.flush(); String stackTrace = new String(baos.toByteArray()); assertFalse(stackTrace.indexOf(mesg) == -1); } public void testNestedRuntimeExceptionWithRootCause() { String myMessage = "mesg for this exception"; String rootCauseMesg = "this is the obscure message of the root cause"; ServletException rootCause = new ServletException(rootCauseMesg); // Making a class abstract doesn't _really_ prevent instantiation :-) NestedRuntimeException nex = new NestedRuntimeException(myMessage, rootCause) {}; assertEquals(nex.getCause(), rootCause); assertTrue(nex.getMessage().indexOf(myMessage) != -1); assertTrue(nex.getMessage().indexOf(rootCauseMesg) != -1); // check PrintStackTrace ByteArrayOutputStream baos = new ByteArrayOutputStream(); PrintWriter pw = new PrintWriter(baos); nex.printStackTrace(pw); pw.flush(); String stackTrace = new String(baos.toByteArray()); assertFalse(stackTrace.indexOf(rootCause.getClass().getName()) == -1); assertFalse(stackTrace.indexOf(rootCauseMesg) == -1); } public void testNestedCheckedExceptionWithNoRootCause() { String mesg = "mesg of mine"; // Making a class abstract doesn't _really_ prevent instantiation :-) NestedCheckedException nex = new NestedCheckedException(mesg) {}; assertNull(nex.getCause()); assertEquals(nex.getMessage(), mesg); // Check printStackTrace ByteArrayOutputStream baos = new ByteArrayOutputStream(); PrintWriter pw = new PrintWriter(baos); nex.printStackTrace(pw); pw.flush(); String stackTrace = new String(baos.toByteArray()); assertFalse(stackTrace.indexOf(mesg) == -1); } public void testNestedCheckedExceptionWithRootCause() { String myMessage = "mesg for this exception"; String rootCauseMesg = "this is the obscure message of the root cause"; ServletException rootCause = new ServletException(rootCauseMesg); // Making a class abstract doesn't _really_ prevent instantiation :-) NestedCheckedException nex = new NestedCheckedException(myMessage, rootCause) {}; assertEquals(nex.getCause(), rootCause); assertTrue(nex.getMessage().indexOf(myMessage) != -1); assertTrue(nex.getMessage().indexOf(rootCauseMesg) != -1); // check PrintStackTrace ByteArrayOutputStream baos = new ByteArrayOutputStream(); PrintWriter pw = new PrintWriter(baos); nex.printStackTrace(pw); pw.flush(); String stackTrace = new String(baos.toByteArray()); assertFalse(stackTrace.indexOf(rootCause.getClass().getName()) == -1); assertFalse(stackTrace.indexOf(rootCauseMesg) == -1); } }