java-tutorials/rxjava-2/src/test/java/com/baeldung/rxjava/FlowableIntegrationTest.java

93 lines
4.2 KiB
Java
Raw Normal View History

2018-01-08 00:06:53 +01:00
package com.baeldung.rxjava;
import io.reactivex.BackpressureStrategy;
import io.reactivex.Flowable;
import io.reactivex.FlowableOnSubscribe;
import io.reactivex.Observable;
import io.reactivex.exceptions.MissingBackpressureException;
import io.reactivex.schedulers.Schedulers;
import io.reactivex.subscribers.TestSubscriber;
2018-01-10 22:57:28 +01:00
2018-01-08 00:06:53 +01:00
import org.junit.Test;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
public class FlowableIntegrationTest {
2018-01-08 00:06:53 +01:00
@Test public void whenFlowableIsCreated_thenItIsProperlyInitialized() {
Flowable<Integer> integerFlowable = Flowable.just(1, 2, 3, 4);
assertNotNull(integerFlowable);
}
@Test public void whenFlowableIsCreatedFromObservable_thenItIsProperlyInitialized() throws InterruptedException {
Observable<Integer> integerObservable = Observable.just(1, 2, 3);
Flowable<Integer> integerFlowable = integerObservable.toFlowable(BackpressureStrategy.BUFFER);
assertNotNull(integerFlowable);
}
@Test public void whenFlowableIsCreatedFromFlowableOnSubscribe_thenItIsProperlyInitialized() throws InterruptedException {
2018-01-10 22:57:28 +01:00
FlowableOnSubscribe<Integer> flowableOnSubscribe = flowableEmitter -> flowableEmitter.onNext(1);
2018-01-08 00:06:53 +01:00
Flowable<Integer> integerFlowable = Flowable.create(flowableOnSubscribe, BackpressureStrategy.BUFFER);
assertNotNull(integerFlowable);
}
2018-02-19 00:26:27 +01:00
@Test public void thenAllValuesAreBufferedAndReceived() {
2018-01-08 00:06:53 +01:00
List testList = IntStream.range(0, 100000).boxed().collect(Collectors.toList());
Observable observable = Observable.fromIterable(testList);
2018-01-10 22:57:28 +01:00
TestSubscriber<Integer> testSubscriber = observable.toFlowable(BackpressureStrategy.BUFFER).observeOn(Schedulers.computation()).test();
testSubscriber.awaitTerminalEvent();
List<Integer> receivedInts = testSubscriber.getEvents().get(0).stream().mapToInt(object -> (int) object).boxed().collect(Collectors.toList());
assertEquals(testList, receivedInts);
2018-01-08 00:06:53 +01:00
}
2018-02-19 00:26:27 +01:00
@Test public void whenDropStrategyUsed_thenOnBackpressureDropped() {
2018-01-08 00:06:53 +01:00
List testList = IntStream.range(0, 100000).boxed().collect(Collectors.toList());
Observable observable = Observable.fromIterable(testList);
2018-01-10 22:57:28 +01:00
TestSubscriber<Integer> testSubscriber = observable.toFlowable(BackpressureStrategy.DROP).observeOn(Schedulers.computation()).test();
testSubscriber.awaitTerminalEvent();
List<Integer> receivedInts = testSubscriber.getEvents().get(0).stream().mapToInt(object -> (int) object).boxed().collect(Collectors.toList());
assertThat(receivedInts.size() < testList.size());
assertThat(!receivedInts.contains(100000));
2018-01-08 00:06:53 +01:00
}
2018-02-19 00:26:27 +01:00
@Test public void whenMissingStrategyUsed_thenException() {
2018-01-08 00:06:53 +01:00
Observable observable = Observable.range(1, 100000);
2018-01-10 22:57:28 +01:00
TestSubscriber subscriber = observable.toFlowable(BackpressureStrategy.MISSING).observeOn(Schedulers.computation()).test();
2018-01-08 00:06:53 +01:00
subscriber.awaitTerminalEvent();
subscriber.assertError(MissingBackpressureException.class);
}
2018-02-19 00:26:27 +01:00
@Test public void whenErrorStrategyUsed_thenExceptionIsThrown() {
Observable observable = Observable.range(1, 100000);
2018-01-10 22:57:28 +01:00
TestSubscriber subscriber = observable.toFlowable(BackpressureStrategy.ERROR).observeOn(Schedulers.computation()).test();
2018-01-08 00:06:53 +01:00
subscriber.awaitTerminalEvent();
subscriber.assertError(MissingBackpressureException.class);
}
2018-02-19 00:26:27 +01:00
@Test public void whenLatestStrategyUsed_thenTheLastElementReceived() {
2018-01-08 00:06:53 +01:00
List testList = IntStream.range(0, 100000).boxed().collect(Collectors.toList());
Observable observable = Observable.fromIterable(testList);
2018-01-10 22:57:28 +01:00
TestSubscriber<Integer> testSubscriber = observable.toFlowable(BackpressureStrategy.LATEST).observeOn(Schedulers.computation()).test();
testSubscriber.awaitTerminalEvent();
List<Integer> receivedInts = testSubscriber.getEvents().get(0).stream().mapToInt(object -> (int) object).boxed().collect(Collectors.toList());
assertThat(receivedInts.size() < testList.size());
assertThat(receivedInts.contains(100000));
2018-01-08 00:06:53 +01:00
}
}