@Test public void forEachXWithEvents() { List<Integer> list = new ArrayList<>(); LazyFutureStream<Integer> stream = LazyFutureStream.of( () -> 1, () -> 2, () -> 3, (Supplier<Integer>) () -> { throw new RuntimeException(); }) .map(Supplier::get); Subscription s = stream.forEachXEvents(2, i -> list.add(i), e -> error = e, () -> complete = true); assertThat(list, hasItems(1, 2)); assertThat(list.size(), equalTo(2)); System.out.println("first batch"); s.request(1); assertFalse(complete); assertThat(list, hasItems(1, 2, 3)); assertThat(list.size(), equalTo(3)); assertThat(error, nullValue()); s.request(2); assertThat(error, instanceOf(RuntimeException.class)); assertTrue(complete); }