/*
* Copyright 2011 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.powermock.mockpolicies.impl;
import org.powermock.mockpolicies.MockPolicyInterceptionSettings;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.*;
public class MockPolicyInterceptionSettingsImpl implements MockPolicyInterceptionSettings {
private Set<Field> fieldsToSuppress;
private Set<Method> methodsToSuppress;
private Map<Method, Object> substituteReturnValues;
private Set<String> fieldsTypesToSuppress;
private Map<Method, InvocationHandler> proxies;
public MockPolicyInterceptionSettingsImpl() {
fieldsToSuppress = new LinkedHashSet<Field>();
methodsToSuppress = new LinkedHashSet<Method>();
substituteReturnValues = new HashMap<Method, Object>();
proxies = new HashMap<Method, InvocationHandler>();
fieldsTypesToSuppress = new LinkedHashSet<String>();
}
@Override
public void addFieldTypesToSuppress(String firstType, String... additionalFieldTypes) {
fieldsTypesToSuppress.add(firstType);
addFieldTypesToSuppress(additionalFieldTypes);
}
@Override
public void addFieldTypesToSuppress(String[] fieldTypes) {
Collections.addAll(fieldsTypesToSuppress, fieldTypes);
}
@Override
public void setFieldTypesToSuppress(String[] fieldTypes) {
fieldsTypesToSuppress.clear();
addFieldTypesToSuppress(fieldTypes);
}
@Override
public Field[] getFieldsToSuppress() {
return fieldsToSuppress.toArray(new Field[fieldsToSuppress.size()]);
}
@Override
public Method[] getMethodsToSuppress() {
return methodsToSuppress.toArray(new Method[methodsToSuppress.size()]);
}
@Override
public Map<Method, Object> getStubbedMethods() {
return Collections.unmodifiableMap(substituteReturnValues);
}
@Override
public void addFieldToSuppress(Field firstField, Field... fields) {
fieldsToSuppress.add(firstField);
addFieldToSuppress(fields);
}
@Override
public void addFieldToSuppress(Field[] fields) {
Collections.addAll(fieldsToSuppress, fields);
}
@Override
public void addMethodsToSuppress(Method methodToSuppress, Method... additionalMethodsToSuppress) {
methodsToSuppress.add(methodToSuppress);
addMethodsToSuppress(additionalMethodsToSuppress);
}
@Override
public void addMethodsToSuppress(Method[] methods) {
Collections.addAll(methodsToSuppress, methods);
}
@Override
public void stubMethod(Method method, Object returnObject) {
substituteReturnValues.put(method, returnObject);
}
@Override
public void setFieldsSuppress(Field[] fields) {
fieldsToSuppress.clear();
addFieldToSuppress(fields);
}
@Override
public void setMethodsToSuppress(Method[] methods) {
methodsToSuppress.clear();
addMethodsToSuppress(methods);
}
@Override
public void setMethodsToStub(Map<Method, Object> substituteReturnValues) {
this.substituteReturnValues = substituteReturnValues;
}
@Override
public String[] getFieldTypesToSuppress() {
return fieldsTypesToSuppress.toArray(new String[fieldsTypesToSuppress.size()]);
}
@Override
public void addSubtituteReturnValue(Method method, Object returnObject) {
substituteReturnValues.put(method, returnObject);
}
@Override
public void setSubtituteReturnValues(Map<Method, Object> substituteReturnValues) {
this.substituteReturnValues = substituteReturnValues;
}
@Override
public Map<Method, Object> getSubstituteReturnValues() {
return getStubbedMethods();
}
@Override
public Map<Method, InvocationHandler> getProxiedMethods() {
return proxies;
}
@Override
public void proxyMethod(Method method, InvocationHandler invocationHandler) {
proxies.put(method, invocationHandler);
}
@Override
public void setMethodsToProxy(Map<Method, InvocationHandler> proxies) {
this.proxies = proxies;
}
}