@Test
 public void testAddReturnsTrueIfSuccessfullyAdded() throws Exception {
   final AppenderControlArraySet set = new AppenderControlArraySet();
   assertTrue(set.add(createControl("A")));
   assertTrue(set.add(createControl("B")));
   assertTrue(set.add(createControl("C")));
 }
 @Test
 public void testAddMakesNonEmpty() throws Exception {
   final AppenderControlArraySet set = new AppenderControlArraySet();
   assertTrue(set.isEmpty());
   set.add(createControl("A"));
   assertFalse(set.isEmpty());
 }
 @Test
 public void testAddReturnsFalseIfAlreadyInSet() throws Exception {
   final AppenderControlArraySet set = new AppenderControlArraySet();
   assertTrue(set.add(createControl("A")));
   assertTrue(set.add(createControl("B")));
   assertFalse(set.add(createControl("B")));
   assertFalse(set.add(createControl("B")));
   assertFalse(set.add(createControl("A")));
   assertEquals(2, set.get().length);
 }
 @Test
 public void testGetReturnsAddedItems() throws Exception {
   final AppenderControlArraySet set = new AppenderControlArraySet();
   final AppenderControl[] controls =
       new AppenderControl[] {createControl("A"), createControl("B"), createControl("C")};
   for (final AppenderControl ctl : controls) {
     set.add(ctl);
   }
   assertEquals(3, set.get().length);
   assertArrayEquals(controls, set.get());
 }
 @Test
 public void testClearReturnsAllItems() throws Exception {
   final AppenderControlArraySet set = new AppenderControlArraySet();
   final AppenderControl[] controls =
       new AppenderControl[] {createControl("A"), createControl("B"), createControl("C")};
   for (final AppenderControl ctl : controls) {
     set.add(ctl);
   }
   assertEquals(3, set.get().length);
   final AppenderControl[] previous = set.clear();
   assertArrayEquals(previous, controls);
 }
 @Test
 public void testAsMap() throws Exception {
   final AppenderControlArraySet set = new AppenderControlArraySet();
   final AppenderControl[] controls =
       new AppenderControl[] {
         createControl("A"), createControl("B"), createControl("C"), createControl("D")
       };
   for (final AppenderControl ctl : controls) {
     set.add(ctl);
   }
   final Map<String, Appender> expected = new HashMap<>();
   for (final AppenderControl ctl : controls) {
     expected.put(ctl.getAppenderName(), ctl.getAppender());
   }
   assertEquals(expected, set.asMap());
 }
 @Test
 public void testAddDoesNotAppendersWithSameName() throws Exception {
   final AppenderControlArraySet set = new AppenderControlArraySet();
   final AppenderControl[] controls =
       new AppenderControl[] {
         createControl("A"),
         createControl("B"),
         createControl("B"),
         createControl("B"),
         createControl("A")
       };
   for (final AppenderControl ctl : controls) {
     set.add(ctl);
   }
   assertEquals(2, set.get().length);
   assertSame(controls[0], set.get()[0]);
   assertSame(controls[1], set.get()[1]);
 }
  @Test
  public void testRemoveReturnsRemovedItem() throws Exception {
    final AppenderControlArraySet set = new AppenderControlArraySet();
    final AppenderControl[] controls =
        new AppenderControl[] {
          createControl("A"), createControl("B"), createControl("C"), createControl("D")
        };
    for (final AppenderControl ctl : controls) {
      set.add(ctl);
    }
    assertEquals(controls.length, set.get().length);

    final AppenderControl b = set.remove("B");
    assertSame(controls[1], b);

    final AppenderControl c = set.remove("C");
    assertSame(controls[2], c);
  }
  @Test
  public void testClearRemovesAllItems() throws Exception {
    final AppenderControlArraySet set = new AppenderControlArraySet();
    set.add(createControl("A"));
    set.add(createControl("B"));
    set.add(createControl("C"));
    assertFalse(set.isEmpty());

    set.clear();
    assertTrue(set.isEmpty());
  }
  @Test
  public void testRemoveRemovesItemFromSet() throws Exception {
    final AppenderControlArraySet set = new AppenderControlArraySet();
    set.add(createControl("A"));
    set.add(createControl("B"));
    set.add(createControl("C"));
    set.add(createControl("D"));
    assertEquals(4, set.get().length);

    set.remove("B");
    assertEquals(3, set.get().length);
    final AppenderControl[] three = set.get();
    assertEquals("A", three[0].getAppenderName());
    assertEquals("C", three[1].getAppenderName());
    assertEquals("D", three[2].getAppenderName());

    set.remove("C");
    assertEquals(2, set.get().length);
    final AppenderControl[] two = set.get();
    assertEquals("A", two[0].getAppenderName());
    assertEquals("D", two[1].getAppenderName());

    set.remove("A");
    assertEquals(1, set.get().length);
    final AppenderControl[] one = set.get();
    assertEquals("D", one[0].getAppenderName());

    set.remove("D");
    assertTrue(set.isEmpty());
  }
 @Test
 public void testIsEmptyMeansZeroLengthArray() throws Exception {
   final AppenderControlArraySet set = new AppenderControlArraySet();
   assertTrue(set.isEmpty());
   assertTrue(set.get().length == 0);
 }