use of reactor.core.publisher.Sinks.EmitFailureHandler in project reactor-core by reactor.
the class InternalOneSinkTest method shouldDelegateToHandler.
@ParameterizedTestWithName
@EnumSource(value = Sinks.EmitResult.class)
void shouldDelegateToHandler(EmitResult emitResult) {
assumeThat(emitResult.isFailure()).isTrue();
Sinks.One<Object> sink = new InternalOneSinkAdapter<Object>() {
@Override
public Sinks.EmitResult tryEmitValue(Object value) {
return emitResult;
}
@Override
public Sinks.EmitResult tryEmitError(Throwable error) {
return emitResult;
}
@Override
public Sinks.EmitResult tryEmitEmpty() {
return emitResult;
}
};
for (SignalType signalType : new SignalType[] { SignalType.ON_NEXT, SignalType.ON_ERROR, SignalType.ON_COMPLETE }) {
AtomicReference<Sinks.EmitResult> emissionRef = new AtomicReference<>();
try {
EmitFailureHandler handler = (failedSignalType, failedEmission) -> {
emissionRef.set(failedEmission);
return false;
};
switch(signalType) {
case ON_NEXT:
sink.emitValue("Hello", handler);
break;
case ON_ERROR:
sink.emitError(new Exception("boom"), handler);
break;
case ON_COMPLETE:
sink.emitEmpty(handler);
break;
default:
throw new IllegalStateException();
}
} catch (EmissionException e) {
assertThat(e.getReason()).isEqualTo(Sinks.EmitResult.FAIL_NON_SERIALIZED);
}
assertThat(emissionRef).as("emitResult").hasValue(emitResult);
}
}
use of reactor.core.publisher.Sinks.EmitFailureHandler in project reactor-core by reactor.
the class InternalManySinkTest method shouldDelegateToHandler.
@ParameterizedTestWithName
@EnumSource(value = Sinks.EmitResult.class)
void shouldDelegateToHandler(Sinks.EmitResult emitResult) {
assumeThat(emitResult.isFailure()).isTrue();
Sinks.Many<Object> sink = new InternalManySinkAdapter<Object>() {
@Override
public EmitResult tryEmitNext(Object o) {
return emitResult;
}
@Override
public Sinks.EmitResult tryEmitError(Throwable error) {
return emitResult;
}
@Override
public EmitResult tryEmitComplete() {
return emitResult;
}
};
for (SignalType signalType : new SignalType[] { SignalType.ON_NEXT, SignalType.ON_ERROR, SignalType.ON_COMPLETE }) {
AtomicReference<EmitResult> emissionRef = new AtomicReference<>();
try {
EmitFailureHandler handler = (failedSignalType, failedEmission) -> {
emissionRef.set(failedEmission);
return false;
};
switch(signalType) {
case ON_NEXT:
sink.emitNext("Hello", handler);
break;
case ON_ERROR:
sink.emitError(new Exception("boom"), handler);
break;
case ON_COMPLETE:
sink.emitComplete(handler);
break;
default:
throw new IllegalStateException();
}
} catch (EmissionException e) {
assertThat(e.getReason()).isEqualTo(EmitResult.FAIL_NON_SERIALIZED);
}
assertThat(emissionRef).as("emitResult").hasValue(emitResult);
}
}
Aggregations