1e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson/* 2e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Copyright (c) 2007 Mockito contributors 3e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * This program is made available under the terms of the MIT License. 4e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */ 5e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 6e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpackage org.mockito.internal.verification.checkers; 7e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 8e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.exceptions.Reporter; 9e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.invocation.InvocationMarker; 10e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.invocation.InvocationMatcher; 11e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.invocation.InvocationsFinder; 12e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.reporting.Discrepancy; 13e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.verification.api.InOrderContext; 14e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.invocation.Invocation; 15e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.invocation.Location; 16e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 17e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport java.util.List; 18e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 19e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpublic class NonGreedyNumberOfInvocationsInOrderChecker { 20e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 21e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson private final InvocationsFinder finder; 22e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson private final Reporter reporter; 23e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson private final InvocationMarker marker; 24e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 25e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public NonGreedyNumberOfInvocationsInOrderChecker() { 26e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson this(new InvocationsFinder(), new Reporter(), new InvocationMarker()); 27e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 28e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 29e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson NonGreedyNumberOfInvocationsInOrderChecker(InvocationsFinder finder, Reporter reporter, InvocationMarker marker ) { 30e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson this.finder = finder; 31e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson this.reporter = reporter; 32e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson this.marker = marker; 33e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 34e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 35e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public void check(List<Invocation> invocations, InvocationMatcher wanted, int wantedCount, InOrderContext context) { 36e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson int actualCount = 0; 37e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson Location lastLocation = null; 38e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson while( actualCount < wantedCount ){ 39e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson Invocation next = finder.findFirstMatchingUnverifiedInvocation( invocations, wanted, context ); 40e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson if( next == null ){ 41e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson reporter.tooLittleActualInvocationsInOrder(new Discrepancy(wantedCount, actualCount), wanted, lastLocation ); 42e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 43e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson marker.markVerified( next, wanted ); 44e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson context.markVerified( next ); 45e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson lastLocation = next.getLocation(); 46e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson actualCount++; 47e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 48e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 49e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson}