1/*
2 * Copyright (c) 2007 Mockito contributors
3 * This program is made available under the terms of the MIT License.
4 */
5
6package org.mockito.internal.matchers;
7
8import org.mockito.ArgumentMatcher;
9
10import java.io.Serializable;
11
12public abstract class CompareTo<T extends Comparable<T>> implements ArgumentMatcher<T>, Serializable {
13    private final T wanted;
14
15    public CompareTo(T value) {
16        this.wanted = value;
17    }
18
19    @Override
20    public final boolean matches(T actual) {
21        if (actual == null) {
22            return false;
23        }
24        if (!actual.getClass().isInstance(wanted)){
25            return false;
26        }
27
28        int result = actual.compareTo(wanted);
29        return matchResult(result);
30    }
31
32    @Override
33    public final String toString() {
34        return getName() + "(" + wanted + ")";
35    }
36
37    protected abstract String getName();
38
39    protected abstract boolean matchResult(int result);
40}
41