package org.infinispan.test.concurrent;
import java.util.ArrayList;
import java.util.List;
import org.hamcrest.CoreMatchers;
import org.hamcrest.Matcher;
/**
* Creates {@link InvocationMatcher}s.
*
* @author Dan Berindei
* @since 7.0
*/
public class InvocationMatcherBuilder {
private final String methodName;
private Matcher instanceMatcher;
private List<Matcher> argumentMatchers;
private int matchCount = -1;
public InvocationMatcherBuilder(String methodName) {
this.methodName = methodName;
}
public InvocationMatcher build() {
Matcher[] matchersArray = argumentMatchers != null ?
argumentMatchers.toArray(new Matcher[argumentMatchers.size()]) : null;
return new DefaultInvocationMatcher(methodName, instanceMatcher, matchCount, matchersArray);
}
public InvocationMatcherBuilder withParam(int index, Object expected) {
Matcher<Object> matcher = CoreMatchers.equalTo(expected);
return withMatcher(index, matcher);
}
public InvocationMatcherBuilder withMatcher(int index, Matcher<?> matcher) {
if (argumentMatchers == null) {
argumentMatchers = new ArrayList<Matcher>(index + 1);
}
while (argumentMatchers.size() <= index) {
argumentMatchers.add(null);
}
argumentMatchers.set(index, matcher);
return this;
}
public InvocationMatcherBuilder matchCount(int matchCount) {
this.matchCount = matchCount;
return this;
}
public InvocationMatcherBuilder withThis(Matcher<Object> matcher) {
instanceMatcher = matcher;
return this;
}
}