Skip to content

Commit

Permalink
Refactor: reuse other verifiers
Browse files Browse the repository at this point in the history
  • Loading branch information
PiotrPrzybylak committed Mar 2, 2024
1 parent f5f2718 commit 5fe1060
Showing 1 changed file with 6 additions and 24 deletions.
30 changes: 6 additions & 24 deletions src/main/java/org/mockito/internal/verification/Only.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,37 +4,19 @@
*/
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.verification.api.VerificationData;
import org.mockito.invocation.Invocation;
import org.mockito.invocation.MatchableInvocation;
import org.mockito.verification.VerificationMode;

public class Only implements VerificationMode {

private final Times once = new Times(1);

private final NoMoreInteractions noMoreInteractions = new NoMoreInteractions();

@Override
@SuppressWarnings("unchecked")
public void verify(VerificationData data) {
MatchableInvocation target = data.getTarget();
List<Invocation> invocations = data.getAllInvocations();
List<Invocation> chunk = findInvocations(invocations, target);
if(!chunk.isEmpty()) {
markVerified(chunk.get(0), target);
}
if (invocations.size() != 1 && !chunk.isEmpty()) {
Invocation unverified = findFirstUnverified(invocations);
throw noMoreInteractionsWanted(unverified, (List) invocations);
}
if (invocations.size() != 1 || chunk.isEmpty()) {
throw wantedButNotInvoked(target);
}
once.verify(data);
noMoreInteractions.verify(data);
}

@Override
Expand Down

0 comments on commit 5fe1060

Please sign in to comment.