use of io.reactivex.rxjava3.core.Observable in project RxJava by ReactiveX.
the class ObservableSwitchTest method switchWithSubsequenceComplete.
@Test
public void switchWithSubsequenceComplete() {
Observable<Observable<String>> source = Observable.unsafeCreate(new ObservableSource<Observable<String>>() {
@Override
public void subscribe(Observer<? super Observable<String>> outerObserver) {
outerObserver.onSubscribe(Disposable.empty());
publishNext(outerObserver, 50, Observable.unsafeCreate(new ObservableSource<String>() {
@Override
public void subscribe(Observer<? super String> innerObserver) {
innerObserver.onSubscribe(Disposable.empty());
publishNext(innerObserver, 50, "one");
publishNext(innerObserver, 100, "two");
}
}));
publishNext(outerObserver, 130, Observable.unsafeCreate(new ObservableSource<String>() {
@Override
public void subscribe(Observer<? super String> innerObserver) {
innerObserver.onSubscribe(Disposable.empty());
publishCompleted(innerObserver, 0);
}
}));
publishNext(outerObserver, 150, Observable.unsafeCreate(new ObservableSource<String>() {
@Override
public void subscribe(Observer<? super String> innerObserver) {
innerObserver.onSubscribe(Disposable.empty());
publishNext(innerObserver, 50, "three");
}
}));
}
});
Observable<String> sampled = Observable.switchOnNext(source);
sampled.subscribe(observer);
InOrder inOrder = inOrder(observer);
scheduler.advanceTimeTo(90, TimeUnit.MILLISECONDS);
inOrder.verify(observer, never()).onNext(anyString());
verify(observer, never()).onComplete();
verify(observer, never()).onError(any(Throwable.class));
scheduler.advanceTimeTo(125, TimeUnit.MILLISECONDS);
inOrder.verify(observer, times(1)).onNext("one");
verify(observer, never()).onComplete();
verify(observer, never()).onError(any(Throwable.class));
scheduler.advanceTimeTo(250, TimeUnit.MILLISECONDS);
inOrder.verify(observer, times(1)).onNext("three");
verify(observer, never()).onComplete();
verify(observer, never()).onError(any(Throwable.class));
}
use of io.reactivex.rxjava3.core.Observable in project RxJava by ReactiveX.
the class ObservableSwitchTest method switchWhenOuterCompleteBeforeInner.
@Test
public void switchWhenOuterCompleteBeforeInner() {
Observable<Observable<String>> source = Observable.unsafeCreate(new ObservableSource<Observable<String>>() {
@Override
public void subscribe(Observer<? super Observable<String>> outerObserver) {
outerObserver.onSubscribe(Disposable.empty());
publishNext(outerObserver, 50, Observable.unsafeCreate(new ObservableSource<String>() {
@Override
public void subscribe(Observer<? super String> innerObserver) {
innerObserver.onSubscribe(Disposable.empty());
publishNext(innerObserver, 70, "one");
publishNext(innerObserver, 100, "two");
publishCompleted(innerObserver, 200);
}
}));
publishCompleted(outerObserver, 60);
}
});
Observable<String> sampled = Observable.switchOnNext(source);
sampled.subscribe(observer);
InOrder inOrder = inOrder(observer);
scheduler.advanceTimeTo(350, TimeUnit.MILLISECONDS);
inOrder.verify(observer, times(2)).onNext(anyString());
inOrder.verify(observer, times(1)).onComplete();
}
use of io.reactivex.rxjava3.core.Observable in project RxJava by ReactiveX.
the class ObservableSwitchTest method switchWhenInnerCompleteBeforeOuter.
@Test
public void switchWhenInnerCompleteBeforeOuter() {
Observable<Observable<String>> source = Observable.unsafeCreate(new ObservableSource<Observable<String>>() {
@Override
public void subscribe(Observer<? super Observable<String>> outerObserver) {
outerObserver.onSubscribe(Disposable.empty());
publishNext(outerObserver, 10, Observable.unsafeCreate(new ObservableSource<String>() {
@Override
public void subscribe(Observer<? super String> innerObserver) {
innerObserver.onSubscribe(Disposable.empty());
publishNext(innerObserver, 0, "one");
publishNext(innerObserver, 10, "two");
publishCompleted(innerObserver, 20);
}
}));
publishNext(outerObserver, 100, Observable.unsafeCreate(new ObservableSource<String>() {
@Override
public void subscribe(Observer<? super String> innerObserver) {
innerObserver.onSubscribe(Disposable.empty());
publishNext(innerObserver, 0, "three");
publishNext(innerObserver, 10, "four");
publishCompleted(innerObserver, 20);
}
}));
publishCompleted(outerObserver, 200);
}
});
Observable<String> sampled = Observable.switchOnNext(source);
sampled.subscribe(observer);
InOrder inOrder = inOrder(observer);
scheduler.advanceTimeTo(150, TimeUnit.MILLISECONDS);
inOrder.verify(observer, never()).onComplete();
inOrder.verify(observer, times(1)).onNext("one");
inOrder.verify(observer, times(1)).onNext("two");
inOrder.verify(observer, times(1)).onNext("three");
inOrder.verify(observer, times(1)).onNext("four");
scheduler.advanceTimeTo(250, TimeUnit.MILLISECONDS);
inOrder.verify(observer, never()).onNext(anyString());
inOrder.verify(observer, times(1)).onComplete();
}
use of io.reactivex.rxjava3.core.Observable in project RxJava by ReactiveX.
the class ObservableUsingTest method performTestUsing.
private void performTestUsing(boolean disposeEagerly) {
final Resource resource = mock(Resource.class);
when(resource.getTextFromWeb()).thenReturn("Hello world!");
Supplier<Resource> resourceFactory = new Supplier<Resource>() {
@Override
public Resource get() {
return resource;
}
};
Function<Resource, Observable<String>> observableFactory = new Function<Resource, Observable<String>>() {
@Override
public Observable<String> apply(Resource res) {
return Observable.fromArray(res.getTextFromWeb().split(" "));
}
};
Observer<String> observer = TestHelper.mockObserver();
Observable<String> o = Observable.using(resourceFactory, observableFactory, new DisposeAction(), disposeEagerly);
o.subscribe(observer);
InOrder inOrder = inOrder(observer);
inOrder.verify(observer, times(1)).onNext("Hello");
inOrder.verify(observer, times(1)).onNext("world!");
inOrder.verify(observer, times(1)).onComplete();
inOrder.verifyNoMoreInteractions();
// The resouce should be closed
verify(resource, times(1)).dispose();
}
use of io.reactivex.rxjava3.core.Observable in project RxJava by ReactiveX.
the class ObservableUsingTest method performTestUsingWithSubscribingTwice.
private void performTestUsingWithSubscribingTwice(boolean disposeEagerly) {
// When subscribe is called, a new resource should be created.
Supplier<Resource> resourceFactory = new Supplier<Resource>() {
@Override
public Resource get() {
return new Resource() {
boolean first = true;
@Override
public String getTextFromWeb() {
if (first) {
first = false;
return "Hello world!";
}
return "Nothing";
}
@Override
public void dispose() {
// do nothing
}
};
}
};
Function<Resource, Observable<String>> observableFactory = new Function<Resource, Observable<String>>() {
@Override
public Observable<String> apply(Resource res) {
return Observable.fromArray(res.getTextFromWeb().split(" "));
}
};
Observer<String> observer = TestHelper.mockObserver();
Observable<String> o = Observable.using(resourceFactory, observableFactory, new DisposeAction(), disposeEagerly);
o.subscribe(observer);
o.subscribe(observer);
InOrder inOrder = inOrder(observer);
inOrder.verify(observer, times(1)).onNext("Hello");
inOrder.verify(observer, times(1)).onNext("world!");
inOrder.verify(observer, times(1)).onComplete();
inOrder.verify(observer, times(1)).onNext("Hello");
inOrder.verify(observer, times(1)).onNext("world!");
inOrder.verify(observer, times(1)).onComplete();
inOrder.verifyNoMoreInteractions();
}
Aggregations