• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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