use of reactor.core.publisher.Sinks.EmitResult in project reactor-core by reactor.
the class SinkOneMulticastTest method rejectedSubscribeCallback.
@Test
void rejectedSubscribeCallback() {
SinkOneMulticast<String> sink = new SinkOneMulticast<>();
AtomicReference<Throwable> ref = new AtomicReference<>();
sink.subscribe(v -> {
}, ref::set);
EmitResult emitResult = sink.tryEmitError(new Exception("test"));
assertThat(emitResult).isEqualTo(EmitResult.OK);
assertThat(ref.get()).hasMessage("test");
assertThat(sink.scan(Scannable.Attr.ERROR)).hasMessage("test");
assertThat(sink.scan(Scannable.Attr.TERMINATED)).isTrue();
}
use of reactor.core.publisher.Sinks.EmitResult in project reactor-core by reactor.
the class SinkOneMulticastTest method nullFulfill.
@Test
void nullFulfill() {
SinkOneMulticast<String> sink = new SinkOneMulticast<>();
EmitResult emitResult = sink.tryEmitValue(null);
assertThat(emitResult).isEqualTo(EmitResult.OK);
assertThat(sink.scan(Scannable.Attr.ERROR)).isNull();
assertThat(sink.scan(Scannable.Attr.TERMINATED)).isTrue();
}
use of reactor.core.publisher.Sinks.EmitResult 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.EmitResult 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);
}
}
use of reactor.core.publisher.Sinks.EmitResult in project reactor-core by reactor.
the class SinkOneMulticastTest method successSubscribeCallback.
@Test
void successSubscribeCallback() {
SinkOneMulticast<String> sink = new SinkOneMulticast<>();
AtomicReference<String> ref = new AtomicReference<>();
sink.subscribe(ref::set);
EmitResult emitResult = sink.tryEmitValue("test");
assertThat(emitResult).isEqualTo(EmitResult.OK);
assertThat(ref.get()).isEqualToIgnoringCase("test");
assertThat(sink.scan(Scannable.Attr.ERROR)).isNull();
assertThat(sink.scan(Scannable.Attr.TERMINATED)).isTrue();
}
Aggregations