blob: e9d73d93b71c16a09465ecdf9df3841998f023d0 [file] [log] [blame]
/*
* Copyright (c) 2007 Mockito contributors
* This program is made available under the terms of the MIT License.
*/
package org.mockito.internal.verification.checkers;
import org.mockito.exceptions.Reporter;
import org.mockito.internal.invocation.InvocationMarker;
import org.mockito.internal.invocation.InvocationMatcher;
import org.mockito.internal.invocation.InvocationsFinder;
import org.mockito.internal.reporting.Discrepancy;
import org.mockito.internal.verification.api.InOrderContext;
import org.mockito.invocation.Invocation;
import org.mockito.invocation.Location;
import java.util.List;
public class NonGreedyNumberOfInvocationsInOrderChecker {
private final InvocationsFinder finder;
private final Reporter reporter;
private final InvocationMarker marker;
public NonGreedyNumberOfInvocationsInOrderChecker() {
this(new InvocationsFinder(), new Reporter(), new InvocationMarker());
}
NonGreedyNumberOfInvocationsInOrderChecker(InvocationsFinder finder, Reporter reporter, InvocationMarker marker ) {
this.finder = finder;
this.reporter = reporter;
this.marker = marker;
}
public void check(List<Invocation> invocations, InvocationMatcher wanted, int wantedCount, InOrderContext context) {
int actualCount = 0;
Location lastLocation = null;
while( actualCount < wantedCount ){
Invocation next = finder.findFirstMatchingUnverifiedInvocation( invocations, wanted, context );
if( next == null ){
reporter.tooLittleActualInvocationsInOrder(new Discrepancy(wantedCount, actualCount), wanted, lastLocation );
}
marker.markVerified( next, wanted );
context.markVerified( next );
lastLocation = next.getLocation();
actualCount++;
}
}
}