@Test public void scanConditionalSubscriber() { @SuppressWarnings("unchecked") Fuseable.ConditionalSubscriber<Integer> actual = Mockito.mock(MockUtils.TestScannableConditionalSubscriber.class); FluxUsing.UsingConditionalSubscriber<Integer, String> test = new FluxUsing.UsingConditionalSubscriber<>(actual, s -> {}, "", true); Subscription parent = Operators.emptySubscription(); test.onSubscribe(parent); Assertions.assertThat(test.scan(Scannable.Attr.PARENT)).isSameAs(parent); Assertions.assertThat(test.scan(Scannable.Attr.ACTUAL)).isSameAs(actual); Assertions.assertThat(test.scan(Scannable.Attr.CANCELLED)).isFalse(); Assertions.assertThat(test.scan(Scannable.Attr.TERMINATED)).isFalse(); test.onComplete(); Assertions.assertThat(test.scan(Scannable.Attr.TERMINATED)).isTrue(); Assertions.assertThat(test.scan(Scannable.Attr.CANCELLED)).isTrue(); }
@Override public void onComplete() { if (eager && WIP.compareAndSet(this, 0, 1)) { try { resourceCleanup.accept(resource); } catch (Throwable e) { actual.onError(Operators.onOperatorError(e, actual.currentContext())); return; } } actual.onComplete(); if (!eager && WIP.compareAndSet(this, 0, 1)) { cleanup(); } }
p.subscribe(new FluxUsing.UsingConditionalSubscriber<>((ConditionalSubscriber<? super T>) actual, resourceCleanup,
from(p).subscribe(new UsingConditionalSubscriber<>((ConditionalSubscriber<? super T>) actual, resourceCleanup, resource,
@Override public void onComplete() { if (eager && WIP.compareAndSet(this, 0, 1)) { try { resourceCleanup.accept(resource); } catch (Throwable e) { actual.onError(Operators.onOperatorError(e, actual.currentContext())); return; } } actual.onComplete(); if (!eager && WIP.compareAndSet(this, 0, 1)) { cleanup(); } }
@Override public void onError(Throwable t) { if (eager && WIP.compareAndSet(this, 0, 1)) { try { resourceCleanup.accept(resource); } catch (Throwable e) { Throwable _e = Operators.onOperatorError(e, actual.currentContext()); t = Exceptions.addSuppressed(_e, t); } } actual.onError(t); if (!eager && WIP.compareAndSet(this, 0, 1)) { cleanup(); } }
@Override public void cancel() { if (WIP.compareAndSet(this, 0, 1)) { s.cancel(); cleanup(); } }
from(p).subscribe(new UsingConditionalSubscriber<>((ConditionalSubscriber<? super T>) actual, resourceCleanup, resource,
p.subscribe(new FluxUsing.UsingConditionalSubscriber<>((ConditionalSubscriber<? super T>) actual, resourceCleanup,
@Override public void onError(Throwable t) { if (eager && WIP.compareAndSet(this, 0, 1)) { try { resourceCleanup.accept(resource); } catch (Throwable e) { Throwable _e = Operators.onOperatorError(e, actual.currentContext()); t = Exceptions.addSuppressed(_e, t); } } actual.onError(t); if (!eager && WIP.compareAndSet(this, 0, 1)) { cleanup(); } }
@Override public void cancel() { if (WIP.compareAndSet(this, 0, 1)) { s.cancel(); cleanup(); } }