/*
* Copyright (c) 2006 Rogério Liesenfeld
* This file is subject to the terms of the MIT license (see LICENSE.txt).
*/
package mockit.internal.expectations.transformation;
import java.util.*;
import javax.annotation.*;
import mockit.internal.expectations.*;
import mockit.internal.expectations.argumentMatching.*;
import mockit.internal.state.*;
import mockit.internal.util.*;
@SuppressWarnings("unused")
public final class ActiveInvocations
{
static final Map<Integer, String> varIndexToTypeDesc = new HashMap<Integer, String>();
private ActiveInvocations() {}
public static void anyString() { addArgMatcher(AlwaysTrueMatcher.ANY_STRING); }
public static void anyBoolean() { addArgMatcher(AlwaysTrueMatcher.ANY_BOOLEAN); }
public static void anyChar() { addArgMatcher(AlwaysTrueMatcher.ANY_CHAR); }
public static void anyByte() { addArgMatcher(AlwaysTrueMatcher.ANY_BYTE); }
public static void anyShort() { addArgMatcher(AlwaysTrueMatcher.ANY_SHORT); }
public static void anyInt() { addArgMatcher(AlwaysTrueMatcher.ANY_INT); }
public static void anyFloat() { addArgMatcher(AlwaysTrueMatcher.ANY_FLOAT); }
public static void anyLong() { addArgMatcher(AlwaysTrueMatcher.ANY_LONG); }
public static void anyDouble() { addArgMatcher(AlwaysTrueMatcher.ANY_DOUBLE); }
public static void any() { addArgMatcher(AlwaysTrueMatcher.ANY_VALUE); }
private static void addArgMatcher(@Nonnull ArgumentMatcher<?> argumentMatcher)
{
RecordAndReplayExecution instance = TestRun.getRecordAndReplayForRunningTest();
if (instance != null) {
TestOnlyPhase currentPhase = instance.getCurrentTestOnlyPhase();
if (currentPhase != null) {
currentPhase.addArgMatcher(argumentMatcher);
}
}
}
public static void moveArgMatcher(@Nonnegative int originalMatcherIndex, @Nonnegative int toIndex)
{
RecordAndReplayExecution instance = TestRun.getRecordAndReplayForRunningTest();
if (instance != null) {
TestOnlyPhase currentPhase = instance.getCurrentTestOnlyPhase();
if (currentPhase != null) {
currentPhase.moveArgMatcher(originalMatcherIndex, toIndex);
}
}
}
public static void setExpectedArgumentType(@Nonnegative int parameterIndex, @Nonnull String typeDesc)
{
RecordAndReplayExecution instance = TestRun.getRecordAndReplayForRunningTest();
if (instance != null) {
TestOnlyPhase currentPhase = instance.getCurrentTestOnlyPhase();
if (currentPhase != null) {
Class<?> argumentType = ClassLoad.loadByInternalName(typeDesc);
currentPhase.setExpectedSingleArgumentType(parameterIndex, argumentType);
}
}
}
public static void setExpectedArgumentType(@Nonnegative int parameterIndex, int varIndex)
{
RecordAndReplayExecution instance = TestRun.getRecordAndReplayForRunningTest();
if (instance != null) {
String typeDesc = varIndexToTypeDesc.remove(varIndex);
if (typeDesc != null) {
TestOnlyPhase currentPhase = instance.getCurrentTestOnlyPhase();
if (currentPhase != null) {
Class<?> argumentType = ClassLoad.loadByInternalName(typeDesc);
currentPhase.setExpectedMultiArgumentType(parameterIndex, argumentType);
}
}
}
}
@Nullable
public static Object matchedArgument(@Nonnegative int parameterIndex)
{
RecordAndReplayExecution instance = TestRun.getRecordAndReplayForRunningTest();
if (instance != null) {
BaseVerificationPhase verificationPhase = (BaseVerificationPhase) instance.getCurrentTestOnlyPhase();
if (verificationPhase != null) {
return verificationPhase.getArgumentValueForCurrentVerification(parameterIndex);
}
}
return null;
}
public static void addResult(@Nullable Object result)
{
RecordAndReplayExecution instance = TestRun.getRecordAndReplayForRunningTest();
if (instance != null) {
RecordPhase recordPhase = instance.getRecordPhase();
if (recordPhase != null) {
recordPhase.addResult(result);
}
}
}
public static void times(int n)
{
RecordAndReplayExecution instance = TestRun.getRecordAndReplayForRunningTest();
if (instance != null) {
TestOnlyPhase currentPhase = instance.getCurrentTestOnlyPhase();
if (currentPhase != null) {
currentPhase.handleInvocationCountConstraint(n, n);
}
}
}
public static void minTimes(int n)
{
RecordAndReplayExecution instance = TestRun.getRecordAndReplayForRunningTest();
if (instance != null) {
TestOnlyPhase currentPhase = instance.getCurrentTestOnlyPhase();
if (currentPhase != null) {
currentPhase.handleInvocationCountConstraint(n, -1);
}
}
}
public static void maxTimes(int n)
{
RecordAndReplayExecution instance = TestRun.getRecordAndReplayForRunningTest();
if (instance != null) {
TestOnlyPhase currentPhase = instance.getCurrentTestOnlyPhase();
if (currentPhase != null) {
currentPhase.setMaxInvocationCount(n);
}
}
}
public static void endInvocations()
{
TestRun.enterNoMockingZone();
try {
RecordAndReplayExecution instance = TestRun.getRecordAndReplayForRunningTest();
assert instance != null;
instance.endInvocations();
}
finally {
TestRun.exitNoMockingZone();
}
}
}