/* * Copyright (c) 2007 Mockito contributors * This program is made available under the terms of the MIT License. */ package org.mockito.internal.verification; import static org.mockito.internal.exceptions.Reporter.noMoreInteractionsWanted; import static org.mockito.internal.exceptions.Reporter.wantedButNotInvoked; import static org.mockito.internal.invocation.InvocationMarker.markVerified; import static org.mockito.internal.invocation.InvocationsFinder.findFirstUnverified; import static org.mockito.internal.invocation.InvocationsFinder.findInvocations; import java.util.List; import org.mockito.internal.invocation.InvocationMatcher; import org.mockito.invocation.MatchableInvocation; import org.mockito.internal.verification.api.VerificationData; import org.mockito.invocation.Invocation; import org.mockito.verification.VerificationMode; public class Only implements VerificationMode { @SuppressWarnings("unchecked") public void verify(VerificationData data) { MatchableInvocation target = data.getTarget(); List<Invocation> invocations = data.getAllInvocations(); List<Invocation> chunk = findInvocations(invocations,target); if (invocations.size() != 1 && chunk.size() > 0) { Invocation unverified = findFirstUnverified(invocations); throw noMoreInteractionsWanted(unverified, (List) invocations); } if (invocations.size() != 1 || chunk.size() == 0) { throw wantedButNotInvoked(target); } markVerified(chunk.get(0), target); } public VerificationMode description(String description) { return VerificationModeFactory.description(this, description); } }