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