View Javadoc
1   /*
2    * Copyright (C) 2020-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.TopLevelDomain;
19  import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
20  
21  
22  /**
23   * Top level domain 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 TopLevelDomainTests
27   {
28    /**
29     * FR - france.
30     */
31    private static final String FR = "FR"; //$NON-NLS-1$
32  
33    /**
34     * DE germany.
35     */
36    private static final String DE = "DE"; //$NON-NLS-1$
37  
38    /**
39     * Illegal argument exception expected constant.
40     */
41    private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected"; //$NON-NLS-1$
42  
43    /**
44     * TopLevelDomain not as expected constant.
45     */
46    private static final String TLD_NOT_AS_EXPECTED = "TopLevelDomain not as expected"; //$NON-NLS-1$
47  
48  
49    /**
50     * Default constructor.
51     */
52    /* default */ TopLevelDomainTests()
53     {
54      super();
55     }
56  
57  
58    /**
59     * Test TopLevelDomain with valid top level domains.
60     *
61     * @param topLevelDomain TopLevelDomain
62     */
63    @ParameterizedTest
64    @ValueSource(strings = {"de", "XN--VERMGENSBERATUNG-PWB"}) // , "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJK"
65    /* default */ 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     * Test TopLevelDomain with top level domain to short or long.
74     *
75     * @param topLevelDomain TopLevelDomain
76     */
77    @ParameterizedTest
78    @ValueSource(strings = {"A", "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKL"})
79    /* default */ void testTopLevelDomainLength(final String topLevelDomain)
80     {
81      assertThrows(IllegalArgumentException.class, () ->
82       {
83        /* final TopLevelDomain cleanTopLevelDomain = */ TopLevelDomain.of(topLevelDomain);
84       }, TopLevelDomainTests.ILLEGAL_ARGUMENT
85      );
86     }
87  
88  
89    /**
90     * Test TopLevelDomain with illegal parameters.
91     *
92     * @param topLevelDomain TopLevelDomain
93     */
94    @ParameterizedTest
95    @ValueSource(strings = {".DE", "-DE", "DE-", "D~E", "ZZ"})
96    /* default */ void testTopLevelDomainIllegalParameters(final String topLevelDomain)
97     {
98      assertThrows(IllegalArgumentException.class, () ->
99       {
100       /* final TopLevelDomain cleanTopLevelDomain = */ TopLevelDomain.of(topLevelDomain);
101      }, TopLevelDomainTests.ILLEGAL_ARGUMENT
102     );
103    }
104 
105 
106   /**
107    * Test get topLevelDomain.
108    */
109   @Test
110   /* default */ 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    * Test hash code.
119    */
120   @Test
121   /* default */ 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", //$NON-NLS-1$
127       () -> assertEquals(topLevelDomain1.hashCode(), topLevelDomain2.hashCode(), "hashCodes are not equal"), //$NON-NLS-1$
128       () -> assertNotEquals(topLevelDomain1.hashCode(), topLevelDomain3.hashCode(), "hashCodes are equal") //$NON-NLS-1$
129     );
130    }
131 
132 
133   /**
134    * Test equals.
135    */
136   @Test
137   @SuppressWarnings("java:S5785")
138   /* default */ 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", //$NON-NLS-1$
145       () -> assertTrue(topLevelDomain1.equals(topLevelDomain1), "topLevelDomain11 is not equal"), //$NON-NLS-1$
146       () -> assertTrue(topLevelDomain1.equals(topLevelDomain2), "topLevelDomain12 are not equal"), //$NON-NLS-1$
147       () -> assertTrue(topLevelDomain2.equals(topLevelDomain1), "topLevelDomain21 are not equal"), //$NON-NLS-1$
148       () -> assertTrue(topLevelDomain2.equals(topLevelDomain4), "topLevelDomain24 are not equal"), //$NON-NLS-1$
149       () -> assertTrue(topLevelDomain1.equals(topLevelDomain4), "topLevelDomain14 are not equal"), //$NON-NLS-1$
150       () -> assertFalse(topLevelDomain1.equals(topLevelDomain3), "topLevelDomain13 are equal"), //$NON-NLS-1$
151       () -> assertFalse(topLevelDomain3.equals(topLevelDomain1), "topLevelDomain31 are equal"), //$NON-NLS-1$
152       () -> assertFalse(topLevelDomain1.equals(null), "topLevelDomain10 is equal") //$NON-NLS-1$
153     );
154    }
155 
156 
157   /**
158    * Test toString.
159    */
160   @Test
161   /* default */ void testToString()
162    {
163     final TopLevelDomain topLevelDomain = TopLevelDomain.of(TopLevelDomainTests.DE);
164     assertEquals("TopLevelDomain[topLevelDomain=DE]", topLevelDomain.toString(), "toString not equal"); //$NON-NLS-1$ //$NON-NLS-2$
165    }
166 
167 
168   /**
169    * Test compareTo.
170    */
171   @Test
172   @SuppressWarnings("java:S5785")
173   /* default */ 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"); //$NON-NLS-1$
179     final TopLevelDomain topLevelDomain5 = TopLevelDomain.of(TopLevelDomainTests.DE);
180     assertAll("testCompareTo", //$NON-NLS-1$
181       () -> assertTrue(topLevelDomain1.compareTo(topLevelDomain2) == -topLevelDomain2.compareTo(topLevelDomain1), "reflexive1"), //$NON-NLS-1$
182       () -> assertTrue(topLevelDomain1.compareTo(topLevelDomain3) == -topLevelDomain3.compareTo(topLevelDomain1), "reflexive2"), //$NON-NLS-1$
183       () -> assertTrue((topLevelDomain4.compareTo(topLevelDomain3) > 0) && (topLevelDomain3.compareTo(topLevelDomain1) > 0) && (topLevelDomain4.compareTo(topLevelDomain1) > 0), "transitive1"), //$NON-NLS-1$
184       () -> assertTrue((topLevelDomain1.compareTo(topLevelDomain2) == 0) && (Math.abs(topLevelDomain1.compareTo(topLevelDomain5)) == Math.abs(topLevelDomain2.compareTo(topLevelDomain5))), "sgn1"), //$NON-NLS-1$
185       () -> assertTrue((topLevelDomain1.compareTo(topLevelDomain2) == 0) && topLevelDomain1.equals(topLevelDomain2), "equals") //$NON-NLS-1$
186     );
187    }
188 
189  }