/* * 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 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++; } } }