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.BuildingNr;
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", "CE_CLASS_ENVY"})
26 final class BuildingNrTests
27 {
28
29
30
31 private static final String TEST_COMPARE_TO = "testCompareTo";
32
33
34
35
36 private static final String BUILDINGNR23 = "23";
37
38
39
40
41 private static final String BUILDINGNR23_1_4 = "23 1/4";
42
43
44
45
46 private static final String BUILDINGNR42 = "42";
47
48
49
50
51 private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected";
52
53
54
55
56 private static final String BUILDING_NR_NOT_AS_EXPECTED = "BuildingNr not as expected";
57
58
59
60
61
62 BuildingNrTests()
63 {
64 super();
65 }
66
67
68
69
70
71
72
73 @ParameterizedTest
74 @ValueSource(strings = {"9", BuildingNrTests.BUILDINGNR42, "42-44", "42/44", "42 a", "42 1/3", "42 1/3 a", "29998-29999 998/999 a", "29999", "42 4/4"})
75 void testBuildingNrCorrect(final String buildingNr)
76 {
77 final BuildingNr cleanBuildingNr = BuildingNr.of(buildingNr);
78 assertEquals(buildingNr, cleanBuildingNr.stringValue(), BuildingNrTests.BUILDING_NR_NOT_AS_EXPECTED);
79 }
80
81
82
83
84
85
86
87 @ParameterizedTest
88 @ValueSource(strings = {"", "1234567890123456789012"})
89 void testBuildingNrLength(final String buildingNr)
90 {
91 assertThrows(IllegalArgumentException.class, () ->
92 {
93 BuildingNr.of(buildingNr);
94 }, BuildingNrTests.ILLEGAL_ARGUMENT
95 );
96 }
97
98
99
100
101
102
103
104 @ParameterizedTest
105 @ValueSource(strings = {"4a2", "30000", "43-42", "42-42", "42 5/4"})
106 void testBuidlingNrWrong(final String buildingNr)
107 {
108 assertThrows(IllegalArgumentException.class, () ->
109 {
110 BuildingNr.of(buildingNr);
111 }, BuildingNrTests.ILLEGAL_ARGUMENT
112 );
113 }
114
115
116
117
118
119 @Test
120 void testStringValue()
121 {
122 final BuildingNr buildingNr = BuildingNr.of(BuildingNrTests.BUILDINGNR42);
123 assertEquals(BuildingNrTests.BUILDINGNR42, buildingNr.stringValue(), BuildingNrTests.BUILDING_NR_NOT_AS_EXPECTED);
124 }
125
126
127
128
129
130 @Test
131 void testHashCode()
132 {
133 final BuildingNr buildingNr1 = BuildingNr.of(BuildingNrTests.BUILDINGNR23);
134 final BuildingNr buildingNr2 = BuildingNr.of(BuildingNrTests.BUILDINGNR23);
135 final BuildingNr buildingNr3 = BuildingNr.of(BuildingNrTests.BUILDINGNR42);
136 assertAll("testHashCode",
137 () -> assertEquals(buildingNr1.hashCode(), buildingNr2.hashCode(), "hashCodes are not equal"),
138 () -> assertNotEquals(buildingNr1.hashCode(), buildingNr3.hashCode(), "hashCodes are equal")
139 );
140 }
141
142
143
144
145
146 @Test
147 @SuppressWarnings("java:S5785")
148 void testEquals()
149 {
150 final BuildingNr buildingNr1 = BuildingNr.of(BuildingNrTests.BUILDINGNR23);
151 final BuildingNr buildingNr2 = BuildingNr.of(BuildingNrTests.BUILDINGNR23);
152 final BuildingNr buildingNr3 = BuildingNr.of(BuildingNrTests.BUILDINGNR42);
153 final BuildingNr buildingNr4 = BuildingNr.of(BuildingNrTests.BUILDINGNR23);
154 assertAll("testEquals",
155 () -> assertTrue(buildingNr1.equals(buildingNr1), "BuildingNr11 is not equal"),
156 () -> assertTrue(buildingNr1.equals(buildingNr2), "BuildingNr12 are not equal"),
157 () -> assertTrue(buildingNr2.equals(buildingNr1), "BuildingNr21 are not equal"),
158 () -> assertTrue(buildingNr2.equals(buildingNr4), "BuildingNr24 are not equal"),
159 () -> assertTrue(buildingNr1.equals(buildingNr4), "BuildingNr14 are not equal"),
160 () -> assertFalse(buildingNr1.equals(buildingNr3), "BuildingNr13 are equal"),
161 () -> assertFalse(buildingNr3.equals(buildingNr1), "BuildingNr31 are equal"),
162 () -> assertFalse(buildingNr1.equals(null), "BuildingNr10 is equal")
163 );
164 }
165
166
167
168
169
170 @Test
171 void testToString()
172 {
173 final BuildingNr buildingNr = BuildingNr.of(BuildingNrTests.BUILDINGNR42);
174 assertEquals("BuildingNr[buildingNr=42]", buildingNr.toString(), "toString not equal");
175 }
176
177
178
179
180
181 @Test
182 @SuppressWarnings("java:S5785")
183 void testCompareTo()
184 {
185 final BuildingNr buildingNr1 = BuildingNr.of(BuildingNrTests.BUILDINGNR23);
186 final BuildingNr buildingNr2 = BuildingNr.of(BuildingNrTests.BUILDINGNR23);
187 final BuildingNr buildingNr3 = BuildingNr.of(BuildingNrTests.BUILDINGNR42);
188 final BuildingNr buildingNr4 = BuildingNr.of("99");
189 final BuildingNr buildingNr5 = BuildingNr.of(BuildingNrTests.BUILDINGNR23);
190 assertAll(BuildingNrTests.TEST_COMPARE_TO,
191 () -> assertTrue(buildingNr1.compareTo(buildingNr2) == -buildingNr2.compareTo(buildingNr1), "reflexive1"),
192 () -> assertTrue(buildingNr1.compareTo(buildingNr3) == -buildingNr3.compareTo(buildingNr1), "reflexive2"),
193 () -> assertTrue((buildingNr4.compareTo(buildingNr3) > 0) && (buildingNr3.compareTo(buildingNr1) > 0) && (buildingNr4.compareTo(buildingNr1) > 0), "transitive1"),
194 () -> assertTrue((buildingNr1.compareTo(buildingNr2) == 0) && (Math.abs(buildingNr1.compareTo(buildingNr5)) == Math.abs(buildingNr2.compareTo(buildingNr5))), "sgn1"),
195 () -> assertTrue((buildingNr1.compareTo(buildingNr2) == 0) && buildingNr1.equals(buildingNr2), "equals")
196 );
197 }
198
199
200
201
202
203 @Test
204 @SuppressWarnings("java:S5785")
205 void testCompareToOk()
206 {
207 final BuildingNr buildingNr1 = BuildingNr.of(BuildingNrTests.BUILDINGNR23);
208 final BuildingNr buildingNr2 = BuildingNr.of(BuildingNrTests.BUILDINGNR23);
209 final BuildingNr buildingNr3 = BuildingNr.of(BuildingNrTests.BUILDINGNR23_1_4);
210 final BuildingNr buildingNr4 = BuildingNr.of(BuildingNrTests.BUILDINGNR23_1_4);
211 final BuildingNr buildingNr5 = BuildingNr.of("23 2/4");
212 final BuildingNr buildingNr6 = BuildingNr.of("23 a");
213 final BuildingNr buildingNr7 = BuildingNr.of("23 b");
214 final BuildingNr buildingNr8 = BuildingNr.of("23 1/4 a");
215 final BuildingNr buildingNr9 = BuildingNr.of("23 1/4 b");
216 assertAll(BuildingNrTests.TEST_COMPARE_TO,
217 () -> assertTrue(buildingNr1.compareTo(buildingNr2) == 0, "equal1"),
218 () -> assertTrue(buildingNr1.compareTo(buildingNr3) < 0, "23 < 23 1/4"),
219 () -> assertTrue(buildingNr3.compareTo(buildingNr1) > 0, "23 1/4 > 23"),
220 () -> assertTrue(buildingNr3.compareTo(buildingNr4) == 0, "equal2"),
221 () -> assertTrue(buildingNr4.compareTo(buildingNr5) < 0, "23 1/4 < 23 2/4"),
222 () -> assertTrue(buildingNr1.compareTo(buildingNr6) < 0, "23 < 23 a"),
223 () -> assertTrue(buildingNr6.compareTo(buildingNr1) > 0, "23 a > 23"),
224 () -> assertTrue(buildingNr6.compareTo(buildingNr7) < 0, "23 a < 23 b"),
225 () -> assertTrue(buildingNr8.compareTo(buildingNr9) < 0, "23 1/4 a < 23 1/4 b")
226 );
227 }
228
229
230
231
232
233 @Test
234 void testCompareToWrong1()
235 {
236 final BuildingNr buildingNr1 = BuildingNr.of("23 1/3");
237 final BuildingNr buildingNr2 = BuildingNr.of(BuildingNrTests.BUILDINGNR23_1_4);
238 assertThrows(IllegalStateException.class, () ->
239 {
240 buildingNr1.compareTo(buildingNr2);
241 }, "Illegal state exception expected"
242 );
243 }
244
245 }