1e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson/*
2e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Copyright (c) 2007 Mockito contributors
3e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * This program is made available under the terms of the MIT License.
4e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */
5e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpackage org.mockito.internal.verification;
6e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
7e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport java.util.List;
8e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
9e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.exceptions.Reporter;
10e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.invocation.InvocationMarker;
11e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.invocation.InvocationMatcher;
12e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.invocation.InvocationsFinder;
13e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.verification.api.VerificationData;
14e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.invocation.Invocation;
15e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.verification.VerificationMode;
16e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
17e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpublic class Only implements VerificationMode {
18e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
19e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson	private final InvocationsFinder finder = new InvocationsFinder();
20e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson	private final InvocationMarker marker = new InvocationMarker();
21e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson	private final Reporter reporter = new Reporter();
22e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson
23e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson	@SuppressWarnings("unchecked")
24e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson    public void verify(VerificationData data) {
25e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson		InvocationMatcher wantedMatcher = data.getWanted();
26e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson		List<Invocation> invocations = data.getAllInvocations();
27e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson		List<Invocation> chunk = finder.findInvocations(invocations,wantedMatcher);
28e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson		if (invocations.size() != 1 && chunk.size() > 0) {
29e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson			Invocation unverified = finder.findFirstUnverified(invocations);
30e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson			reporter.noMoreInteractionsWanted(unverified, (List) invocations);
31e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson		} else if (invocations.size() != 1 || chunk.size() == 0) {
32e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson			reporter.wantedButNotInvoked(wantedMatcher);
33e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson		}
34e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson		marker.markVerified(chunk.get(0), wantedMatcher);
35e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson	}
36e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson}
37