@Test
  public void addStartStopRemove() throws Exception {
    LifecycleManager underTest = new LifecycleManager();
    LifecycleSupport foo = new LifecycleSupport();
    LifecycleSupport bar = new LifecycleSupport();

    assertState(underTest, State.NEW);
    assertState(foo, State.NEW);
    assertState(bar, State.NEW);

    underTest.add(foo);
    assertThat(underTest.size(), is(1));

    underTest.add(bar);
    assertThat(underTest.size(), is(2));

    underTest.start();
    assertState(underTest, State.STARTED);
    assertState(foo, State.STARTED);
    assertState(bar, State.STARTED);

    underTest.stop();
    assertState(underTest, State.STOPPED);
    assertState(foo, State.STOPPED);
    assertState(bar, State.STOPPED);

    underTest.remove(foo);
    assertThat(underTest.size(), is(1));

    underTest.remove(bar);
    assertThat(underTest.size(), is(0));
  }