View Javadoc
1   /*
2    * Copyright (C) 2022-2023 Dipl.-Inform. Kai Hofmann. All rights reserved!
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   * Firstname tests.
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     * Firstname.
30     */
31    private static final String FIRSTNAME = "firstname"; //$NON-NLS-1$
32  
33    /**
34     * Firstname z.
35     */
36    private static final String FIRSTNAMEZ = "firstnamez"; //$NON-NLS-1$
37  
38    /**
39     * Illegal argument exception expected.
40     */
41    private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected"; //$NON-NLS-1$
42  
43    /**
44     * Firstname not as expected.
45     */
46    private static final String FIRSTNAME_NOT_AS_EXPECTED = "Firstname not as expected"; //$NON-NLS-1$
47  
48  
49    /**
50     * Default constructor.
51     */
52    /* default */ FirstnameTests()
53     {
54      super();
55     }
56  
57  
58    /**
59     * Test Firstname with valid values.
60     *
61     * @param firstname Firstname
62     */
63    @ParameterizedTest
64    @ValueSource(strings = {"K", "Kai", FirstnameTests.FIRSTNAME, "AbcdefghijklmnopqrstuvwxyzäöüßAB"})
65    /* default */ 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     * Test Firstname with firstname to short or long.
74     *
75     * @param firstname Firstname
76     */
77    @ParameterizedTest
78    @ValueSource(strings = {"", "AbcdefghijklmnopqrstuvwxyzäöüßABC"})
79    /* default */ void testFirstnameLength(final String firstname)
80     {
81      assertThrows(IllegalArgumentException.class, () ->
82       {
83        /* final Firstname cleanFirstname = */ Firstname.of(firstname);
84       }, FirstnameTests.ILLEGAL_ARGUMENT
85      );
86     }
87  
88  
89    /**
90     * Test Firstname with illegal characters.
91     */
92    @Test
93    /* default */ void testFirstnameWithIllegalCharacters0()
94     {
95      assertThrows(IllegalArgumentException.class, () ->
96       {
97        /* final Firstname cleanFirstname = */ Firstname.of("^!$%&(){}[]=?+*#´§;,:'\""); //$NON-NLS-1$
98       }, FirstnameTests.ILLEGAL_ARGUMENT
99      );
100    }
101 
102 
103   /**
104    * Test stringValue.
105    */
106   @Test
107   /* default */ 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    * Test hash code.
116    */
117   @Test
118   /* default */ 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", //$NON-NLS-1$
124       () -> assertEquals(firstname1.hashCode(), firstname2.hashCode(), "hashCodes are not equal"), //$NON-NLS-1$
125       () -> assertNotEquals(firstname1.hashCode(), firstname3.hashCode(), "hashCodes are equal") //$NON-NLS-1$
126     );
127    }
128 
129 
130   /**
131    * Test equals.
132    */
133   @Test
134   @SuppressWarnings("java:S5785")
135   /* default */ 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", //$NON-NLS-1$
142       () -> assertTrue(firstname1.equals(firstname1), "firstname11 is not equal"), //$NON-NLS-1$
143       () -> assertTrue(firstname1.equals(firstname2), "firstname12 are not equal"), //$NON-NLS-1$
144       () -> assertTrue(firstname2.equals(firstname1), "firstname21 are not equal"), //$NON-NLS-1$
145       () -> assertTrue(firstname2.equals(firstname4), "firstname24 are not equal"), //$NON-NLS-1$
146       () -> assertTrue(firstname1.equals(firstname4), "firstname14 are not equal"), //$NON-NLS-1$
147       () -> assertFalse(firstname1.equals(firstname3), "firstname13 are equal"), //$NON-NLS-1$
148       () -> assertFalse(firstname3.equals(firstname1), "firstname31 are equal"), //$NON-NLS-1$
149       () -> assertFalse(firstname1.equals(null), "firstname10 is equal") //$NON-NLS-1$
150     );
151    }
152 
153 
154   /**
155    * Test toString.
156    */
157   @Test
158   /* default */ void testToString()
159    {
160     final Firstname firstname = Firstname.of(FirstnameTests.FIRSTNAME);
161     assertEquals("Firstname[firstname=firstname]", firstname.toString(), "toString not equal"); //$NON-NLS-1$ //$NON-NLS-2$
162    }
163 
164 
165   /**
166    * Test compareTo.
167    */
168   @Test
169   @SuppressWarnings("java:S5785")
170   /* default */ 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"); //$NON-NLS-1$
175     final Firstname firstname4 = Firstname.of(FirstnameTests.FIRSTNAMEZ);
176     final Firstname firstname5 = Firstname.of(FirstnameTests.FIRSTNAME);
177     assertAll("testCompareTo", //$NON-NLS-1$
178       () -> assertTrue(firstname1.compareTo(firstname2) == -firstname2.compareTo(firstname1), "reflexive1"), //$NON-NLS-1$
179       () -> assertTrue(firstname1.compareTo(firstname3) == -firstname3.compareTo(firstname1), "reflexive2"), //$NON-NLS-1$
180       () -> assertTrue((firstname4.compareTo(firstname3) > 0) && (firstname3.compareTo(firstname1) > 0) && (firstname4.compareTo(firstname1) > 0), "transitive1"), //$NON-NLS-1$
181       () -> assertTrue((firstname1.compareTo(firstname2) == 0) && (Math.abs(firstname1.compareTo(firstname5)) == Math.abs(firstname2.compareTo(firstname5))), "sgn1"), //$NON-NLS-1$
182       () -> assertTrue((firstname1.compareTo(firstname2) == 0) && firstname1.equals(firstname2), "equals") //$NON-NLS-1$
183     );
184    }
185 
186  }