1/* 2 * Copyright (c) 2007 Mockito contributors 3 * This program is made available under the terms of the MIT License. 4 */ 5 6package org.mockito.internal.verification; 7 8import org.mockito.exceptions.base.MockitoException; 9import org.mockito.internal.invocation.InvocationMatcher; 10import org.mockito.internal.verification.api.VerificationData; 11import org.mockito.internal.verification.api.VerificationDataInOrder; 12import org.mockito.internal.verification.api.VerificationInOrderMode; 13import org.mockito.internal.verification.checkers.*; 14import org.mockito.invocation.Invocation; 15import org.mockito.verification.VerificationMode; 16 17import java.util.List; 18 19public class Calls implements VerificationMode, VerificationInOrderMode { 20 21 final int wantedCount; 22 23 public Calls(int wantedNumberOfInvocations) { 24 if( wantedNumberOfInvocations <= 0 ) { 25 throw new MockitoException( "Negative and zero values are not allowed here" ); 26 } 27 this.wantedCount = wantedNumberOfInvocations; 28 } 29 30 public void verify(VerificationData data) { 31 throw new MockitoException( "calls is only intended to work with InOrder" ); 32 } 33 34 public void verifyInOrder(VerificationDataInOrder data) { 35 List<Invocation> allInvocations = data.getAllInvocations(); 36 InvocationMatcher wanted = data.getWanted(); 37 38 MissingInvocationInOrderChecker missingInvocation = new MissingInvocationInOrderChecker(); 39 missingInvocation.check( allInvocations, wanted, this, data.getOrderingContext()); 40 NonGreedyNumberOfInvocationsInOrderChecker numberOfCalls = new NonGreedyNumberOfInvocationsInOrderChecker(); 41 numberOfCalls.check( allInvocations, wanted, wantedCount, data.getOrderingContext()); 42 } 43 44 @Override 45 public String toString() { 46 return "Wanted invocations count (non-greedy): " + wantedCount; 47 } 48 49}