1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright 2001-2009 OFFIS, Tammo Freese 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Licensed under the Apache License, Version 2.0 (the "License"); 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * you may not use this file except in compliance with the License. 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * You may obtain a copy of the License at 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * http://www.apache.org/licenses/LICENSE-2.0 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Unless required by applicable law or agreed to in writing, software 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * distributed under the License is distributed on an "AS IS" BASIS, 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * See the License for the specific language governing permissions and 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * limitations under the License. 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgpackage org.easymock.internal; 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgimport java.io.Serializable; 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgimport java.lang.reflect.InvocationHandler; 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgimport java.lang.reflect.Method; 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgpublic final class MockInvocationHandler implements InvocationHandler, Serializable { 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org private static final long serialVersionUID = -7799769066534714634L; 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org private final MocksControl control; 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org public MockInvocationHandler(MocksControl control) { 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org this.control = control; 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org public Object invoke(Object proxy, Method method, Object[] args) 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org throws Throwable { 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org try { 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (control.getState() instanceof RecordState) { 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LastControl.reportLastControl(control); 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return control.getState().invoke( 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org new Invocation(proxy, method, args)); 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } catch (RuntimeExceptionWrapper e) { 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org throw e.getRuntimeException().fillInStackTrace(); 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } catch (AssertionErrorWrapper e) { 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org throw e.getAssertionError().fillInStackTrace(); 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } catch (ThrowableWrapper t) { 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org throw t.getThrowable().fillInStackTrace(); 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } catch (Throwable t) { 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org throw t; // let all unwrapped pass unmodified 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org public MocksControl getControl() { 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return control; 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}