3535/**
3636 * Unit tests for {@link FlagSet} class.
3737 */
38- public class TestFlagSet extends AbstractHadoopTestBase {
38+ public final class TestFlagSet extends AbstractHadoopTestBase {
3939
40- public static final String KEY = "key" ;
40+ private static final String KEY = "key" ;
41+
42+ private static final String KEYDOT = KEY + "." ;
4143
4244 /**
4345 * Flagset used in tests and assertions.
4446 */
4547 private FlagSet <SimpleEnum > flagSet =
46- createFlagSet (SimpleEnum .class , KEY + "." , noneOf (SimpleEnum .class ));
48+ createFlagSet (SimpleEnum .class , KEYDOT , noneOf (SimpleEnum .class ));
4749
4850 /**
4951 * Simple Enums.
@@ -54,7 +56,7 @@ private enum SimpleEnum { a, b, c }
5456 * Test that an entry can be enabled and disabled.
5557 */
5658 @ Test
57- public void testEntryEnableDisable () throws Throwable {
59+ public void testEntryEnableDisable () {
5860 Assertions .assertThat (flagSet .flags ()).isEmpty ();
5961 assertDisabled (SimpleEnum .a );
6062 flagSet .enable (SimpleEnum .a );
@@ -67,7 +69,7 @@ public void testEntryEnableDisable() throws Throwable {
6769 * Test the setter.
6870 */
6971 @ Test
70- public void testSetMethod () throws Throwable {
72+ public void testSetMethod () {
7173 Assertions .assertThat (flagSet .flags ()).isEmpty ();
7274 flagSet .set (SimpleEnum .a , true );
7375 assertEnabled (SimpleEnum .a );
@@ -105,12 +107,12 @@ public void testMutability() throws Throwable {
105107 public void testToString () throws Throwable {
106108 // empty
107109 assertStringValue ("{}" );
108- assertConfigurationString ("" );
110+ assertConfigurationStringMatches ("" );
109111
110112 // single value
111113 flagSet .enable (SimpleEnum .a );
112114 assertStringValue ("{a}" );
113- assertConfigurationString ("a" );
115+ assertConfigurationStringMatches ("a" );
114116
115117 // add a second value.
116118 flagSet .enable (SimpleEnum .b );
@@ -130,7 +132,7 @@ private void assertStringValue(final String expected) {
130132 /**
131133 * Assert the configuration string form matches that expected.
132134 */
133- public void assertConfigurationString (final String expected ) {
135+ public void assertConfigurationStringMatches (final String expected ) {
134136 Assertions .assertThat (flagSet .toConfigurationString ())
135137 .describedAs ("Configuration string of %s" , flagSet )
136138 .isEqualTo (expected );
@@ -141,23 +143,34 @@ public void assertConfigurationString(final String expected) {
141143 * Multiple entries must be parsed, whitespace trimmed.
142144 */
143145 @ Test
144- public void testConfEntry () throws Throwable {
145- final Configuration conf = mkConf ("a\t ,\n c " );
146- flagSet = buildFlagSet (SimpleEnum .class , conf , KEY , true );
146+ public void testConfEntry () {
147+ flagSet = flagSetFromConfig ("a\t ,\n c " , true );
147148 assertFlagSetMatches (flagSet , SimpleEnum .a , SimpleEnum .c );
148149 assertHasCapability (KEY + ".a" );
149150 assertHasCapability (KEY + ".c" );
150151 assertLacksCapability (KEY + ".b" );
151152 }
152153
154+ /**
155+ * Create a flagset from a configuration string.
156+ * @param string configuration string.
157+ * @param ignoreUnknown should unknown values be ignored?
158+ * @return a flagset
159+ */
160+ private static FlagSet <SimpleEnum > flagSetFromConfig (final String string ,
161+ final boolean ignoreUnknown ) {
162+ final Configuration conf = mkConf (string );
163+ final FlagSet <SimpleEnum > fs = buildFlagSet (SimpleEnum .class , conf , KEY , ignoreUnknown );
164+ return fs ;
165+ }
166+
153167 /**
154168 * Test parsing from a configuration file,
155169 * where an entry is unknown; the builder is set to ignoreUnknown.
156170 */
157171 @ Test
158- public void testConfEntryWithUnknownIgnored () throws Throwable {
159- final Configuration conf = mkConf ("a, unknown" );
160- flagSet = buildFlagSet (SimpleEnum .class , conf , KEY , true );
172+ public void testConfEntryWithUnknownIgnored () {
173+ flagSet = flagSetFromConfig ("a, unknown" , true );
161174 assertFlagSetMatches (flagSet , SimpleEnum .a );
162175 assertHasCapability (KEY + ".a" );
163176 assertLacksCapability (KEY + ".b" );
@@ -168,9 +181,8 @@ public void testConfEntryWithUnknownIgnored() throws Throwable {
168181 * the same entry is duplicated.
169182 */
170183 @ Test
171- public void testDuplicateConfEntry () throws Throwable {
172- final Configuration conf = mkConf ("a,\t a,\n a" );
173- flagSet = buildFlagSet (SimpleEnum .class , conf , KEY , true );
184+ public void testDuplicateConfEntry () {
185+ flagSet = flagSetFromConfig ("a,\t a,\n a\" " , true );
174186 assertFlagSetMatches (flagSet , SimpleEnum .a );
175187 assertHasCapability (KEY + ".a" );
176188 }
@@ -181,7 +193,7 @@ public void testDuplicateConfEntry() throws Throwable {
181193 @ Test
182194 public void testConfUnknownFailure () throws Throwable {
183195 intercept (IllegalArgumentException .class , () ->
184- buildFlagSet ( SimpleEnum . class , mkConf ( "a, unknown" ), KEY , false ));
196+ flagSetFromConfig ( "a, unknown" , false ));
185197 }
186198
187199 /**
@@ -220,44 +232,66 @@ private void assertLacksCapability(final String capability) {
220232 */
221233 @ Test
222234 public void testFlagSetStarEntry () {
223- final Configuration conf = mkConf ("*" );
224- flagSet = buildFlagSet (SimpleEnum .class , conf , KEY , false );
235+ flagSet = flagSetFromConfig ("*" , false );
225236 assertFlags (SimpleEnum .a , SimpleEnum .b , SimpleEnum .c );
226237 assertHasCapability (KEY + ".a" );
227238 assertHasCapability (KEY + ".b" );
228239 }
229240
230241 @ Test
231242 public void testRoundTrip () {
232- final FlagSet <SimpleEnum > s1 = createFlagSet (SimpleEnum .class , KEY + "." , allOf (SimpleEnum .class ));
243+ final FlagSet <SimpleEnum > s1 = createFlagSet (SimpleEnum .class , KEYDOT , allOf (SimpleEnum .class ));
233244 final FlagSet <SimpleEnum > s2 = roundTrip (s1 );
234245 Assertions .assertThat (s1 .flags ()).isEqualTo (s2 .flags ());
235246 assertFlagSetMatches (s2 , SimpleEnum .a , SimpleEnum .b , SimpleEnum .c );
236247 }
237248
238249 @ Test
239250 public void testEmptyRoundTrip () {
240- final FlagSet <SimpleEnum > s1 = createFlagSet (SimpleEnum .class , KEY + "." , noneOf (SimpleEnum .class ));
251+ final FlagSet <SimpleEnum > s1 = createFlagSet (SimpleEnum .class , KEYDOT , noneOf (SimpleEnum .class ));
241252 final FlagSet <SimpleEnum > s2 = roundTrip (s1 );
242- Assertions .assertThat (s1 .flags ()).isEqualTo (s2 .flags ());
253+ Assertions .assertThat (s1 .flags ())
254+ .isEqualTo (s2 .flags ());
243255 Assertions .assertThat (s2 .isEmpty ())
244256 .describedAs ("empty flagset %s" , s2 )
245257 .isTrue ();
246258 assertFlagSetMatches (flagSet );
247259 }
248260
249261 @ Test
250- public void testSetIsClone () throws Throwable {
262+ public void testSetIsClone () {
251263 final EnumSet <SimpleEnum > flags = noneOf (SimpleEnum .class );
252- final FlagSet <SimpleEnum > s1 = createFlagSet (SimpleEnum .class , KEY + "." , flags );
264+ final FlagSet <SimpleEnum > s1 = createFlagSet (SimpleEnum .class , KEYDOT , flags );
253265 s1 .enable (SimpleEnum .b );
254266
255267 // set a source flag
256268 flags .add (SimpleEnum .a );
257269
258270 // verify the derived flagset is unchanged
259271 assertFlagSetMatches (s1 , SimpleEnum .b );
272+ }
260273
274+ @ Test
275+ public void testEquality () {
276+ final FlagSet <SimpleEnum > s1 = createFlagSet (SimpleEnum .class , KEYDOT , SimpleEnum .a );
277+ final FlagSet <SimpleEnum > s2 = createFlagSet (SimpleEnum .class , KEYDOT , SimpleEnum .a );
278+ // make one of them immutable
279+ s2 .makeImmutable ();
280+ Assertions .assertThat (s1 )
281+ .describedAs ("s1 == s2" )
282+ .isEqualTo (s2 );
283+ Assertions .assertThat (s1 .hashCode ())
284+ .describedAs ("hashcode of s1 == hashcode of s2" )
285+ .isEqualTo (s2 .hashCode ());
286+ }
287+
288+ @ Test
289+ public void testInequality () {
290+ final FlagSet <SimpleEnum > s1 = createFlagSet (SimpleEnum .class , KEYDOT , noneOf (SimpleEnum .class ));
291+ final FlagSet <SimpleEnum > s2 = createFlagSet (SimpleEnum .class , KEYDOT , SimpleEnum .a , SimpleEnum .b );
292+ Assertions .assertThat (s1 )
293+ .describedAs ("s1 == s2" )
294+ .isNotEqualTo (s2 );
261295 }
262296
263297 /**
@@ -272,7 +306,7 @@ private FlagSet<SimpleEnum> roundTrip(FlagSet<SimpleEnum> flagset) {
272306 }
273307
274308 /**
275- * Assert a flag is enabled.
309+ * Assert a flag is enabled in the {@link #flagSet} field .
276310 * @param flag flag to check
277311 */
278312 private void assertEnabled (final SimpleEnum flag ) {
@@ -282,7 +316,7 @@ private void assertEnabled(final SimpleEnum flag) {
282316 }
283317
284318 /**
285- * Assert a flag is disabled.
319+ * Assert a flag is disabled in the {@link #flagSet} field .
286320 * @param flag flag to check
287321 */
288322 private void assertDisabled (final SimpleEnum flag ) {
@@ -291,9 +325,8 @@ private void assertDisabled(final SimpleEnum flag) {
291325 .isFalse ();
292326 }
293327
294-
295328 /**
296- * Assert that a set of flags are enabled.
329+ * Assert that a set of flags are enabled in the {@link #flagSet} field .
297330 * @param flags flags which must be set.
298331 */
299332 private void assertFlags (final SimpleEnum ... flags ) {
0 commit comments