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.Week;
19 import de.powerstat.validation.values.Weeks;
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 WeekTests
28 {
29
30
31
32 private static final String NOT_A_WEEK = "Not a week!";
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 WeekTests()
49 {
50 super();
51 }
52
53
54
55
56
57 @Test
58 void testFactory1()
59 {
60 assertEquals(1, Week.of("1").intValue(), WeekTests.NOT_A_WEEK);
61 }
62
63
64
65
66
67
68
69 @ParameterizedTest
70 @ValueSource(ints = {1, 53})
71 void testIsWeek(final int week)
72 {
73 assertEquals(week, Week.of(week).intValue(), WeekTests.NOT_A_WEEK);
74 }
75
76
77
78
79
80
81
82 @ParameterizedTest
83 @ValueSource(ints = {0, 54})
84 void testIsNotAWeek(final int week)
85 {
86 assertThrows(IndexOutOfBoundsException.class, () ->
87 {
88 Week.of(week);
89 }, "Index out of bounds exception expected"
90 );
91 }
92
93
94
95
96
97 @Test
98 void testIntValue()
99 {
100 assertEquals(10, Week.of(10).intValue(), WeekTests.NOT_A_WEEK);
101 }
102
103
104
105
106
107 @Test
108 void testStringValue()
109 {
110 assertEquals("10", Week.of(10).stringValue(), WeekTests.NOT_A_WEEK);
111 }
112
113
114
115
116
117 @Test
118 void testHashCode()
119 {
120 final Week week1 = Week.of(1);
121 final Week week2 = Week.of(1);
122 final Week week3 = Week.of(2);
123 assertAll("testHashCode",
124 () -> assertEquals(week1.hashCode(), week2.hashCode(), "hashCodes are not equal"),
125 () -> assertNotEquals(week1.hashCode(), week3.hashCode(), "hashCodes are equal")
126 );
127 }
128
129
130
131
132
133 @Test
134 @SuppressWarnings("java:S5785")
135 void testEquals()
136 {
137 final Week week1 = Week.of(1);
138 final Week week2 = Week.of(1);
139 final Week week3 = Week.of(2);
140 final Week week4 = Week.of(1);
141 assertAll("testEquals",
142 () -> assertTrue(week1.equals(week1), "week11 is not equal"),
143 () -> assertTrue(week1.equals(week2), "week12 are not equal"),
144 () -> assertTrue(week2.equals(week1), "week21 are not equal"),
145 () -> assertTrue(week2.equals(week4), "week24 are not equal"),
146 () -> assertTrue(week1.equals(week4), "week14 are not equal"),
147 () -> assertFalse(week1.equals(week3), "week13 are equal"),
148 () -> assertFalse(week3.equals(week1), "week31 are equal"),
149 () -> assertFalse(week1.equals(null), "week10 is equal")
150 );
151 }
152
153
154
155
156
157 @Test
158 void testToString()
159 {
160 final Week week = Week.of(1);
161 assertEquals("Week[week=1]", week.toString(), "toString not equal");
162 }
163
164
165
166
167
168 @Test
169 @SuppressWarnings("java:S5785")
170 void testCompareTo()
171 {
172 final Week week1 = Week.of(1);
173 final Week week2 = Week.of(1);
174 final Week week3 = Week.of(2);
175 final Week week4 = Week.of(3);
176 final Week week5 = Week.of(1);
177 assertAll("testCompareTo",
178 () -> assertTrue(week1.compareTo(week2) == -week2.compareTo(week1), "reflexive1"),
179 () -> assertTrue(week1.compareTo(week3) == -week3.compareTo(week1), "reflexive2"),
180 () -> assertTrue((week4.compareTo(week3) > 0) && (week3.compareTo(week1) > 0) && (week4.compareTo(week1) > 0), "transitive1"),
181 () -> assertTrue((week1.compareTo(week2) == 0) && (Math.abs(week1.compareTo(week5)) == Math.abs(week2.compareTo(week5))), "sgn1"),
182 () -> assertTrue((week1.compareTo(week2) == 0) && week1.equals(week2), "equals")
183 );
184 }
185
186
187
188
189
190 @Test
191 void testAdd1()
192 {
193 final Week week = Week.of(1);
194 final Weeks weeks = Weeks.of(1);
195 final Week weekResult = week.add(weeks);
196 assertEquals(2, weekResult.intValue(), WeekTests.RESULT_NOT_AS_EXPECTED);
197 }
198
199
200
201
202
203 @Test
204 void testAdd2()
205 {
206 final Week week = Week.of(53);
207 final Weeks weeks = Weeks.of(1);
208 assertThrows(ArithmeticException.class, () ->
209 {
210 week.add(weeks);
211 }, WeekTests.ARITHMETIC_EXCEPTION_EXPECTED
212 );
213 }
214
215
216
217
218
219 @Test
220 void testSubtract1()
221 {
222 final Week week = Week.of(2);
223 final Weeks weeks = Weeks.of(1);
224 final Week weekResult = week.subtract(weeks);
225 assertEquals(1, weekResult.intValue(), WeekTests.RESULT_NOT_AS_EXPECTED);
226 }
227
228
229
230
231
232 @Test
233 void testSubtract2()
234 {
235 final Week week = Week.of(1);
236 final Weeks weeks = Weeks.of(1);
237 assertThrows(ArithmeticException.class, () ->
238 {
239 week.subtract(weeks);
240 }, WeekTests.ARITHMETIC_EXCEPTION_EXPECTED
241 );
242 }
243
244
245
246
247
248 @Test
249 void testIncrement1()
250 {
251 final Week week = Week.of(1);
252 final Week weekResult = week.increment();
253 assertEquals(2, weekResult.intValue(), WeekTests.RESULT_NOT_AS_EXPECTED);
254 }
255
256
257
258
259
260 @Test
261 void testIncrement2()
262 {
263 final Week week = Week.of(53);
264 assertThrows(ArithmeticException.class, () ->
265 {
266 week.increment();
267 }, WeekTests.ARITHMETIC_EXCEPTION_EXPECTED
268 );
269 }
270
271
272
273
274
275 @Test
276 void testDecrement1()
277 {
278 final Week week = Week.of(2);
279 final Week weekResult = week.decrement();
280 assertEquals(1, weekResult.intValue(), WeekTests.RESULT_NOT_AS_EXPECTED);
281 }
282
283
284
285
286
287 @Test
288 void testDecrement2()
289 {
290 final Week week = Week.of(1);
291 assertThrows(ArithmeticException.class, () ->
292 {
293 week.decrement();
294 }, WeekTests.ARITHMETIC_EXCEPTION_EXPECTED
295 );
296 }
297
298 }