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.PoBoxNumber;
19 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
20
21
22
23
24
25 @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"})
26 final class PoBoxNumberTests
27 {
28
29
30
31 private static final String NOT_A_PO_BOX_NUMBER = "Not a po box number!";
32
33
34
35
36 private static final String RESULT10 = "10";
37
38
39
40
41
42 PoBoxNumberTests()
43 {
44 super();
45 }
46
47
48
49
50
51 @Test
52 void testFactory1()
53 {
54 assertEquals(1, PoBoxNumber.of("1").longValue(), PoBoxNumberTests.NOT_A_PO_BOX_NUMBER);
55 }
56
57
58
59
60
61
62
63 @ParameterizedTest
64 @ValueSource(longs = {1, 99999})
65 void testIsPoBoxNumber(final long poBoxNumber)
66 {
67 assertEquals(poBoxNumber, PoBoxNumber.of(poBoxNumber).longValue(), PoBoxNumberTests.NOT_A_PO_BOX_NUMBER);
68 }
69
70
71
72
73
74
75
76 @ParameterizedTest
77 @ValueSource(strings = {"1", "99999"})
78 void testIsPoBoxNumberStr(final String poBoxNumber)
79 {
80 assertEquals(poBoxNumber, PoBoxNumber.of(Long.parseLong(poBoxNumber)).stringValue(), PoBoxNumberTests.NOT_A_PO_BOX_NUMBER);
81 }
82
83
84
85
86
87
88
89 @ParameterizedTest
90 @ValueSource(longs = {0})
91 void testIsNotAPoBoxNumber(final long poBoxNumber)
92 {
93 assertThrows(IndexOutOfBoundsException.class, () ->
94 {
95 PoBoxNumber.of(poBoxNumber);
96 }, "Index out of bounds exception expected"
97 );
98 }
99
100
101
102
103
104 @Test
105 void testLongValue()
106 {
107 assertEquals(10, PoBoxNumber.of(10).longValue(), PoBoxNumberTests.NOT_A_PO_BOX_NUMBER);
108 }
109
110
111
112
113
114 @Test
115 void testStringValue()
116 {
117 assertEquals(PoBoxNumberTests.RESULT10, PoBoxNumber.of(10).stringValue(), PoBoxNumberTests.NOT_A_PO_BOX_NUMBER);
118 }
119
120
121
122
123
124 @Test
125 void testHashCode()
126 {
127 final PoBoxNumber poBoxNumber1 = PoBoxNumber.of(1);
128 final PoBoxNumber poBoxNumber2 = PoBoxNumber.of(1);
129 final PoBoxNumber poBoxNumber3 = PoBoxNumber.of(2);
130 assertAll("testHashCode",
131 () -> assertEquals(poBoxNumber1.hashCode(), poBoxNumber2.hashCode(), "hashCodes are not equal"),
132 () -> assertNotEquals(poBoxNumber1.hashCode(), poBoxNumber3.hashCode(), "hashCodes are equal")
133 );
134 }
135
136
137
138
139
140 @Test
141 @SuppressWarnings("java:S5785")
142 void testEquals()
143 {
144 final PoBoxNumber poBoxNumber1 = PoBoxNumber.of(1);
145 final PoBoxNumber poBoxNumber2 = PoBoxNumber.of(1);
146 final PoBoxNumber poBoxNumber3 = PoBoxNumber.of(2);
147 final PoBoxNumber poBoxNumber4 = PoBoxNumber.of(1);
148 assertAll("testEquals",
149 () -> assertTrue(poBoxNumber1.equals(poBoxNumber1), "poBox11 is not equal"),
150 () -> assertTrue(poBoxNumber1.equals(poBoxNumber2), "poBox12 are not equal"),
151 () -> assertTrue(poBoxNumber2.equals(poBoxNumber1), "poBox21 are not equal"),
152 () -> assertTrue(poBoxNumber2.equals(poBoxNumber4), "poBox24 are not equal"),
153 () -> assertTrue(poBoxNumber1.equals(poBoxNumber4), "poBox14 are not equal"),
154 () -> assertFalse(poBoxNumber1.equals(poBoxNumber3), "poBox13 are equal"),
155 () -> assertFalse(poBoxNumber3.equals(poBoxNumber1), "poBox31 are equal"),
156 () -> assertFalse(poBoxNumber1.equals(null), "poBox10 is equal")
157 );
158 }
159
160
161
162
163
164 @Test
165 void testToString()
166 {
167 final PoBoxNumber poBoxNumber = PoBoxNumber.of(1);
168 assertEquals("PoBoxNumber[poBoxNumber=1]", poBoxNumber.toString(), "toString not equal");
169 }
170
171
172
173
174
175 @Test
176 @SuppressWarnings("java:S5785")
177 void testCompareTo()
178 {
179 final PoBoxNumber pobox1 = PoBoxNumber.of(1);
180 final PoBoxNumber pobox2 = PoBoxNumber.of(1);
181 final PoBoxNumber pobox3 = PoBoxNumber.of(2);
182 final PoBoxNumber pobox4 = PoBoxNumber.of(3);
183 final PoBoxNumber pobox5 = PoBoxNumber.of(1);
184 assertAll("testCompareTo",
185 () -> assertTrue(pobox1.compareTo(pobox2) == -pobox2.compareTo(pobox1), "reflexive1"),
186 () -> assertTrue(pobox1.compareTo(pobox3) == -pobox3.compareTo(pobox1), "reflexive2"),
187 () -> assertTrue((pobox4.compareTo(pobox3) > 0) && (pobox3.compareTo(pobox1) > 0) && (pobox4.compareTo(pobox1) > 0), "transitive1"),
188 () -> assertTrue((pobox1.compareTo(pobox2) == 0) && (Math.abs(pobox1.compareTo(pobox5)) == Math.abs(pobox2.compareTo(pobox5))), "sgn1"),
189 () -> assertTrue((pobox1.compareTo(pobox2) == 0) && pobox1.equals(pobox2), "equals")
190 );
191 }
192
193 }