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.BuildingNr;
19  import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
20  
21  
22  /**
23   * Building number tests.
24   */
25  @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "CE_CLASS_ENVY"})
26  final class BuildingNrTests
27   {
28    /**
29     * Test compare to.
30     */
31    private static final String TEST_COMPARE_TO = "testCompareTo"; //$NON-NLS-1$
32  
33    /**
34     * Building nr 23.
35     */
36    private static final String BUILDINGNR23 = "23"; //$NON-NLS-1$
37  
38    /**
39     * Building nr 23 1/4.
40     */
41    private static final String BUILDINGNR23_1_4 = "23 1/4"; //$NON-NLS-1$
42  
43    /**
44     * Building nr 42.
45     */
46    private static final String BUILDINGNR42 = "42"; //$NON-NLS-1$
47  
48    /**
49     * Illegal argument exception expected.
50     */
51    private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected"; //$NON-NLS-1$
52  
53    /**
54     * BuildingNr not as expected.
55     */
56    private static final String BUILDING_NR_NOT_AS_EXPECTED = "BuildingNr not as expected"; //$NON-NLS-1$
57  
58  
59    /**
60     * Default constructor.
61     */
62    /* default */ BuildingNrTests()
63     {
64      super();
65     }
66  
67  
68    /**
69     * Test correct BuildingNr.
70     *
71     * @param buildingNr BuildingNr
72     */
73    @ParameterizedTest
74    @ValueSource(strings = {"9", BuildingNrTests.BUILDINGNR42, "42-44", "42/44", "42 a", "42 1/3", "42 1/3 a", "29998-29999 998/999 a", "29999", "42 4/4"})
75    /* default */ void testBuildingNrCorrect(final String buildingNr)
76     {
77      final BuildingNr cleanBuildingNr = BuildingNr.of(buildingNr);
78      assertEquals(buildingNr, cleanBuildingNr.stringValue(), BuildingNrTests.BUILDING_NR_NOT_AS_EXPECTED);
79     }
80  
81  
82    /**
83     * Test BuildingNr with wrong lengths.
84     *
85     * @param buildingNr Building number
86     */
87    @ParameterizedTest
88    @ValueSource(strings = {"", "1234567890123456789012"})
89    /* default */ void testBuildingNrLength(final String buildingNr)
90     {
91      assertThrows(IllegalArgumentException.class, () ->
92       {
93        /* final BuildingNr cleanBuildingNr = */ BuildingNr.of(buildingNr);
94       }, BuildingNrTests.ILLEGAL_ARGUMENT
95      );
96     }
97  
98  
99    /**
100    * Test wrong BuildingNr.
101    *
102    * @param buildingNr Building number
103    */
104   @ParameterizedTest
105   @ValueSource(strings = {"4a2", "30000", "43-42", "42-42", "42 5/4"})
106   /* default */ void testBuidlingNrWrong(final String buildingNr)
107    {
108     assertThrows(IllegalArgumentException.class, () ->
109      {
110       /* final BuildingNr cleanBuildingNr = */ BuildingNr.of(buildingNr);
111      }, BuildingNrTests.ILLEGAL_ARGUMENT
112     );
113    }
114 
115 
116   /**
117    * Test get buildingNr.
118    */
119   @Test
120   /* default */ void testStringValue()
121    {
122     final BuildingNr buildingNr = BuildingNr.of(BuildingNrTests.BUILDINGNR42);
123     assertEquals(BuildingNrTests.BUILDINGNR42, buildingNr.stringValue(), BuildingNrTests.BUILDING_NR_NOT_AS_EXPECTED);
124    }
125 
126 
127   /**
128    * Test hash code.
129    */
130   @Test
131   /* default */ void testHashCode()
132    {
133     final BuildingNr buildingNr1 = BuildingNr.of(BuildingNrTests.BUILDINGNR23);
134     final BuildingNr buildingNr2 = BuildingNr.of(BuildingNrTests.BUILDINGNR23);
135     final BuildingNr buildingNr3 = BuildingNr.of(BuildingNrTests.BUILDINGNR42);
136     assertAll("testHashCode", //$NON-NLS-1$
137       () -> assertEquals(buildingNr1.hashCode(), buildingNr2.hashCode(), "hashCodes are not equal"), //$NON-NLS-1$
138       () -> assertNotEquals(buildingNr1.hashCode(), buildingNr3.hashCode(), "hashCodes are equal") //$NON-NLS-1$
139     );
140    }
141 
142 
143   /**
144    * Test equals.
145    */
146   @Test
147   @SuppressWarnings("java:S5785")
148   /* default */ void testEquals()
149    {
150     final BuildingNr buildingNr1 = BuildingNr.of(BuildingNrTests.BUILDINGNR23);
151     final BuildingNr buildingNr2 = BuildingNr.of(BuildingNrTests.BUILDINGNR23);
152     final BuildingNr buildingNr3 = BuildingNr.of(BuildingNrTests.BUILDINGNR42);
153     final BuildingNr buildingNr4 = BuildingNr.of(BuildingNrTests.BUILDINGNR23);
154     assertAll("testEquals", //$NON-NLS-1$
155       () -> assertTrue(buildingNr1.equals(buildingNr1), "BuildingNr11 is not equal"), //$NON-NLS-1$
156       () -> assertTrue(buildingNr1.equals(buildingNr2), "BuildingNr12 are not equal"), //$NON-NLS-1$
157       () -> assertTrue(buildingNr2.equals(buildingNr1), "BuildingNr21 are not equal"), //$NON-NLS-1$
158       () -> assertTrue(buildingNr2.equals(buildingNr4), "BuildingNr24 are not equal"), //$NON-NLS-1$
159       () -> assertTrue(buildingNr1.equals(buildingNr4), "BuildingNr14 are not equal"), //$NON-NLS-1$
160       () -> assertFalse(buildingNr1.equals(buildingNr3), "BuildingNr13 are equal"), //$NON-NLS-1$
161       () -> assertFalse(buildingNr3.equals(buildingNr1), "BuildingNr31 are equal"), //$NON-NLS-1$
162       () -> assertFalse(buildingNr1.equals(null), "BuildingNr10 is equal") //$NON-NLS-1$
163     );
164    }
165 
166 
167   /**
168    * Test toString.
169    */
170   @Test
171   /* default */ void testToString()
172    {
173     final BuildingNr buildingNr = BuildingNr.of(BuildingNrTests.BUILDINGNR42);
174     assertEquals("BuildingNr[buildingNr=42]", buildingNr.toString(), "toString not equal"); //$NON-NLS-1$ //$NON-NLS-2$
175    }
176 
177 
178   /**
179    * Test compareTo.
180    */
181   @Test
182   @SuppressWarnings("java:S5785")
183   /* default */ void testCompareTo()
184    {
185     final BuildingNr buildingNr1 = BuildingNr.of(BuildingNrTests.BUILDINGNR23);
186     final BuildingNr buildingNr2 = BuildingNr.of(BuildingNrTests.BUILDINGNR23);
187     final BuildingNr buildingNr3 = BuildingNr.of(BuildingNrTests.BUILDINGNR42);
188     final BuildingNr buildingNr4 = BuildingNr.of("99"); //$NON-NLS-1$
189     final BuildingNr buildingNr5 = BuildingNr.of(BuildingNrTests.BUILDINGNR23);
190     assertAll(BuildingNrTests.TEST_COMPARE_TO,
191       () -> assertTrue(buildingNr1.compareTo(buildingNr2) == -buildingNr2.compareTo(buildingNr1), "reflexive1"), //$NON-NLS-1$
192       () -> assertTrue(buildingNr1.compareTo(buildingNr3) == -buildingNr3.compareTo(buildingNr1), "reflexive2"), //$NON-NLS-1$
193       () -> assertTrue((buildingNr4.compareTo(buildingNr3) > 0) && (buildingNr3.compareTo(buildingNr1) > 0) && (buildingNr4.compareTo(buildingNr1) > 0), "transitive1"), //$NON-NLS-1$
194       () -> assertTrue((buildingNr1.compareTo(buildingNr2) == 0) && (Math.abs(buildingNr1.compareTo(buildingNr5)) == Math.abs(buildingNr2.compareTo(buildingNr5))), "sgn1"), //$NON-NLS-1$
195       () -> assertTrue((buildingNr1.compareTo(buildingNr2) == 0) && buildingNr1.equals(buildingNr2), "equals") //$NON-NLS-1$
196     );
197    }
198 
199 
200   /**
201    * Test compareTo ok.
202    */
203   @Test
204   @SuppressWarnings("java:S5785")
205   /* default */ void testCompareToOk()
206    {
207     final BuildingNr buildingNr1 = BuildingNr.of(BuildingNrTests.BUILDINGNR23);
208     final BuildingNr buildingNr2 = BuildingNr.of(BuildingNrTests.BUILDINGNR23);
209     final BuildingNr buildingNr3 = BuildingNr.of(BuildingNrTests.BUILDINGNR23_1_4);
210     final BuildingNr buildingNr4 = BuildingNr.of(BuildingNrTests.BUILDINGNR23_1_4);
211     final BuildingNr buildingNr5 = BuildingNr.of("23 2/4"); //$NON-NLS-1$
212     final BuildingNr buildingNr6 = BuildingNr.of("23 a"); //$NON-NLS-1$
213     final BuildingNr buildingNr7 = BuildingNr.of("23 b"); //$NON-NLS-1$
214     final BuildingNr buildingNr8 = BuildingNr.of("23 1/4 a"); //$NON-NLS-1$
215     final BuildingNr buildingNr9 = BuildingNr.of("23 1/4 b"); //$NON-NLS-1$
216     assertAll(BuildingNrTests.TEST_COMPARE_TO,
217       () -> assertTrue(buildingNr1.compareTo(buildingNr2) == 0, "equal1"), //$NON-NLS-1$
218       () -> assertTrue(buildingNr1.compareTo(buildingNr3) < 0, "23 < 23 1/4"), //$NON-NLS-1$
219       () -> assertTrue(buildingNr3.compareTo(buildingNr1) > 0, "23 1/4 > 23"), //$NON-NLS-1$
220       () -> assertTrue(buildingNr3.compareTo(buildingNr4) == 0, "equal2"), //$NON-NLS-1$
221       () -> assertTrue(buildingNr4.compareTo(buildingNr5) < 0, "23 1/4 < 23 2/4"), //$NON-NLS-1$
222       () -> assertTrue(buildingNr1.compareTo(buildingNr6) < 0, "23 < 23 a"), //$NON-NLS-1$
223       () -> assertTrue(buildingNr6.compareTo(buildingNr1) > 0, "23 a > 23"), //$NON-NLS-1$
224       () -> assertTrue(buildingNr6.compareTo(buildingNr7) < 0, "23 a < 23 b"), //$NON-NLS-1$
225       () -> assertTrue(buildingNr8.compareTo(buildingNr9) < 0, "23 1/4 a < 23 1/4 b") //$NON-NLS-1$
226     );
227    }
228 
229 
230   /**
231    * Test compareTo wrong.
232    */
233   @Test
234   /* default */ void testCompareToWrong1()
235    {
236     final BuildingNr buildingNr1 = BuildingNr.of("23 1/3"); //$NON-NLS-1$
237     final BuildingNr buildingNr2 = BuildingNr.of(BuildingNrTests.BUILDINGNR23_1_4);
238     assertThrows(IllegalStateException.class, () ->
239      {
240       /* final int result = */ buildingNr1.compareTo(buildingNr2);
241      }, "Illegal state exception expected" //$NON-NLS-1$
242     );
243    }
244 
245  }