@Test public void failNextIfTerminatedTakeFused() { UnicastProcessor<Integer> up = UnicastProcessor.create(); Hooks.onNextDropped(t -> assertThat(t).isEqualTo(1)); StepVerifier.create(up.take(2)) .then(() -> up.actual.onComplete()) .then(() -> up.actual.onNext(1)) .verifyComplete(); Hooks.resetOnNextDropped(); }
@Test @SuppressWarnings("unchecked") public void failFusedDoubleError() { UnicastProcessor<Integer> up = UnicastProcessor.create(); Hooks.onErrorDropped(e -> assertThat(e).hasMessage("test2")); StepVerifier.create(up .take(2)) .consumeSubscriptionWith(s -> { assertTrackableBeforeOnSubscribe((InnerOperator)s); }) .then(() -> { assertTrackableAfterOnSubscribe((InnerOperator)up.actual); up.actual.onError(new Exception("test")); assertTrackableAfterOnComplete((InnerOperator)up.actual); up.actual.onError(new Exception("test2")); }) .verifyErrorMessage("test"); Hooks.resetOnErrorDropped(); }
@Test public void takeFusedAsync() { UnicastProcessor<String> up = UnicastProcessor.create(); StepVerifier.create(up.take(2)) .expectFusion(Fuseable.ASYNC) .then(() -> { up.onNext("test"); up.onNext("test2"); }) .expectNext("test", "test2") .verifyComplete(); }
@Test public void takeFusedBackpressuredCancelled() { UnicastProcessor<String> up = UnicastProcessor.create(); StepVerifier.create(up.take(3).doOnSubscribe(s -> { assertThat(((Fuseable.QueueSubscription)s).size()).isEqualTo(0); }), 0) .expectFusion() .then(() -> up.onNext("test")) .then(() -> up.onNext("test")) .then(() -> up.onNext("test")) .thenRequest(2) .expectNext("test", "test") .thenCancel() .verify(); }
@Test public void ignoreFusedDoubleComplete() { UnicastProcessor<Integer> up = UnicastProcessor.create(); StepVerifier.create(up .take(2).filter(d -> true)) .consumeSubscriptionWith(s -> { assertTrackableAfterOnSubscribe((InnerOperator)s); }) .then(() -> { assertTrackableAfterOnSubscribe((InnerOperator)up.actual); up.actual.onComplete(); assertTrackableAfterOnComplete((InnerOperator)up.actual); up.actual.onComplete(); }) .verifyComplete(); }
@Test public void cancelAsyncFusion() { UnicastProcessor<String> up = UnicastProcessor.create(); StepVerifier.create(up.take(3), 0) .expectFusion() .then(() -> up.onNext("test")) .then(() -> up.onNext("test")) .then(() -> up.onNext("test")) .thenRequest(2) .expectNext("test", "test") .thenCancel() .verify(); }
@Test public void takeAsyncFusedBackpressured() { UnicastProcessor<String> up = UnicastProcessor.create(); StepVerifier.create(up.take(3), 0) .expectFusion() .then(() -> up.onNext("test")) .then(() -> up.onNext("test")) .then(() -> up.onNext("test")) .thenRequest(2) .expectNext("test", "test") .thenRequest(1) .expectNext("test") .verifyComplete(); }
@Test public void takeFusedBackpressured() { UnicastProcessor<String> up = UnicastProcessor.create(); StepVerifier.create(up.take(3), 0) .expectFusion() .then(() -> up.onNext("test")) .then(() -> up.onNext("test2")) .thenRequest(2) .expectNext("test", "test2") .then(() -> up.onNext("test3")) .then(() -> up.onNext("test4")) .thenRequest(1) .expectNext("test3") .thenRequest(1) .verifyComplete(); }