1 /* 2 * Copyright (c) 2016 Mockito contributors 3 * This program is made available under the terms of the MIT License. 4 */ 5 package org.mockito.internal.verification; 6 7 import org.mockito.exceptions.base.MockitoException; 8 import org.mockito.internal.InOrderImpl; 9 import org.mockito.internal.verification.api.VerificationData; 10 import org.mockito.internal.verification.api.VerificationInOrderMode; 11 import org.mockito.verification.VerificationMode; 12 13 public class VerificationWrapperInOrderWrapper implements VerificationMode { 14 private final VerificationMode delegate; 15 VerificationWrapperInOrderWrapper( VerificationWrapper<?> verificationWrapper, InOrderImpl inOrder)16 public VerificationWrapperInOrderWrapper( 17 VerificationWrapper<?> verificationWrapper, InOrderImpl inOrder) { 18 VerificationMode verificationMode = verificationWrapper.wrappedVerification; 19 20 VerificationMode inOrderWrappedVerificationMode = 21 wrapInOrder(verificationWrapper, verificationMode, inOrder); 22 23 delegate = 24 verificationWrapper.copySelfWithNewVerificationMode(inOrderWrappedVerificationMode); 25 } 26 27 @Override verify(VerificationData data)28 public void verify(VerificationData data) { 29 delegate.verify(data); 30 } 31 wrapInOrder( VerificationWrapper<?> verificationWrapper, VerificationMode verificationMode, InOrderImpl inOrder)32 private VerificationMode wrapInOrder( 33 VerificationWrapper<?> verificationWrapper, 34 VerificationMode verificationMode, 35 InOrderImpl inOrder) { 36 if (verificationMode instanceof VerificationInOrderMode) { 37 final VerificationInOrderMode verificationInOrderMode = 38 (VerificationInOrderMode) verificationMode; 39 return new InOrderWrapper(verificationInOrderMode, inOrder); 40 } 41 42 if (verificationMode instanceof VerificationOverTimeImpl) { 43 final VerificationOverTimeImpl verificationOverTime = 44 (VerificationOverTimeImpl) verificationMode; 45 if (verificationOverTime.isReturnOnSuccess()) { 46 return new VerificationOverTimeImpl( 47 verificationOverTime.getPollingPeriodMillis(), 48 verificationOverTime.getTimer().duration(), 49 wrapInOrder( 50 verificationWrapper, verificationOverTime.getDelegate(), inOrder), 51 verificationOverTime.isReturnOnSuccess()); 52 } 53 } 54 55 // TODO ugly exception message!!! 56 throw new MockitoException( 57 verificationMode.getClass().getSimpleName() 58 + " is not implemented to work with InOrder wrapped inside a " 59 + verificationWrapper.getClass().getSimpleName()); 60 } 61 } 62