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.AtLeastXNumberOfInvocationsChecker; 16import org.mockito.internal.verification.checkers.AtLeastXNumberOfInvocationsInOrderChecker; 17import org.mockito.internal.verification.checkers.MissingInvocationChecker; 18import org.mockito.internal.verification.checkers.MissingInvocationInOrderChecker; 19import org.mockito.invocation.Invocation; 20import org.mockito.verification.VerificationMode; 21 22public class AtLeast implements VerificationInOrderMode, VerificationMode { 23 24 final int wantedCount; 25 26 public AtLeast(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 MissingInvocationChecker missingInvocation = new MissingInvocationChecker(); 35 AtLeastXNumberOfInvocationsChecker numberOfInvocations = new AtLeastXNumberOfInvocationsChecker(); 36 37 if (wantedCount == 1) { 38 missingInvocation.check(data.getAllInvocations(), data.getWanted()); 39 } 40 numberOfInvocations.check(data.getAllInvocations(), data.getWanted(), wantedCount); 41 } 42 43 public void verifyInOrder(VerificationDataInOrder data) { 44 List<Invocation> allInvocations = data.getAllInvocations(); 45 InvocationMatcher wanted = data.getWanted(); 46 47 MissingInvocationInOrderChecker missingInvocation = new MissingInvocationInOrderChecker(); 48 AtLeastXNumberOfInvocationsInOrderChecker numberOfCalls = new AtLeastXNumberOfInvocationsInOrderChecker(data.getOrderingContext()); 49 50 if (wantedCount == 1) { 51 missingInvocation.check(allInvocations, wanted, this, data.getOrderingContext()); 52 } 53 54 numberOfCalls.check(allInvocations, wanted, wantedCount); 55 } 56 57 @Override 58 public String toString() { 59 return "Wanted invocations count: at least " + wantedCount; 60 } 61}