001 /*
002 * Created on Oct 4, 2009
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
005 * the License. You may obtain a copy of the License at
006 *
007 * http://www.apache.org/licenses/LICENSE-2.0
008 *
009 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
010 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
011 * specific language governing permissions and limitations under the License.
012 *
013 * Copyright @2009 the original author or authors.
014 */
015 package org.fest.assertions;
016
017 import static org.fest.assertions.ErrorMessages.*;
018
019 /**
020 * Understands a template for assertion methods, applicable to <code>{@link Comparable}</code>s.
021 * @param <T> the type of <code>Comparable</code> this template can verify.
022 *
023 * @author Alex Ruiz
024 */
025 public abstract class ComparableAssert<T extends Comparable<T>> extends GenericAssert<T> {
026
027 /**
028 * Creates a new </code>{@link ComparableAssert}</code>.
029 * @param actual the target to verify.
030 */
031 protected ComparableAssert(T actual) {
032 super(actual);
033 }
034
035 /**
036 * Verifies that the actual <code>{@link Comparable}</code> is equal to the given one.
037 * @param expected the given <code>Comparable</code> to compare the actual <code>Comparable</code> to.
038 * @return this assertion object.
039 * @throws AssertionError if the actual <code>Comparable</code> is <code>null</code>.
040 * @throws AssertionError if the actual <code>Comparable</code> is not equal to the given one.
041 */
042 protected abstract ComparableAssert<T> isEqualByComparingTo(T expected);
043
044 /**
045 * Verifies that the actual <code>{@link Comparable}</code> is <b>not</b> equal to the given one.
046 * @param expected the given <code>Comparable</code> to use to compare to the actual <code>Comparable</code>.
047 * @return this assertion object.
048 * @throws AssertionError if the actual <code>Comparable</code> is <code>null</code>.
049 * @throws AssertionError if the actual <code>Comparable</code> is equal to the given one.
050 */
051 protected abstract ComparableAssert<T> isNotEqualByComparingTo(T expected);
052
053 /**
054 * Verifies that the actual <code>{@link Comparable}</code> is less than the given one.
055 * @param other the given value.
056 * @return this assertion object.
057 * @throws AssertionError if the actual <code>Comparable</code> is <code>null</code>.
058 * @throws AssertionError if the actual <code>Comparable</code> is not less than the given one.
059 */
060 protected abstract ComparableAssert<T> isLessThan(T other);
061
062 /**
063 * Verifies that the actual <code>{@link Comparable}</code> is greater than the given one.
064 * @param other the given value.
065 * @return this assertion object.
066 * @throws AssertionError if the actual <code>Comparable</code> is <code>null</code>.
067 * @throws AssertionError if the actual <code>Comparable</code> is not greater than the given one.
068 */
069 protected abstract ComparableAssert<T> isGreaterThan(T other);
070
071 /**
072 * Verifies that the actual <code>{@link Comparable}</code> is less than or equal to the given one.
073 * @param other the given value.
074 * @return this assertion object.
075 * @throws AssertionError if the actual <code>Comparable</code> is <code>null</code>.
076 * @throws AssertionError if the actual <code>Comparable</code> is not less than or equal to the given one.
077 */
078 protected abstract ComparableAssert<T> isLessThanOrEqualTo(T other);
079
080 /**
081 * Verifies that the actual <code>{@link Comparable}</code> is greater than or equal to the given one.
082 * @param other the given value.
083 * @return this assertion object.
084 * @throws AssertionError if the actual <code>Comparable</code> is <code>null</code>.
085 * @throws AssertionError if the actual <code>Comparable</code> is not greater than or equal to the given one.
086 */
087 protected abstract ComparableAssert<T> isGreaterThanOrEqualTo(T other);
088
089 /**
090 * Verifies that the actual <code>{@link Comparable}</code> is equal to the given one.
091 * @param expected the given <code>Comparable</code> to compare the actual <code>Comparable</code> to.
092 * @throws AssertionError if the actual <code>Comparable</code> value is <code>null</code>.
093 * @throws AssertionError if the actual <code>Comparable</code> value is not equal to the given one.
094 */
095 protected final void assertIsEqualByComparingTo(T expected) {
096 isNotNull();
097 if (actual.compareTo(expected) == 0) return;
098 failIfCustomMessageIsSet();
099 fail(unexpectedNotEqual(actual, expected));
100 }
101
102 /**
103 * Verifies that the actual <code>{@link Comparable}</code> is <b>not</b> equal to the given one.
104 * @param expected the given <code>Comparable</code> to use to compare to the actual <code>Comparable</code>.
105 * @throws AssertionError if the actual <code>Comparable</code> is <code>null</code>.
106 * @throws AssertionError if the actual <code>Comparable</code> is equal to the given one.
107 */
108 protected final void assertIsNotEqualByComparingTo(T expected) {
109 isNotNull();
110 if (actual.compareTo(expected) == 0) fail(unexpectedEqual(actual, expected));
111 }
112
113 /**
114 * Verifies that the actual <code>{@link Comparable}</code> is less than the given one.
115 * @param other the given value.
116 * @throws AssertionError if the actual <code>Comparable</code> is <code>null</code>.
117 * @throws AssertionError if the actual <code>Comparable</code> is not less than the given one.
118 */
119 protected final void assertIsLessThan(T other) {
120 isNotNull();
121 if (actual.compareTo(other) < 0) return;
122 failIfCustomMessageIsSet();
123 fail(unexpectedGreaterThanOrEqualTo(actual, other));
124 }
125
126 /**
127 * Verifies that the actual <code>{@link Comparable}</code> is greater than the given one.
128 * @param other the given value.
129 * @throws AssertionError if the actual <code>Comparable</code> is <code>null</code>.
130 * @throws AssertionError if the actual <code>Comparable</code> is not greater than the given one.
131 */
132 protected final void assertIsGreaterThan(T other) {
133 isNotNull();
134 if (actual.compareTo(other) > 0) return;
135 failIfCustomMessageIsSet();
136 fail(unexpectedLessThanOrEqualTo(actual, other));
137 }
138
139 /**
140 * Verifies that the actual <code>{@link Comparable}</code> is less than or equal to the given one.
141 * @param other the given value.
142 * @throws AssertionError if the actual <code>Comparable</code> is <code>null</code>.
143 * @throws AssertionError if the actual <code>Comparable</code> is not less than or equal to the given one.
144 */
145 protected final void assertIsLessThanOrEqualTo(T other) {
146 isNotNull();
147 if (actual.compareTo(other) <= 0) return;
148 failIfCustomMessageIsSet();
149 fail(unexpectedGreaterThan(actual, other));
150 }
151
152 /**
153 * Verifies that the actual <code>{@link Comparable}</code> is greater than or equal to the given one.
154 * @param other the given value.
155 * @throws AssertionError if the actual <code>Comparable</code> is <code>null</code>.
156 * @throws AssertionError if the actual <code>Comparable</code> is not greater than or equal to the given one.
157 */
158 protected final void assertIsGreaterThanOrEqualTo(T other) {
159 isNotNull();
160 if (actual.compareTo(other) >= 0) return;
161 failIfCustomMessageIsSet();
162 fail(unexpectedLessThan(actual, other));
163 }
164 }