@Test(expected = IllegalStateException.class)
 public void usingDeregisteredWriteFunction() {
   ConnectionCollector collector = new ConnectionCollector();
   WriteFunction<Boolean> channelWriteFunction = collector.addChannel("first");
   collector.removeChannel("first");
   channelWriteFunction.writeValue(true);
 }
  @Test
  public void sameChannelMultipleTimes() {
    ConnectionCollector collector = new ConnectionCollector();
    WriteFunction<Boolean> channelWriteFunction1 = collector.addChannel("first");
    WriteFunction<Boolean> channelWriteFunction2 = collector.addChannel("first");
    assertThat(collector.readValue(), equalTo(false));

    channelWriteFunction1.writeValue(true);
    assertThat(channelWriteFunction1, sameInstance(channelWriteFunction2));
    assertThat(collector.readValue(), equalTo(true));

    collector.removeChannel("first");
    assertThat(collector.readValue(), equalTo(true));
    channelWriteFunction1.writeValue(false);
    assertThat(collector.readValue(), equalTo(false));

    collector.removeChannel("first");
    assertThat(collector.readValue(), equalTo(true));
  }
  @Test
  public void inputOutput() {
    ConnectionCollector collector = new ConnectionCollector();
    assertThat(collector.readValue(), equalTo(true));

    WriteFunction<Boolean> firstWriteFunction = collector.addChannel("first");
    assertThat(collector.readValue(), equalTo(false));

    firstWriteFunction.writeValue(false);
    assertThat(collector.readValue(), equalTo(false));

    WriteFunction<Boolean> secondWriteFunction = collector.addChannel("second");
    secondWriteFunction.writeValue(true);
    assertThat(collector.readValue(), equalTo(false));

    firstWriteFunction.writeValue(true);
    assertThat(collector.readValue(), equalTo(true));

    collector.removeChannel("second");
    assertThat(collector.readValue(), equalTo(true));

    secondWriteFunction = collector.addChannel("second");
    assertThat(collector.readValue(), equalTo(false));
  }