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.Province;
19  import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
20  
21  
22  /**
23   * Province 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 ProvinceTests
27   {
28    /**
29     * abc.
30     */
31    private static final String ABC = "abc"; //$NON-NLS-1$
32  
33    /**
34     * abcd.
35     */
36    private static final String ABCD = "abcd"; //$NON-NLS-1$
37  
38    /**
39     * def.
40     */
41    private static final String DEF = "def"; //$NON-NLS-1$
42  
43    /**
44     * Illegal argument exception expected constant.
45     */
46    private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected"; //$NON-NLS-1$
47  
48    /**
49     * Province not as expected constant.
50     */
51    private static final String PROVINCE_NOT_AS_EXPECTED = "Province not as expected"; //$NON-NLS-1$
52  
53  
54    /**
55     * Default constructor.
56     */
57    /* default */ ProvinceTests()
58     {
59      super();
60     }
61  
62  
63    /**
64     * Test correct Province.
65     *
66     * @param province Province
67     */
68    @ParameterizedTest
69    @ValueSource(strings = {"A", "Abcdefghijklmnopqr"})
70    /* default */ void testProvinceCorrect(final String province)
71     {
72      final Province cleanProvince = Province.of(province);
73      assertEquals(province, cleanProvince.stringValue(), ProvinceTests.PROVINCE_NOT_AS_EXPECTED);
74     }
75  
76  
77    /**
78     * Test Province with wrong lengths.
79     *
80     * @param province Province
81     */
82    @ParameterizedTest
83    @ValueSource(strings = {"", "Abcdefghijklmnopqrs"})
84    /* default */ void testProvinceLength(final String province)
85     {
86      assertThrows(IllegalArgumentException.class, () ->
87       {
88        /* final Province cleanProvince = */ Province.of(province);
89       }, ProvinceTests.ILLEGAL_ARGUMENT
90      );
91     }
92  
93  
94    /**
95     * Test wrong Province.
96     *
97     * @param province Province
98     */
99    @ParameterizedTest
100   @ValueSource(strings = {"abc0815", "abc_def"})
101   /* default */ void testProvinceWrong(final String province)
102    {
103     assertThrows(IllegalArgumentException.class, () ->
104      {
105       /* final Province cleanProvince = */ Province.of(province);
106      }, ProvinceTests.ILLEGAL_ARGUMENT
107     );
108    }
109 
110 
111   /**
112    * Test get province.
113    */
114   @Test
115   /* default */ void testStringValue()
116    {
117     final Province province = Province.of(ProvinceTests.ABCD);
118     assertEquals(ProvinceTests.ABCD, province.stringValue(), ProvinceTests.PROVINCE_NOT_AS_EXPECTED);
119    }
120 
121 
122   /**
123    * Test hash code.
124    */
125   @Test
126   /* default */ void testHashCode()
127    {
128     final Province province1 = Province.of(ProvinceTests.ABC);
129     final Province province2 = Province.of(ProvinceTests.ABC);
130     final Province province3 = Province.of(ProvinceTests.DEF);
131     assertAll("testHashCode", //$NON-NLS-1$
132       () -> assertEquals(province1.hashCode(), province2.hashCode(), "hashCodes are not equal"), //$NON-NLS-1$
133       () -> assertNotEquals(province1.hashCode(), province3.hashCode(), "hashCodes are equal") //$NON-NLS-1$
134     );
135    }
136 
137 
138   /**
139    * Test equals.
140    */
141   @Test
142   @SuppressWarnings("java:S5785")
143   /* default */ void testEquals()
144    {
145     final Province province1 = Province.of(ProvinceTests.ABC);
146     final Province province2 = Province.of(ProvinceTests.ABC);
147     final Province province3 = Province.of(ProvinceTests.DEF);
148     final Province province4 = Province.of(ProvinceTests.ABC);
149     assertAll("testEquals", //$NON-NLS-1$
150       () -> assertTrue(province1.equals(province1), "province11 is not equal"), //$NON-NLS-1$
151       () -> assertTrue(province1.equals(province2), "province12 are not equal"), //$NON-NLS-1$
152       () -> assertTrue(province2.equals(province1), "province21 are not equal"), //$NON-NLS-1$
153       () -> assertTrue(province2.equals(province4), "province24 are not equal"), //$NON-NLS-1$
154       () -> assertTrue(province1.equals(province4), "province14 are not equal"), //$NON-NLS-1$
155       () -> assertFalse(province1.equals(province3), "province13 are equal"), //$NON-NLS-1$
156       () -> assertFalse(province3.equals(province1), "province31 are equal"), //$NON-NLS-1$
157       () -> assertFalse(province1.equals(null), "province10 is equal") //$NON-NLS-1$
158     );
159    }
160 
161 
162   /**
163    * Test toString.
164    */
165   @Test
166   /* default */ void testToString()
167    {
168     final Province province = Province.of(ProvinceTests.ABC);
169     assertEquals("Province[province=abc]", province.toString(), "toString not equal"); //$NON-NLS-1$ //$NON-NLS-2$
170    }
171 
172 
173   /**
174    * Test compareTo.
175    */
176   @Test
177   @SuppressWarnings("java:S5785")
178   /* default */ void testCompareTo()
179    {
180     final Province province1 = Province.of(ProvinceTests.ABC);
181     final Province province2 = Province.of(ProvinceTests.ABC);
182     final Province province3 = Province.of(ProvinceTests.DEF);
183     final Province province4 = Province.of("ghi"); //$NON-NLS-1$
184     final Province province5 = Province.of(ProvinceTests.ABC);
185     assertAll("testCompareTo", //$NON-NLS-1$
186       () -> assertTrue(province1.compareTo(province2) == -province2.compareTo(province1), "reflexive1"), //$NON-NLS-1$
187       () -> assertTrue(province1.compareTo(province3) == -province3.compareTo(province1), "reflexive2"), //$NON-NLS-1$
188       () -> assertTrue((province4.compareTo(province3) > 0) && (province3.compareTo(province1) > 0) && (province4.compareTo(province1) > 0), "transitive1"), //$NON-NLS-1$
189       () -> assertTrue((province1.compareTo(province2) == 0) && (Math.abs(province1.compareTo(province5)) == Math.abs(province2.compareTo(province5))), "sgn1"), //$NON-NLS-1$
190       () -> assertTrue((province1.compareTo(province2) == 0) && province1.equals(province2), "equals") //$NON-NLS-1$
191     );
192    }
193 
194  }