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}