rxjava utility operators test (#2642)
This commit is contained in:
parent
11f5ac7b44
commit
d626f9c2bf
|
@ -0,0 +1,273 @@
|
|||
package com.baeldung.rxjava;
|
||||
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.rules.ExpectedException;
|
||||
import rx.Observable;
|
||||
import rx.Observer;
|
||||
import rx.exceptions.OnErrorNotImplementedException;
|
||||
import rx.schedulers.Schedulers;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
public class UtilityOperatorsTest {
|
||||
|
||||
int emittedTotal = 0;
|
||||
int receivedTotal = 0;
|
||||
String result = "";
|
||||
|
||||
@Rule
|
||||
public ExpectedException thrown = ExpectedException.none();
|
||||
|
||||
@Test
|
||||
public void givenObservable_whenObserveOnAfterOnNext_thenEmitsEventsOnComputeScheduler() throws InterruptedException {
|
||||
|
||||
Observable.range(1, 5)
|
||||
.map(i -> i * 100)
|
||||
.doOnNext(i -> {
|
||||
emittedTotal += i;
|
||||
System.out.println("Emitting " + i
|
||||
+ " on thread " + Thread.currentThread().getName());
|
||||
})
|
||||
.observeOn(Schedulers.computation())
|
||||
.map(i -> i * 10)
|
||||
.subscribe(i -> {
|
||||
receivedTotal += i;
|
||||
System.out.println("Received " + i + " on thread "
|
||||
+ Thread.currentThread().getName());
|
||||
});
|
||||
|
||||
Thread.sleep(2000);
|
||||
assertTrue(emittedTotal == 1500);
|
||||
assertTrue(receivedTotal == 15000);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void givenObservable_whenObserveOnBeforeOnNext_thenEmitsEventsOnComputeScheduler() throws InterruptedException {
|
||||
|
||||
Observable.range(1, 5)
|
||||
.map(i -> i * 100)
|
||||
.observeOn(Schedulers.computation())
|
||||
.doOnNext(i -> {
|
||||
emittedTotal += i;
|
||||
System.out.println("Emitting " + i
|
||||
+ " on thread " + Thread.currentThread().getName());
|
||||
})
|
||||
.map(i -> i * 10)
|
||||
.subscribe(i -> {
|
||||
receivedTotal += i;
|
||||
System.out.println("Received " + i + " on thread "
|
||||
+ Thread.currentThread().getName());
|
||||
});
|
||||
|
||||
Thread.sleep(2000);
|
||||
assertTrue(emittedTotal == 1500);
|
||||
assertTrue(receivedTotal == 15000);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void givenObservable_whenSubscribeOn_thenEmitsEventsOnComputeScheduler() throws InterruptedException {
|
||||
|
||||
Observable.range(1, 5)
|
||||
.map(i -> i * 100)
|
||||
.doOnNext(i -> {
|
||||
emittedTotal += i;
|
||||
System.out.println("Emitting " + i
|
||||
+ " on thread " + Thread.currentThread().getName());
|
||||
})
|
||||
.subscribeOn(Schedulers.computation())
|
||||
.map(i -> i * 10)
|
||||
.subscribe(i -> {
|
||||
receivedTotal += i;
|
||||
System.out.println("Received " + i + " on thread "
|
||||
+ Thread.currentThread().getName());
|
||||
});
|
||||
|
||||
Thread.sleep(2000);
|
||||
assertTrue(emittedTotal == 1500);
|
||||
assertTrue(receivedTotal == 15000);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void givenObservableWithOneEvent_whenSingle_thenEmitEvent() {
|
||||
|
||||
Observable.range(1, 1)
|
||||
.single()
|
||||
.subscribe(i -> receivedTotal += i);
|
||||
assertTrue(receivedTotal == 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenObservableWithNoEvents_whenSingle_thenThrowException() {
|
||||
|
||||
Observable.range(1, 3)
|
||||
.single()
|
||||
.onErrorReturn(e -> receivedTotal += 10)
|
||||
.subscribe();
|
||||
assertTrue(receivedTotal == 10);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenObservableWihNoEvents_whenSingleOrDefault_thenDefaultMessage() {
|
||||
|
||||
Observable.empty()
|
||||
.singleOrDefault("Default")
|
||||
.subscribe(i -> result += i);
|
||||
assertTrue(result.equals("Default"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenObservableWithManyEvents_whenSingleOrDefault_thenThrowException() {
|
||||
|
||||
Observable.range(1, 3)
|
||||
.singleOrDefault(5)
|
||||
.onErrorReturn(e -> receivedTotal += 10)
|
||||
.subscribe();
|
||||
assertTrue(receivedTotal == 10);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenObservable_whenDoOnNextAndDoOnCompleted_thenSumAllEventsAndShowMessage() {
|
||||
|
||||
Observable.range(1, 10)
|
||||
.doOnNext(r -> receivedTotal += r)
|
||||
.doOnCompleted(() -> result = "Completed")
|
||||
.subscribe();
|
||||
assertTrue(receivedTotal == 55);
|
||||
assertTrue(result.equals("Completed"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenObservable_whenDoOnEachAndDoOnSubscribe_thenSumAllValuesAndShowMessage() {
|
||||
|
||||
Observable.range(1, 10)
|
||||
.doOnEach(new Observer<Integer>() {
|
||||
@Override
|
||||
public void onCompleted() {
|
||||
System.out.println("Complete");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNext(Integer value) {
|
||||
receivedTotal += value;
|
||||
}
|
||||
})
|
||||
.doOnSubscribe(() -> result = "Subscribed")
|
||||
.subscribe();
|
||||
assertTrue(receivedTotal == 55);
|
||||
assertTrue(result.equals("Subscribed"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenObservable_whenDoOnErrorDoOnTerminateAndDoAfterTerminate_thenShowErrorTerminateAndAfterTerminateMessages() {
|
||||
|
||||
thrown.expect(OnErrorNotImplementedException.class);
|
||||
Observable.empty()
|
||||
.single()
|
||||
.doOnError(throwable -> {
|
||||
throw new RuntimeException("error");
|
||||
})
|
||||
.doOnTerminate(() -> result += "doOnTerminate")
|
||||
.doAfterTerminate(() -> result += "_doAfterTerminate")
|
||||
.subscribe();
|
||||
assertTrue(result.equals("doOnTerminate_doAfterTerminate"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenObservable_whenTimestamp_thenEventsShouldAppearTimestamped() {
|
||||
|
||||
Observable.range(1, 10)
|
||||
.timestamp()
|
||||
.map(o -> result = o.getClass().toString())
|
||||
.last()
|
||||
.subscribe();
|
||||
assertTrue(result.equals("class rx.schedulers.Timestamped"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenObservables_whenDelay_thenEventsStartAppearAfterATime() throws InterruptedException {
|
||||
|
||||
Observable source
|
||||
= Observable.interval(1, TimeUnit.SECONDS)
|
||||
.take(5)
|
||||
.timestamp();
|
||||
|
||||
Observable delay
|
||||
= source.delaySubscription(2, TimeUnit.SECONDS);
|
||||
|
||||
source.subscribe(
|
||||
value -> System.out.println("source :" + value),
|
||||
t -> System.out.println("source error"),
|
||||
() -> System.out.println("source completed"));
|
||||
|
||||
delay.subscribe(
|
||||
value -> System.out.println("delay : " + value),
|
||||
t -> System.out.println("delay error"),
|
||||
() -> System.out.println("delay completed"));
|
||||
Thread.sleep(8000);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenObservable_whenRepeat_thenSumNumbersThreeTimes() {
|
||||
|
||||
Observable.range(1, 3)
|
||||
.repeat(3)
|
||||
.subscribe(i -> receivedTotal += i);
|
||||
assertTrue(receivedTotal == 18);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenObservable_whenUsing_thenReturnCreatedResource() {
|
||||
|
||||
Observable<Character> values = Observable.using(
|
||||
() -> "resource",
|
||||
r -> {
|
||||
return Observable.create(o -> {
|
||||
for (Character c : r.toCharArray()) {
|
||||
o.onNext(c);
|
||||
}
|
||||
o.onCompleted();
|
||||
});
|
||||
},
|
||||
r -> System.out.println("Disposed: " + r)
|
||||
);
|
||||
values.subscribe(
|
||||
v -> result += v,
|
||||
e -> result += e
|
||||
);
|
||||
assertTrue(result.equals("resource"));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void givenObservableCached_whenSubscribesWith2Actions_thenEmitsCachedValues() {
|
||||
|
||||
Observable<Integer> source =
|
||||
Observable.<Integer>create(subscriber -> {
|
||||
System.out.println("Create");
|
||||
subscriber.onNext(receivedTotal += 5);
|
||||
subscriber.onCompleted();
|
||||
}
|
||||
).cache();
|
||||
source.subscribe(i -> {
|
||||
System.out.println("element 1");
|
||||
receivedTotal += 1;
|
||||
});
|
||||
source.subscribe(i -> {
|
||||
System.out.println("element 2");
|
||||
receivedTotal += 2;
|
||||
});
|
||||
assertTrue(receivedTotal == 8);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue