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.TopLevelDomain;
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"})
26 final class TopLevelDomainTests
27 {
28
29
30
31 private static final String FR = "FR";
32
33
34
35
36 private static final String DE = "DE";
37
38
39
40
41 private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected";
42
43
44
45
46 private static final String TLD_NOT_AS_EXPECTED = "TopLevelDomain not as expected";
47
48
49
50
51
52 TopLevelDomainTests()
53 {
54 super();
55 }
56
57
58
59
60
61
62
63 @ParameterizedTest
64 @ValueSource(strings = {"de", "XN--VERMGENSBERATUNG-PWB"})
65 void testTopLevelDomainOk0(final String topLevelDomain)
66 {
67 final TopLevelDomain cleanTopLevelDomain = TopLevelDomain.of(topLevelDomain);
68 assertEquals(topLevelDomain, cleanTopLevelDomain.stringValue(), TopLevelDomainTests.TLD_NOT_AS_EXPECTED);
69 }
70
71
72
73
74
75
76
77 @ParameterizedTest
78 @ValueSource(strings = {"A", "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKL"})
79 void testTopLevelDomainLength(final String topLevelDomain)
80 {
81 assertThrows(IllegalArgumentException.class, () ->
82 {
83 TopLevelDomain.of(topLevelDomain);
84 }, TopLevelDomainTests.ILLEGAL_ARGUMENT
85 );
86 }
87
88
89
90
91
92
93
94 @ParameterizedTest
95 @ValueSource(strings = {".DE", "-DE", "DE-", "D~E", "ZZ"})
96 void testTopLevelDomainIllegalParameters(final String topLevelDomain)
97 {
98 assertThrows(IllegalArgumentException.class, () ->
99 {
100 TopLevelDomain.of(topLevelDomain);
101 }, TopLevelDomainTests.ILLEGAL_ARGUMENT
102 );
103 }
104
105
106
107
108
109 @Test
110 void testStringValue()
111 {
112 final TopLevelDomain topLevelDomain = TopLevelDomain.of(TopLevelDomainTests.DE);
113 assertEquals(TopLevelDomainTests.DE, topLevelDomain.stringValue(), TopLevelDomainTests.TLD_NOT_AS_EXPECTED);
114 }
115
116
117
118
119
120 @Test
121 void testHashCode()
122 {
123 final TopLevelDomain topLevelDomain1 = TopLevelDomain.of(TopLevelDomainTests.DE);
124 final TopLevelDomain topLevelDomain2 = TopLevelDomain.of(TopLevelDomainTests.DE);
125 final TopLevelDomain topLevelDomain3 = TopLevelDomain.of(TopLevelDomainTests.FR);
126 assertAll("testHashCode",
127 () -> assertEquals(topLevelDomain1.hashCode(), topLevelDomain2.hashCode(), "hashCodes are not equal"),
128 () -> assertNotEquals(topLevelDomain1.hashCode(), topLevelDomain3.hashCode(), "hashCodes are equal")
129 );
130 }
131
132
133
134
135
136 @Test
137 @SuppressWarnings("java:S5785")
138 void testEquals()
139 {
140 final TopLevelDomain topLevelDomain1 = TopLevelDomain.of(TopLevelDomainTests.DE);
141 final TopLevelDomain topLevelDomain2 = TopLevelDomain.of(TopLevelDomainTests.DE);
142 final TopLevelDomain topLevelDomain3 = TopLevelDomain.of(TopLevelDomainTests.FR);
143 final TopLevelDomain topLevelDomain4 = TopLevelDomain.of(TopLevelDomainTests.DE);
144 assertAll("testEquals",
145 () -> assertTrue(topLevelDomain1.equals(topLevelDomain1), "topLevelDomain11 is not equal"),
146 () -> assertTrue(topLevelDomain1.equals(topLevelDomain2), "topLevelDomain12 are not equal"),
147 () -> assertTrue(topLevelDomain2.equals(topLevelDomain1), "topLevelDomain21 are not equal"),
148 () -> assertTrue(topLevelDomain2.equals(topLevelDomain4), "topLevelDomain24 are not equal"),
149 () -> assertTrue(topLevelDomain1.equals(topLevelDomain4), "topLevelDomain14 are not equal"),
150 () -> assertFalse(topLevelDomain1.equals(topLevelDomain3), "topLevelDomain13 are equal"),
151 () -> assertFalse(topLevelDomain3.equals(topLevelDomain1), "topLevelDomain31 are equal"),
152 () -> assertFalse(topLevelDomain1.equals(null), "topLevelDomain10 is equal")
153 );
154 }
155
156
157
158
159
160 @Test
161 void testToString()
162 {
163 final TopLevelDomain topLevelDomain = TopLevelDomain.of(TopLevelDomainTests.DE);
164 assertEquals("TopLevelDomain[topLevelDomain=DE]", topLevelDomain.toString(), "toString not equal");
165 }
166
167
168
169
170
171 @Test
172 @SuppressWarnings("java:S5785")
173 void testCompareTo()
174 {
175 final TopLevelDomain topLevelDomain1 = TopLevelDomain.of(TopLevelDomainTests.DE);
176 final TopLevelDomain topLevelDomain2 = TopLevelDomain.of(TopLevelDomainTests.DE);
177 final TopLevelDomain topLevelDomain3 = TopLevelDomain.of(TopLevelDomainTests.FR);
178 final TopLevelDomain topLevelDomain4 = TopLevelDomain.of("GB");
179 final TopLevelDomain topLevelDomain5 = TopLevelDomain.of(TopLevelDomainTests.DE);
180 assertAll("testCompareTo",
181 () -> assertTrue(topLevelDomain1.compareTo(topLevelDomain2) == -topLevelDomain2.compareTo(topLevelDomain1), "reflexive1"),
182 () -> assertTrue(topLevelDomain1.compareTo(topLevelDomain3) == -topLevelDomain3.compareTo(topLevelDomain1), "reflexive2"),
183 () -> assertTrue((topLevelDomain4.compareTo(topLevelDomain3) > 0) && (topLevelDomain3.compareTo(topLevelDomain1) > 0) && (topLevelDomain4.compareTo(topLevelDomain1) > 0), "transitive1"),
184 () -> assertTrue((topLevelDomain1.compareTo(topLevelDomain2) == 0) && (Math.abs(topLevelDomain1.compareTo(topLevelDomain5)) == Math.abs(topLevelDomain2.compareTo(topLevelDomain5))), "sgn1"),
185 () -> assertTrue((topLevelDomain1.compareTo(topLevelDomain2) == 0) && topLevelDomain1.equals(topLevelDomain2), "equals")
186 );
187 }
188
189 }