@Test(expected = NullPointerException.class) public void flatMapCombinerMapperNull() { just1.flatMap(null, new BiFunction<Integer, Object, Object>() { @Override public Object apply(Integer a, Object b) { return 1; } }); }
@Override public Object apply(Observable<Object> o) throws Exception { return o.window(Observable.never()).flatMap(new Function<Observable<Object>, ObservableSource<Object>>() { @Override public ObservableSource<Object> apply(Observable<Object> v) throws Exception { return v; } }); } }, false, 1, 1, 1);
@Test public void testFlatMapTransformsOnNextFuncThrows() { Observable<Integer> onComplete = Observable.fromIterable(Arrays.asList(4)); Observable<Integer> onError = Observable.fromIterable(Arrays.asList(5)); Observable<Integer> source = Observable.fromIterable(Arrays.asList(10, 20, 30)); Observer<Object> o = TestHelper.mockObserver(); source.flatMap(funcThrow(1, onError), just(onError), just0(onComplete)).subscribe(o); verify(o).onError(any(TestException.class)); verify(o, never()).onNext(any()); verify(o, never()).onComplete(); }
@Test public void testFlatMapTransformsOnCompletedFuncThrows() { Observable<Integer> onNext = Observable.fromIterable(Arrays.asList(1, 2, 3)); Observable<Integer> onComplete = Observable.fromIterable(Arrays.asList(4)); Observable<Integer> onError = Observable.fromIterable(Arrays.asList(5)); Observable<Integer> source = Observable.fromIterable(Arrays.<Integer> asList()); Observer<Object> o = TestHelper.mockObserver(); source.flatMap(just(onNext), just(onError), funcThrow0(onComplete)).subscribe(o); verify(o).onError(any(TestException.class)); verify(o, never()).onNext(any()); verify(o, never()).onComplete(); }
@Test public void testFlatMapTransformsMergeException() { Observable<Integer> onNext = Observable.error(new TestException()); Observable<Integer> onComplete = Observable.fromIterable(Arrays.asList(4)); Observable<Integer> onError = Observable.fromIterable(Arrays.asList(5)); Observable<Integer> source = Observable.fromIterable(Arrays.asList(10, 20, 30)); Observer<Object> o = TestHelper.mockObserver(); source.flatMap(just(onNext), just(onError), funcThrow0(onComplete)).subscribe(o); verify(o).onError(any(TestException.class)); verify(o, never()).onNext(any()); verify(o, never()).onComplete(); }
@Test public void testFlatMap() { List<Integer> list = Observable.range(1, 5).flatMap(new Function<Integer, Observable<Integer>>() { @Override public Observable<Integer> apply(Integer v) { return Observable.range(v, 2); } }).toList().blockingGet(); Assert.assertEquals(Arrays.asList(1, 2, 2, 3, 3, 4, 4, 5, 5, 6), list); }
@Test public void flatMapEmpty() { assertSame(Observable.empty(), Observable.empty().flatMap(new Function<Object, ObservableSource<Object>>() { @Override public ObservableSource<Object> apply(Object v) throws Exception { return Observable.just(v); } })); }
@Override public ObservableSource<Integer> apply(Observable<Object> o) throws Exception { return o.flatMap( Functions.justFunction(Observable.just(1)), Functions.justFunction(Observable.just(2)), Functions.justCallable(Observable.just(3)) ); } });
@Test(timeout = 5000) public void testIssue1935NoUnsubscribeDownstreamObservable() { Observable<Integer> source = Observable.just(1).isEmpty().toObservable() .flatMap(new Function<Boolean, Observable<Integer>>() { @Override public Observable<Integer> apply(Boolean t1) { return Observable.just(2).delay(500, TimeUnit.MILLISECONDS); } }); assertEquals((Object)2, source.blockingFirst()); }
@Test public void timespanDefaultSchedulerSizeRestart() { Observable.range(1, 10) .window(1, TimeUnit.MINUTES, 20, true) .flatMap(Functions.<Observable<Integer>>identity(), true) .test() .awaitDone(5, TimeUnit.SECONDS) .assertResult(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); }
@Test public void restartTimer() { Observable.range(1, 5) .window(1, TimeUnit.DAYS, Schedulers.single(), 2, true) .flatMap(Functions.<Observable<Integer>>identity()) .test() .assertResult(1, 2, 3, 4, 5); }
@Test public void timespanDefaultSchedulerSize() { Observable.range(1, 10) .window(1, TimeUnit.MINUTES, 20) .flatMap(Functions.<Observable<Integer>>identity()) .test() .awaitDone(5, TimeUnit.SECONDS) .assertResult(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); }
@Test public void delayErrorSimpleComplete() { Observable.just(1) .groupBy(Functions.justFunction(1), true) .flatMap(Functions.<Observable<Integer>>identity()) .test() .assertResult(1); } }
@Test public void boundaryOnError() { TestObserver<Object> to = Observable.error(new TestException()) .window(Observable.never()) .flatMap(Functions.<Observable<Object>>identity(), true) .test() .assertFailure(CompositeException.class); List<Throwable> errors = TestCommonHelper.compositeList(to.errors().get(0)); TestCommonHelper.assertError(errors, 0, TestException.class); }
@Test public void timespanTimeskipCustomSchedulerBufferSize() { Observable.range(1, 10) .window(1, 1, TimeUnit.MINUTES, Schedulers.io(), 2) .flatMap(Functions.<Observable<Integer>>identity()) .test() .awaitDone(5, TimeUnit.SECONDS) .assertResult(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); }
@Test public void timespanTimeskipCustomScheduler() { Observable.just(1) .window(1, 1, TimeUnit.MINUTES, Schedulers.io()) .flatMap(Functions.<Observable<Integer>>identity()) .test() .awaitDone(5, TimeUnit.SECONDS) .assertResult(1); }
@Test public void timeskipJustSkip() { Observable.just(1) .window(1, 2, TimeUnit.MINUTES, Schedulers.single()) .flatMap(Functions.<Observable<Integer>>identity()) .test() .awaitDone(5, TimeUnit.SECONDS) .assertResult(1); }
@Test public void exactOnError() { TestScheduler scheduler = new TestScheduler(); PublishSubject<Integer> pp = PublishSubject.create(); TestObserver<Integer> ts = pp.window(1, 1, TimeUnit.SECONDS, scheduler) .flatMap(Functions.<Observable<Integer>>identity()) .test(); pp.onError(new TestException()); ts.assertFailure(TestException.class); }
@Test public void overlappingOnError() { TestScheduler scheduler = new TestScheduler(); PublishSubject<Integer> pp = PublishSubject.create(); TestObserver<Integer> ts = pp.window(2, 1, TimeUnit.SECONDS, scheduler) .flatMap(Functions.<Observable<Integer>>identity()) .test(); pp.onError(new TestException()); ts.assertFailure(TestException.class); }
@Test public void skipOnError() { TestScheduler scheduler = new TestScheduler(); PublishSubject<Integer> pp = PublishSubject.create(); TestObserver<Integer> ts = pp.window(1, 2, TimeUnit.SECONDS, scheduler) .flatMap(Functions.<Observable<Integer>>identity()) .test(); pp.onError(new TestException()); ts.assertFailure(TestException.class); }