1/*
2 * Copyright (c) 2016 Mockito contributors
3 * This program is made available under the terms of the MIT License.
4 */
5package org.mockito.internal.verification;
6
7import org.mockito.internal.verification.api.VerificationData;
8import org.mockito.verification.VerificationMode;
9
10public abstract class VerificationWrapper<WrapperType extends VerificationMode> implements VerificationMode {
11
12    protected final WrapperType wrappedVerification;
13
14    public VerificationWrapper(WrapperType wrappedVerification) {
15        this.wrappedVerification = wrappedVerification;
16    }
17
18    public void verify(VerificationData data) {
19        wrappedVerification.verify(data);
20    }
21
22    protected abstract VerificationMode copySelfWithNewVerificationMode(VerificationMode verificationMode);
23
24    public VerificationMode times(int wantedNumberOfInvocations) {
25        return copySelfWithNewVerificationMode(VerificationModeFactory.times(wantedNumberOfInvocations));
26    }
27
28    public VerificationMode never() {
29        return copySelfWithNewVerificationMode(VerificationModeFactory.atMost(0));
30    }
31
32    public VerificationMode atLeastOnce() {
33        return copySelfWithNewVerificationMode(VerificationModeFactory.atLeastOnce());
34    }
35
36    public VerificationMode atLeast(int minNumberOfInvocations) {
37        return copySelfWithNewVerificationMode(VerificationModeFactory.atLeast(minNumberOfInvocations));
38    }
39
40    public VerificationMode atMost(int maxNumberOfInvocations) {
41        return copySelfWithNewVerificationMode(VerificationModeFactory.atMost(maxNumberOfInvocations));
42    }
43
44    public VerificationMode only() {
45        return copySelfWithNewVerificationMode(VerificationModeFactory.only());
46    }
47
48}
49