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