public void testOneByte() throws Exception {
    ProgressInputStream is = newProgressInputStream(1);
    is.checkProgress(1);
    is.checkProgress(-1);

    assertThat(progresses, hasItems(99, 100));
  }
  public void testOnProgressCannotBeCalledMoreThanOncePerPercent() throws Exception {
    int count = randomIntBetween(150, 300);
    ProgressInputStream is = newProgressInputStream(count);

    for (int i = 0; i < count; i++) {
      is.checkProgress(1);
    }
    is.checkProgress(-1);

    assertThat(progresses, hasSize(100));
  }
  public void testOddBytes() throws Exception {
    int odd = randomIntBetween(10, 100) * 2 + 1;
    ProgressInputStream is = newProgressInputStream(odd);
    for (int i = 0; i < odd; i++) {
      is.checkProgress(1);
    }
    is.checkProgress(-1);

    assertThat(progresses, hasSize(Math.min(odd + 1, 100)));
    assertThat(progresses, hasItem(100));
  }
  public void testEvenBytes() throws Exception {
    int even = randomIntBetween(10, 100) * 2;
    ProgressInputStream is = newProgressInputStream(even);

    for (int i = 0; i < even; i++) {
      is.checkProgress(1);
    }
    is.checkProgress(-1);

    assertThat(progresses, hasSize(Math.min(even + 1, 100)));
    assertThat(progresses, hasItem(100));
  }
  public void testThatProgressListenerReturnsMaxValueOnWrongExpectedSize() throws Exception {
    ProgressInputStream is = newProgressInputStream(2);

    is.checkProgress(1);
    assertThat(progresses, hasItems(50));

    is.checkProgress(3);
    assertThat(progresses, hasItems(50, 99));

    is.checkProgress(-1);
    assertThat(progresses, hasItems(50, 99, 100));
  }
  public void testThatProgressListenerIsCalled() throws Exception {
    ProgressInputStream is = newProgressInputStream(0);
    is.checkProgress(-1);

    assertThat(progresses, hasSize(1));
    assertThat(progresses, hasItems(100));
  }
 public void testThatProgressListenerIsCalledOnUnexpectedCompletion() throws Exception {
   ProgressInputStream is = newProgressInputStream(2);
   is.checkProgress(-1);
   assertThat(progresses, hasItems(100));
 }