package com.github.davidmoten.rx.internal.operators;
import java.io.IOException;
import org.junit.Test;
import rx.Observable;
import rx.Observable.Transformer;
import rx.functions.Func1;
import rx.observers.TestSubscriber;
public class TransformerOnTerminateResumeTest {
@Test
public void mainCompletes() {
Transformer<Integer, Integer> op = new TransformerOnTerminateResume<Integer>(new Func1<Throwable, Observable<Integer>>() {
@Override
public Observable<Integer> call(Throwable e) {
return Observable.just(11);
}
}, Observable.just(12));
TestSubscriber<Integer> ts = TestSubscriber.create();
Observable.range(1, 10)
.compose(op)
.subscribe(ts);
ts.assertValues(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12);
ts.assertNoErrors();
ts.assertCompleted();
}
@Test
public void mainCompletesBackpressure() {
Transformer<Integer, Integer> op = new TransformerOnTerminateResume<Integer>(new Func1<Throwable, Observable<Integer>>() {
@Override
public Observable<Integer> call(Throwable e) {
return Observable.just(11);
}
}, Observable.just(12));
TestSubscriber<Integer> ts = TestSubscriber.create(0);
Observable.range(1, 10)
.compose(op)
.subscribe(ts);
ts.assertNoValues();
ts.requestMore(2);
ts.assertValues(1, 2);
ts.requestMore(5);
ts.assertValues(1, 2, 3, 4, 5, 6, 7);
ts.requestMore(3);
ts.assertValues(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
ts.requestMore(1);
ts.assertValues(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12);
ts.assertNoErrors();
ts.assertCompleted();
}
@Test
public void mainErrors() {
Transformer<Integer, Integer> op = new TransformerOnTerminateResume<Integer>(new Func1<Throwable, Observable<Integer>>() {
@Override
public Observable<Integer> call(Throwable e) {
return Observable.just(11);
}
}, Observable.just(12));
TestSubscriber<Integer> ts = TestSubscriber.create();
Observable.range(1, 10).concatWith(Observable.<Integer>error(new IOException()))
.compose(op)
.subscribe(ts);
ts.assertValues(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);
ts.assertNoErrors();
ts.assertCompleted();
}
@Test
public void mainErrorsBackpressure() {
Transformer<Integer, Integer> op = new TransformerOnTerminateResume<Integer>(new Func1<Throwable, Observable<Integer>>() {
@Override
public Observable<Integer> call(Throwable e) {
return Observable.just(11);
}
}, Observable.just(12));
TestSubscriber<Integer> ts = TestSubscriber.create(0);
Observable.range(1, 10).concatWith(Observable.<Integer>error(new IOException()))
.compose(op)
.subscribe(ts);
ts.assertNoValues();
ts.requestMore(2);
ts.assertValues(1, 2);
ts.requestMore(5);
ts.assertValues(1, 2, 3, 4, 5, 6, 7);
ts.requestMore(3);
ts.assertValues(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
ts.requestMore(1);
ts.assertValues(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);
ts.assertNoErrors();
ts.assertCompleted();
}
}