/* | |
* Copyright 2001-2009 OFFIS, Tammo Freese | |
* | |
* 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.easymock.internal; | |
import java.io.Serializable; | |
import java.lang.reflect.Method; | |
import java.util.concurrent.locks.ReentrantLock; | |
import org.easymock.IAnswer; | |
public class ReplayState implements IMocksControlState, Serializable { | |
private static final long serialVersionUID = 6314142602251047572L; | |
private final IMocksBehavior behavior; | |
private final ReentrantLock lock = new ReentrantLock(); | |
public ReplayState(IMocksBehavior behavior) { | |
this.behavior = behavior; | |
} | |
public Object invoke(Invocation invocation) throws Throwable { | |
behavior.checkThreadSafety(); | |
if (behavior.isThreadSafe()) { | |
// If thread safe, synchronize the mock | |
lock.lock(); | |
try { | |
return invokeInner(invocation); | |
} | |
finally { | |
lock.unlock(); | |
} | |
} | |
return invokeInner(invocation); | |
} | |
private Object invokeInner(Invocation invocation) throws Throwable { | |
LastControl.pushCurrentInvocation(invocation); | |
try { | |
Result result = behavior.addActual(invocation); | |
try { | |
return result.answer(); | |
} catch (Throwable t) { | |
if (result.shouldFillInStackTrace()) { | |
throw new ThrowableWrapper(t); | |
} | |
throw t; | |
} | |
} finally { | |
LastControl.popCurrentInvocation(); | |
} | |
} | |
public void verify() { | |
behavior.verify(); | |
} | |
public void replay() { | |
throwWrappedIllegalStateException(); | |
} | |
public void callback(Runnable runnable) { | |
throwWrappedIllegalStateException(); | |
} | |
public void checkOrder(boolean value) { | |
throwWrappedIllegalStateException(); | |
} | |
public void makeThreadSafe(boolean threadSafe) { | |
throwWrappedIllegalStateException(); | |
} | |
public void checkIsUsedInOneThread(boolean shouldBeUsedInOneThread) { | |
throwWrappedIllegalStateException(); | |
} | |
public void andReturn(Object value) { | |
throwWrappedIllegalStateException(); | |
} | |
public void andThrow(Throwable throwable) { | |
throwWrappedIllegalStateException(); | |
} | |
public void andAnswer(IAnswer<?> answer) { | |
throwWrappedIllegalStateException(); | |
} | |
public void andDelegateTo(Object answer) { | |
throwWrappedIllegalStateException(); | |
} | |
public void andStubReturn(Object value) { | |
throwWrappedIllegalStateException(); | |
} | |
public void andStubThrow(Throwable throwable) { | |
throwWrappedIllegalStateException(); | |
} | |
public void andStubAnswer(IAnswer<?> answer) { | |
throwWrappedIllegalStateException(); | |
} | |
public void andStubDelegateTo(Object delegateTo) { | |
throwWrappedIllegalStateException(); | |
} | |
public void asStub() { | |
throwWrappedIllegalStateException(); | |
} | |
public void times(Range range) { | |
throwWrappedIllegalStateException(); | |
} | |
@SuppressWarnings("deprecation") | |
public void setMatcher(Method method, org.easymock.ArgumentsMatcher matcher) { | |
throwWrappedIllegalStateException(); | |
} | |
@SuppressWarnings("deprecation") | |
public void setDefaultMatcher(org.easymock.ArgumentsMatcher matcher) { | |
throwWrappedIllegalStateException(); | |
} | |
public void setDefaultReturnValue(Object value) { | |
throwWrappedIllegalStateException(); | |
} | |
public void setDefaultThrowable(Throwable throwable) { | |
throwWrappedIllegalStateException(); | |
} | |
public void setDefaultVoidCallable() { | |
throwWrappedIllegalStateException(); | |
} | |
private void throwWrappedIllegalStateException() { | |
throw new RuntimeExceptionWrapper(new IllegalStateException( | |
"This method must not be called in replay state.")); | |
} | |
public void assertRecordState() { | |
throwWrappedIllegalStateException(); | |
} | |
} |