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 java.util.List; 9 10import org.mockito.exceptions.base.MockitoException; 11import org.mockito.internal.invocation.InvocationMatcher; 12import org.mockito.internal.verification.api.VerificationData; 13import org.mockito.internal.verification.api.VerificationDataInOrder; 14import org.mockito.internal.verification.api.VerificationInOrderMode; 15import org.mockito.internal.verification.checkers.MissingInvocationChecker; 16import org.mockito.internal.verification.checkers.MissingInvocationInOrderChecker; 17import org.mockito.internal.verification.checkers.NumberOfInvocationsChecker; 18import org.mockito.internal.verification.checkers.NumberOfInvocationsInOrderChecker; 19import org.mockito.invocation.Invocation; 20import org.mockito.verification.VerificationMode; 21 22public class Times implements VerificationInOrderMode, VerificationMode { 23 24 final int wantedCount; 25 26 public Times(int wantedNumberOfInvocations) { 27 if (wantedNumberOfInvocations < 0) { 28 throw new MockitoException("Negative value is not allowed here"); 29 } 30 this.wantedCount = wantedNumberOfInvocations; 31 } 32 33 public void verify(VerificationData data) { 34 if (wantedCount > 0) { 35 MissingInvocationChecker missingInvocation = new MissingInvocationChecker(); 36 missingInvocation.check(data.getAllInvocations(), data.getWanted()); 37 } 38 NumberOfInvocationsChecker numberOfInvocations = new NumberOfInvocationsChecker(); 39 numberOfInvocations.check(data.getAllInvocations(), data.getWanted(), wantedCount); 40 } 41 42 public void verifyInOrder(VerificationDataInOrder data) { 43 List<Invocation> allInvocations = data.getAllInvocations(); 44 InvocationMatcher wanted = data.getWanted(); 45 46 if (wantedCount > 0) { 47 MissingInvocationInOrderChecker missingInvocation = new MissingInvocationInOrderChecker(); 48 missingInvocation.check(allInvocations, wanted, this, data.getOrderingContext()); 49 } 50 NumberOfInvocationsInOrderChecker numberOfCalls = new NumberOfInvocationsInOrderChecker(); 51 numberOfCalls.check(allInvocations, wanted, wantedCount, data.getOrderingContext()); 52 } 53 54 @Override 55 public String toString() { 56 return "Wanted invocations count: " + wantedCount; 57 } 58}