@Test public void scanExpandDepthSubscription() { CoreSubscriber<Integer> parentActual = new LambdaSubscriber<>(null, Throwable::printStackTrace, null,null); ExpandDepthSubscription<Integer> test = new ExpandDepthSubscription<>( parentActual, i -> i > 5 ? Mono.empty() : Mono.just(i + 1), 123); assertThat(test.scan(Scannable.Attr.ACTUAL)).isSameAs(parentActual); assertThat(test.scan(Scannable.Attr.ERROR)).isNull(); test.error = new IllegalStateException("boom"); assertThat(test.scan(Scannable.Attr.ERROR)).isSameAs(test.error); test.request(20); assertThat(test.scan(Scannable.Attr.REQUESTED_FROM_DOWNSTREAM)).isEqualTo(20); assertThat(test.scan(Scannable.Attr.CANCELLED)).isFalse(); test.cancel(); assertThat(test.scan(Scannable.Attr.CANCELLED)).isTrue(); } }
if (setCurrent(eds)) { p.subscribe(eds); if (push(curr)) { ACTIVE.getAndIncrement(this); curr = new ExpandDepthSubscriber<>(this); if (setCurrent(curr)) { p.subscribe(curr); newSource = true; curr = pop(); if (curr != null && setCurrent(curr)) { curr.requestOne(); continue;
@Override public void subscribe(CoreSubscriber<? super T> s) { if (breadthFirst) { FluxExpand.ExpandBreathSubscriber<T> parent = new FluxExpand.ExpandBreathSubscriber<>(s, expander, capacityHint); parent.queue.offer(source); s.onSubscribe(parent); parent.drainQueue(); } else { FluxExpand.ExpandDepthSubscription<T> parent = new FluxExpand.ExpandDepthSubscription<>(s, expander, capacityHint); parent.source = source; s.onSubscribe(parent); } }
@Override public void subscribe(CoreSubscriber<? super T> s) { if (breadthFirst) { ExpandBreathSubscriber<T> parent = new ExpandBreathSubscriber<>(s, expander, capacityHint); parent.queue.offer(source); s.onSubscribe(parent); parent.drainQueue(); } else { ExpandDepthSubscription<T> parent = new ExpandDepthSubscription<>(s, expander, capacityHint); parent.source = source; s.onSubscribe(parent); } }
void innerNext() { drainQueue(); }
void innerComplete(ExpandDepthSubscriber inner) { inner.done = true; drainQueue(); }
@Override public void onComplete() { if (s != Operators.cancelledSubscription()) { parent.innerComplete(this); } }
@Override public void onNext(T t) { if (s != Operators.cancelledSubscription()) { value = t; parent.innerNext(); } }
@Override public void request(long n) { if (Operators.validate(n)) { Operators.addCap(REQUESTED, this, n); drainQueue(); } }
void innerError(ExpandDepthSubscriber inner, Throwable t) { Exceptions.addThrowable(ERROR, this, t); inner.done = true; drainQueue(); }
@Override public void onError(Throwable t) { if (s != Operators.cancelledSubscription()) { parent.innerError(this, t); } }
@Override public Context currentContext() { return parent.actual().currentContext(); } }
if (setCurrent(eds)) { p.subscribe(eds); if (push(curr)) { ACTIVE.getAndIncrement(this); curr = new ExpandDepthSubscriber<>(this); if (setCurrent(curr)) { p.subscribe(curr); newSource = true; curr = pop(); if (curr != null && setCurrent(curr)) { curr.requestOne(); continue;
@Override public void subscribe(CoreSubscriber<? super T> s) { if (breadthFirst) { FluxExpand.ExpandBreathSubscriber<T> parent = new FluxExpand.ExpandBreathSubscriber<>(s, expander, capacityHint); parent.queue.offer(source); s.onSubscribe(parent); parent.drainQueue(); } else { FluxExpand.ExpandDepthSubscription<T> parent = new FluxExpand.ExpandDepthSubscription<>(s, expander, capacityHint); parent.source = source; s.onSubscribe(parent); } }
@Override public void subscribe(CoreSubscriber<? super T> s) { if (breadthFirst) { ExpandBreathSubscriber<T> parent = new ExpandBreathSubscriber<>(s, expander, capacityHint); parent.queue.offer(source); s.onSubscribe(parent); parent.drainQueue(); } else { ExpandDepthSubscription<T> parent = new ExpandDepthSubscription<>(s, expander, capacityHint); parent.source = source; s.onSubscribe(parent); } }
@Test public void scanExpandDepthSubscriber() { CoreSubscriber<Integer> parentActual = new LambdaSubscriber<>(null, Throwable::printStackTrace, null,null); ExpandDepthSubscription<Integer> eds = new ExpandDepthSubscription<>( parentActual, i -> i > 5 ? Mono.empty() : Mono.just(i + 1), 123); ExpandDepthSubscriber<Integer> test = new ExpandDepthSubscriber<>(eds); Subscription s = Operators.emptySubscription(); test.onSubscribe(s); assertThat(test.scan(Scannable.Attr.PARENT)).isSameAs(s); assertThat(test.scan(Scannable.Attr.ACTUAL)).isSameAs(parentActual); assertThat(test.scan(Scannable.Attr.TERMINATED)).isFalse(); test.onComplete(); assertThat(test.scan(Scannable.Attr.TERMINATED)).isTrue(); }
@Test public void currentContextForExpandDepthSubscriber() { final Context context = Context.of("foo", "bar"); CoreSubscriber<Integer> parentActual = new BaseSubscriber<Integer>() { @Override public Context currentContext() { return context; } }; ExpandDepthSubscription<Integer> expandDepthSubscription = new ExpandDepthSubscription<>( parentActual, i -> i > 5 ? Mono.empty() : Mono.just(i + 1), 123); ExpandDepthSubscriber<Integer> test = new ExpandDepthSubscriber<>(expandDepthSubscription); assertThat(test.currentContext()).isSameAs(context); }
void innerNext() { drainQueue(); }
void innerComplete(ExpandDepthSubscriber inner) { inner.done = true; drainQueue(); }
@Override public void onComplete() { if (s != Operators.cancelledSubscription()) { parent.innerComplete(this); } }