org.mockito.internal.progress.ArgumentMatcherStorageImpl Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of securemock Show documentation
Show all versions of securemock Show documentation
Libraries for Elasticsearch
The newest version!
/*
* Copyright (c) 2007 Mockito contributors
* This program is made available under the terms of the MIT License.
*/
package org.mockito.internal.progress;
import org.mockito.ArgumentMatcher;
import org.mockito.internal.matchers.And;
import org.mockito.internal.matchers.LocalizedMatcher;
import org.mockito.internal.matchers.Not;
import org.mockito.internal.matchers.Or;
import static java.util.Collections.emptyList;
import static org.mockito.internal.exceptions.Reporter.incorrectUseOfAdditionalMatchers;
import static org.mockito.internal.exceptions.Reporter.misplacedArgumentMatcher;
import static org.mockito.internal.exceptions.Reporter.reportNoSubMatchersFound;
import java.util.*;
public class ArgumentMatcherStorageImpl implements ArgumentMatcherStorage {
private static final int TWO_SUB_MATCHERS = 2;
private static final int ONE_SUB_MATCHER = 1;
private final Stack matcherStack = new Stack();
public void reportMatcher(ArgumentMatcher> matcher) {
matcherStack.push(new LocalizedMatcher(matcher));
}
public List pullLocalizedMatchers() {
if (matcherStack.isEmpty()) {
return emptyList();
}
List lastMatchers = resetStack();
return lastMatchers;
}
public void reportAnd() {
assertStateFor("And(?)", TWO_SUB_MATCHERS);
ArgumentMatcher> m1 = popMatcher();
ArgumentMatcher> m2 = popMatcher();
reportMatcher(new And(m1, m2));
}
public void reportOr() {
assertStateFor("Or(?)", TWO_SUB_MATCHERS);
ArgumentMatcher> m1 = popMatcher();
ArgumentMatcher> m2 = popMatcher();
reportMatcher(new Or(m1, m2));
}
public void reportNot() {
assertStateFor("Not(?)", ONE_SUB_MATCHER);
ArgumentMatcher> m = popMatcher();
reportMatcher(new Not(m));
}
public void validateState() {
if (!matcherStack.isEmpty()) {
List lastMatchers = resetStack();
throw misplacedArgumentMatcher(lastMatchers);
}
}
public void reset() {
matcherStack.clear();
}
private void assertStateFor(String additionalMatcherName, int subMatchersCount) {
if (matcherStack.isEmpty()) {
throw reportNoSubMatchersFound(additionalMatcherName);
}
if (matcherStack.size() < subMatchersCount) {
List lastMatchers = resetStack();
throw incorrectUseOfAdditionalMatchers(additionalMatcherName, subMatchersCount, lastMatchers);
}
}
private ArgumentMatcher> popMatcher() {
return matcherStack.pop().getMatcher();
}
private List resetStack() {
ArrayList lastMatchers = new ArrayList(matcherStack);
reset();
return lastMatchers;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy