1
2
3
4 package de.powerstat.validation.values.test;
5
6
7 import static org.junit.jupiter.api.Assertions.assertAll;
8 import static org.junit.jupiter.api.Assertions.assertEquals;
9 import static org.junit.jupiter.api.Assertions.assertFalse;
10 import static org.junit.jupiter.api.Assertions.assertNotEquals;
11 import static org.junit.jupiter.api.Assertions.assertThrows;
12 import static org.junit.jupiter.api.Assertions.assertTrue;
13
14 import org.junit.jupiter.api.Test;
15 import org.junit.jupiter.params.ParameterizedTest;
16 import org.junit.jupiter.params.provider.ValueSource;
17
18 import de.powerstat.validation.values.Minute;
19 import de.powerstat.validation.values.Minutes;
20 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
21
22
23
24
25
26 @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"})
27 final class MinuteTests
28 {
29
30
31
32 private static final String NOT_A_MINUTE = "Not a minute!";
33
34
35
36
37 private static final String RESULT_NOT_AS_EXPECTED = "Result not as expected";
38
39
40
41
42 private static final String ARITHMETIC_EXCEPTION_EXPECTED = "Arithmetic exception expected";
43
44
45
46
47
48 MinuteTests()
49 {
50 super();
51 }
52
53
54
55
56
57 @Test
58 void testFactory1()
59 {
60 assertEquals(0, Minute.of("0").intValue(), MinuteTests.NOT_A_MINUTE);
61 }
62
63
64
65
66
67
68
69 @ParameterizedTest
70 @ValueSource(ints = {0, 59})
71 void testIsMinute(final int minute)
72 {
73 assertEquals(minute, Minute.of(minute).intValue(), MinuteTests.NOT_A_MINUTE);
74 }
75
76
77
78
79
80
81
82 @ParameterizedTest
83 @ValueSource(ints = {-1, 60})
84 void testIsNotAMinute(final int minute)
85 {
86 assertThrows(IndexOutOfBoundsException.class, () ->
87 {
88 Minute.of(minute);
89 }, "Index out of bounds exception expected"
90 );
91 }
92
93
94
95
96
97 @Test
98 void testIntValue()
99 {
100 assertEquals(10, Minute.of(10).intValue(), MinuteTests.NOT_A_MINUTE);
101 }
102
103
104
105
106
107 @Test
108 void testStringValue()
109 {
110 assertEquals("10", Minute.of(10).stringValue(), MinuteTests.NOT_A_MINUTE);
111 }
112
113
114
115
116
117 @Test
118 void testHashCode()
119 {
120 final Minute minute1 = Minute.of(1);
121 final Minute minute2 = Minute.of(1);
122 final Minute minute3 = Minute.of(2);
123 assertAll("testHashCode",
124 () -> assertEquals(minute1.hashCode(), minute2.hashCode(), "hashCodes are not equal"),
125 () -> assertNotEquals(minute1.hashCode(), minute3.hashCode(), "hashCodes are equal")
126 );
127 }
128
129
130
131
132
133 @Test
134 @SuppressWarnings("java:S5785")
135 void testEquals()
136 {
137 final Minute minute1 = Minute.of(1);
138 final Minute minute2 = Minute.of(1);
139 final Minute minute3 = Minute.of(2);
140 final Minute minute4 = Minute.of(1);
141 assertAll("testEquals",
142 () -> assertTrue(minute1.equals(minute1), "minute11 is not equal"),
143 () -> assertTrue(minute1.equals(minute2), "minute12 are not equal"),
144 () -> assertTrue(minute2.equals(minute1), "minute21 are not equal"),
145 () -> assertTrue(minute2.equals(minute4), "minute24 are not equal"),
146 () -> assertTrue(minute1.equals(minute4), "minute14 are not equal"),
147 () -> assertFalse(minute1.equals(minute3), "minute13 are equal"),
148 () -> assertFalse(minute3.equals(minute1), "minute31 are equal"),
149 () -> assertFalse(minute1.equals(null), "minute10 is equal")
150 );
151 }
152
153
154
155
156
157 @Test
158 void testToString()
159 {
160 final Minute minute = Minute.of(1);
161 assertEquals("Minute[minute=1]", minute.toString(), "toString not equal");
162 }
163
164
165
166
167
168 @Test
169 @SuppressWarnings("java:S5785")
170 void testCompareTo()
171 {
172 final Minute minute1 = Minute.of(1);
173 final Minute minute2 = Minute.of(1);
174 final Minute minute3 = Minute.of(2);
175 final Minute minute4 = Minute.of(3);
176 final Minute minute5 = Minute.of(1);
177 assertAll("testCompareTo",
178 () -> assertTrue(minute1.compareTo(minute2) == -minute2.compareTo(minute1), "reflexive1"),
179 () -> assertTrue(minute1.compareTo(minute3) == -minute3.compareTo(minute1), "reflexive2"),
180 () -> assertTrue((minute4.compareTo(minute3) > 0) && (minute3.compareTo(minute1) > 0) && (minute4.compareTo(minute1) > 0), "transitive1"),
181 () -> assertTrue((minute1.compareTo(minute2) == 0) && (Math.abs(minute1.compareTo(minute5)) == Math.abs(minute2.compareTo(minute5))), "sgn1"),
182 () -> assertTrue((minute1.compareTo(minute2) == 0) && minute1.equals(minute2), "equals")
183 );
184 }
185
186
187
188
189
190 @Test
191 void testAdd1()
192 {
193 final Minute minute = Minute.of(1);
194 final Minutes minutes = Minutes.of(1);
195 final Minute minuteResult = minute.add(minutes);
196 assertEquals(2, minuteResult.intValue(), MinuteTests.RESULT_NOT_AS_EXPECTED);
197 }
198
199
200
201
202
203 @Test
204 void testAdd2()
205 {
206 final Minute minute = Minute.of(59);
207 final Minutes minutes = Minutes.of(1);
208 assertThrows(ArithmeticException.class, () ->
209 {
210 minute.add(minutes);
211 }, MinuteTests.ARITHMETIC_EXCEPTION_EXPECTED
212 );
213 }
214
215
216
217
218
219 @Test
220 void testSubtract1()
221 {
222 final Minute minute = Minute.of(2);
223 final Minutes minutes = Minutes.of(1);
224 final Minute minuteResult = minute.subtract(minutes);
225 assertEquals(1, minuteResult.intValue(), MinuteTests.RESULT_NOT_AS_EXPECTED);
226 }
227
228
229
230
231
232 @Test
233 void testSubtract2()
234 {
235 final Minute minute = Minute.of(0);
236 final Minutes minutes = Minutes.of(1);
237 assertThrows(ArithmeticException.class, () ->
238 {
239 minute.subtract(minutes);
240 }, MinuteTests.ARITHMETIC_EXCEPTION_EXPECTED
241 );
242 }
243
244
245
246
247
248 @Test
249 void testIncrement1()
250 {
251 final Minute minute = Minute.of(1);
252 final Minute minuteResult = minute.increment();
253 assertEquals(2, minuteResult.intValue(), MinuteTests.RESULT_NOT_AS_EXPECTED);
254 }
255
256
257
258
259
260 @Test
261 void testIncrement2()
262 {
263 final Minute minute = Minute.of(59);
264 assertThrows(ArithmeticException.class, () ->
265 {
266 minute.increment();
267 }, MinuteTests.ARITHMETIC_EXCEPTION_EXPECTED
268 );
269 }
270
271
272
273
274
275 @Test
276 void testDecrement1()
277 {
278 final Minute minute = Minute.of(2);
279 final Minute minuteResult = minute.decrement();
280 assertEquals(1, minuteResult.intValue(), MinuteTests.RESULT_NOT_AS_EXPECTED);
281 }
282
283
284
285
286
287 @Test
288 void testDecrement2()
289 {
290 final Minute minute = Minute.of(0);
291 assertThrows(ArithmeticException.class, () ->
292 {
293 minute.decrement();
294 }, MinuteTests.ARITHMETIC_EXCEPTION_EXPECTED
295 );
296 }
297
298 }