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.Firstname;
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 FirstnameTests
27 {
28
29
30
31 private static final String FIRSTNAME = "firstname";
32
33
34
35
36 private static final String FIRSTNAMEZ = "firstnamez";
37
38
39
40
41 private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected";
42
43
44
45
46 private static final String FIRSTNAME_NOT_AS_EXPECTED = "Firstname not as expected";
47
48
49
50
51
52 FirstnameTests()
53 {
54 super();
55 }
56
57
58
59
60
61
62
63 @ParameterizedTest
64 @ValueSource(strings = {"K", "Kai", FirstnameTests.FIRSTNAME, "AbcdefghijklmnopqrstuvwxyzäöüßAB"})
65 void testFirstnameOk0(final String firstname)
66 {
67 final Firstname cleanFirstname = Firstname.of(firstname);
68 assertEquals(firstname, cleanFirstname.stringValue(), FirstnameTests.FIRSTNAME_NOT_AS_EXPECTED);
69 }
70
71
72
73
74
75
76
77 @ParameterizedTest
78 @ValueSource(strings = {"", "AbcdefghijklmnopqrstuvwxyzäöüßABC"})
79 void testFirstnameLength(final String firstname)
80 {
81 assertThrows(IllegalArgumentException.class, () ->
82 {
83 Firstname.of(firstname);
84 }, FirstnameTests.ILLEGAL_ARGUMENT
85 );
86 }
87
88
89
90
91
92 @Test
93 void testFirstnameWithIllegalCharacters0()
94 {
95 assertThrows(IllegalArgumentException.class, () ->
96 {
97 Firstname.of("^!$%&(){}[]=?+*#´§;,:'\"");
98 }, FirstnameTests.ILLEGAL_ARGUMENT
99 );
100 }
101
102
103
104
105
106 @Test
107 void testStringValue()
108 {
109 final Firstname firstname = Firstname.of(FirstnameTests.FIRSTNAME);
110 assertEquals(FirstnameTests.FIRSTNAME, firstname.stringValue(), FirstnameTests.FIRSTNAME_NOT_AS_EXPECTED);
111 }
112
113
114
115
116
117 @Test
118 void testHashCode()
119 {
120 final Firstname firstname1 = Firstname.of(FirstnameTests.FIRSTNAME);
121 final Firstname firstname2 = Firstname.of(FirstnameTests.FIRSTNAME);
122 final Firstname firstname3 = Firstname.of(FirstnameTests.FIRSTNAMEZ);
123 assertAll("testHashCode",
124 () -> assertEquals(firstname1.hashCode(), firstname2.hashCode(), "hashCodes are not equal"),
125 () -> assertNotEquals(firstname1.hashCode(), firstname3.hashCode(), "hashCodes are equal")
126 );
127 }
128
129
130
131
132
133 @Test
134 @SuppressWarnings("java:S5785")
135 void testEquals()
136 {
137 final Firstname firstname1 = Firstname.of(FirstnameTests.FIRSTNAME);
138 final Firstname firstname2 = Firstname.of(FirstnameTests.FIRSTNAME);
139 final Firstname firstname3 = Firstname.of(FirstnameTests.FIRSTNAMEZ);
140 final Firstname firstname4 = Firstname.of(FirstnameTests.FIRSTNAME);
141 assertAll("testEquals",
142 () -> assertTrue(firstname1.equals(firstname1), "firstname11 is not equal"),
143 () -> assertTrue(firstname1.equals(firstname2), "firstname12 are not equal"),
144 () -> assertTrue(firstname2.equals(firstname1), "firstname21 are not equal"),
145 () -> assertTrue(firstname2.equals(firstname4), "firstname24 are not equal"),
146 () -> assertTrue(firstname1.equals(firstname4), "firstname14 are not equal"),
147 () -> assertFalse(firstname1.equals(firstname3), "firstname13 are equal"),
148 () -> assertFalse(firstname3.equals(firstname1), "firstname31 are equal"),
149 () -> assertFalse(firstname1.equals(null), "firstname10 is equal")
150 );
151 }
152
153
154
155
156
157 @Test
158 void testToString()
159 {
160 final Firstname firstname = Firstname.of(FirstnameTests.FIRSTNAME);
161 assertEquals("Firstname[firstname=firstname]", firstname.toString(), "toString not equal");
162 }
163
164
165
166
167
168 @Test
169 @SuppressWarnings("java:S5785")
170 void testCompareTo()
171 {
172 final Firstname firstname1 = Firstname.of(FirstnameTests.FIRSTNAME);
173 final Firstname firstname2 = Firstname.of(FirstnameTests.FIRSTNAME);
174 final Firstname firstname3 = Firstname.of("firstnamey");
175 final Firstname firstname4 = Firstname.of(FirstnameTests.FIRSTNAMEZ);
176 final Firstname firstname5 = Firstname.of(FirstnameTests.FIRSTNAME);
177 assertAll("testCompareTo",
178 () -> assertTrue(firstname1.compareTo(firstname2) == -firstname2.compareTo(firstname1), "reflexive1"),
179 () -> assertTrue(firstname1.compareTo(firstname3) == -firstname3.compareTo(firstname1), "reflexive2"),
180 () -> assertTrue((firstname4.compareTo(firstname3) > 0) && (firstname3.compareTo(firstname1) > 0) && (firstname4.compareTo(firstname1) > 0), "transitive1"),
181 () -> assertTrue((firstname1.compareTo(firstname2) == 0) && (Math.abs(firstname1.compareTo(firstname5)) == Math.abs(firstname2.compareTo(firstname5))), "sgn1"),
182 () -> assertTrue((firstname1.compareTo(firstname2) == 0) && firstname1.equals(firstname2), "equals")
183 );
184 }
185
186 }