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