/* * JBoss, Home of Professional Open Source * Copyright 2009, Red Hat and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. * * @authors Gary Brown */ package org.jboss.byteman.tests.auxiliary; import org.jboss.byteman.tests.Test; /** * Auxiliary class used by entry and exit location test classes */ public class TestExceptionExitAuxiliary implements TestInterface { protected Test test; public TestExceptionExitAuxiliary(Test test) { this.test = test; test.log("inside TestExceptionExitAuxiliary(Test)"); } public void testMethod() { test.log("inside TestExceptionExitAuxiliary.testMethod"); try { testVoidMethod(true); } catch (Throwable t) { test.log("caught: "+t.getMessage()); } try { testStringMethod(true); } catch (Throwable t) { test.log("caught: "+t.getMessage()); } try { testMethodTryMultiCatch(true); } catch (Throwable t) { test.log("caught: "+t.getMessage()); } try { testMethodNestedTryCatch(true); } catch (Throwable t) { test.log("caught: "+t.getMessage()); } try { testMethodMultiRule(true); } catch (Throwable t) { test.log("caught: "+t.getMessage()); } try { testMethodMultiRule2(true); } catch (Throwable t) { test.log("caught: "+t.getMessage()); } try { testMethodMultiRule3(true); } catch (Throwable t) { test.log("caught: "+t.getMessage()); } test.log("exiting TestExceptionExitAuxiliary.testMethod"); } public void testVoidMethod(boolean fail) { test.log("inside TestExceptionExitAuxiliary.testVoidMethod"); if (fail) { throw new RuntimeException("testVoidMethod exception"); } test.log("exit TestExceptionExitAuxiliary.testVoidMethod"); } public String testStringMethod(boolean fail) { String ret="Hello"; test.log("inside TestExceptionExitAuxiliary.testStringMethod"); if (fail) { throw new RuntimeException("testStringMethod exception"); } test.log("exit TestExceptionExitAuxiliary.testStringMethod"); return ret; } public void testMethodTryMultiCatch(boolean fail) throws ExcA { test.log("inside TestExceptionExitAuxiliary.testMethodTryMultiCatch"); try { if (fail) { throw new ExcA("testMethodTryMultiCatch exception"); } } catch (ExcB eb) { test.log("should not catch ExcB"); } catch (ExcC ec) { test.log("should not catch ExcC"); } test.log("exit TestExceptionExitAuxiliary.testMethodTryMultiCatch"); } public void testMethodNestedTryCatch(boolean fail) throws ExcA { test.log("inside TestExceptionExitAuxiliary.testMethodNestedTryCatch"); try { if (fail) { throw new ExcC("testMethodNestedTryCatch exception"); } } catch (ExcC ec) { try { throw new ExcB(ec.getMessage()); } finally { test.log("finally testMethodNestedTryCatch"); } } test.log("exit TestExceptionExitAuxiliary.testMethodNestedTryCatch"); } private void runtimeExceptionSource(boolean fail, String message) { if (fail) { throw new RuntimeException(message); } } private void throwableSource(boolean fail, String message) throws Throwable { if (fail) { throw new Throwable(message); } } private void excCSource(boolean fail, String message) throws ExcC { if (fail) { throw new ExcC(message); } } public void testMethodMultiRule(boolean fail) throws Throwable { test.log("inside TestExceptionExitAuxiliary.testMethodMultiRule"); try { runtimeExceptionSource(fail, "testMethodMultiRule inner RuntimeException"); throwableSource(fail, "testMethodMultiRule inner Throwable"); } catch (ExcC exc) { throwableSource(fail, "testMethodMultiRule catch ExcC"); } finally { test.log("finally testMethodMultiRule"); } throwableSource(fail, "testMethodMultiRule outer Throwable"); test.log("exit TestExceptionExitAuxiliary.testMethodMultiRule"); } public void testMethodMultiRule2(boolean fail) throws Throwable { test.log("inside TestExceptionExitAuxiliary.testMethodMultiRule2"); try { excCSource(fail, "testMethodMultiRule2 inner ExcC"); } catch (ExcC exc) { throwableSource(fail, "testMethodMultiRule2 catch ExcC"); } finally { test.log("finally testMethodMultiRule2"); } test.log("exit TestExceptionExitAuxiliary.testMethodMultiRule2"); } public void testMethodMultiRule3(boolean fail) throws Throwable { test.log("inside TestExceptionExitAuxiliary.testMethodMultiRule3"); try { throwableSource(fail, "testMethodMultiRule3 inner Throwable"); } finally { test.log("finally testMethodMultiRule3"); } test.log("exit TestExceptionExitAuxiliary.testMethodMultiRule3"); } public Test getTest() { return test; } public static class ExcA extends Exception { private static final long serialVersionUID = 1L; public ExcA(String mesg) { super(mesg); } } public static class ExcB extends ExcA { private static final long serialVersionUID = 1L; public ExcB(String mesg) { super(mesg); } } public static class ExcC extends ExcA { private static final long serialVersionUID = 1L; public ExcC(String mesg) { super(mesg); } } }