@Override public Observable<Object> apply(Observable<Object> f) throws Exception { return f.doFinally(ObservableDoFinallyTest.this).filter(Functions.alwaysTrue()); } });
@Test public void testFirstOrElseWithPredicateOfSome() { Observable<String> src = Observable.just("a", "b", "c", "d", "e", "f"); src.filter(IS_D).first("default").subscribe(wo); verify(wo, times(1)).onSuccess(anyString()); verify(wo, times(1)).onSuccess("d"); verify(wo, never()).onError(any(Throwable.class)); }
@Test public void testFirstOrElseWithPredicateOfNoneMatchingThePredicate() { Observable<String> src = Observable.just("a", "b", "c"); src.filter(IS_D).first("default").subscribe(wo); verify(wo, times(1)).onSuccess(anyString()); verify(wo, times(1)).onSuccess("default"); verify(wo, never()).onError(any(Throwable.class)); }
@Test public void testTakeFirstWithPredicateOfNoneMatchingThePredicate() { Observable<Integer> o = Observable.just(1, 3, 5, 7, 9, 7, 5, 3, 1); o.filter(IS_EVEN).take(1).subscribe(w); verify(w, never()).onNext(anyInt()); verify(w, times(1)).onComplete(); verify(w, never()).onError(any(Throwable.class)); }
@Test public void testTakeFirstWithPredicateOfSome() { Observable<Integer> o = Observable.just(1, 3, 5, 4, 6, 3); o.filter(IS_EVEN).take(1).subscribe(w); verify(w, times(1)).onNext(anyInt()); verify(w).onNext(4); verify(w, times(1)).onComplete(); verify(w, never()).onError(any(Throwable.class)); }
@Test public void testFirstOrElseWithPredicateOfNoneMatchingThePredicateObservable() { Observable<String> src = Observable.just("a", "b", "c"); src.filter(IS_D).first("default").toObservable().subscribe(w); verify(w, times(1)).onNext(anyString()); verify(w, times(1)).onNext("default"); verify(w, never()).onError(any(Throwable.class)); verify(w, times(1)).onComplete(); }
@Test public void testFirstWithPredicateOfNoneMatchingThePredicate() { Observable<Integer> o = Observable.just(1, 3, 5, 7, 9, 7, 5, 3, 1); o.filter(IS_EVEN).firstElement().subscribe(wm); verify(wm, never()).onSuccess(anyInt()); verify(wm).onComplete(); verify(wm, never()).onError(any(Throwable.class)); }
@Test public void testFirstOrElseWithPredicateOfSomeObservable() { Observable<String> src = Observable.just("a", "b", "c", "d", "e", "f"); src.filter(IS_D).first("default").toObservable().subscribe(w); verify(w, times(1)).onNext(anyString()); verify(w, times(1)).onNext("d"); verify(w, never()).onError(any(Throwable.class)); verify(w, times(1)).onComplete(); }
@Test public void justConditional() { Observable.just(1) .doAfterNext(afterNext) .filter(Functions.alwaysTrue()) .subscribeWith(ts) .assertResult(1); assertEquals(Arrays.asList(1, -1), values); }
@Test public void emptyConditional() { Observable.<Integer>empty() .doAfterNext(afterNext) .filter(Functions.alwaysTrue()) .subscribeWith(ts) .assertResult(); assertTrue(values.isEmpty()); }
@Test public void rangeConditional() { Observable.range(1, 5) .doAfterNext(afterNext) .filter(Functions.alwaysTrue()) .subscribeWith(ts) .assertResult(1, 2, 3, 4, 5); assertEquals(Arrays.asList(1, -1, 2, -2, 3, -3, 4, -4, 5, -5), values); }
@Test public void errorConditional() { Observable.<Integer>error(new TestException()) .doAfterNext(afterNext) .filter(Functions.alwaysTrue()) .subscribeWith(ts) .assertFailure(TestException.class); assertTrue(values.isEmpty()); }
@Test public void syncFusedConditional() { TestObserver<Integer> ts0 = ObserverFusion.newTest(QueueDisposable.SYNC); Observable.range(1, 5) .doAfterNext(afterNext) .filter(Functions.alwaysTrue()) .subscribe(ts0); ObserverFusion.assertFusion(ts0, QueueDisposable.SYNC) .assertResult(1, 2, 3, 4, 5); assertEquals(Arrays.asList(-1, -2, -3, -4, -5), values); }
@Test public void asyncFusedRejectedConditional() { TestObserver<Integer> ts0 = ObserverFusion.newTest(QueueDisposable.ASYNC); Observable.range(1, 5) .doAfterNext(afterNext) .filter(Functions.alwaysTrue()) .subscribe(ts0); ObserverFusion.assertFusion(ts0, QueueDisposable.NONE) .assertResult(1, 2, 3, 4, 5); assertEquals(Arrays.asList(-1, -2, -3, -4, -5), values); }
@Test public void normalEmptyConditional() { Observable.empty() .doFinally(this) .filter(Functions.alwaysTrue()) .test() .assertResult(); assertEquals(1, calls); }
@Test public void normalErrorConditional() { Observable.error(new TestException()) .doFinally(this) .filter(Functions.alwaysTrue()) .test() .assertFailure(TestException.class); assertEquals(1, calls); }
@Test public void normalTakeConditional() { Observable.range(1, 10) .doFinally(this) .filter(Functions.alwaysTrue()) .take(5) .test() .assertResult(1, 2, 3, 4, 5); assertEquals(1, calls); }
@Test public void syncFusedConditional() { TestObserver<Integer> ts = ObserverFusion.newTest(QueueDisposable.SYNC); Observable.range(1, 5) .doFinally(this) .filter(Functions.alwaysTrue()) .subscribe(ts); ObserverFusion.assertFusion(ts, QueueDisposable.SYNC) .assertResult(1, 2, 3, 4, 5); assertEquals(1, calls); }
@Test public void syncFusedBoundaryConditional() { TestObserver<Integer> ts = ObserverFusion.newTest(QueueDisposable.SYNC | QueueDisposable.BOUNDARY); Observable.range(1, 5) .doFinally(this) .filter(Functions.alwaysTrue()) .subscribe(ts); ObserverFusion.assertFusion(ts, QueueDisposable.NONE) .assertResult(1, 2, 3, 4, 5); assertEquals(1, calls); }
@Test public void nonFusedConditional() { TestObserver<Integer> ts = ObserverFusion.newTest(QueueDisposable.SYNC); Observable.range(1, 5).hide() .doFinally(this) .filter(Functions.alwaysTrue()) .subscribe(ts); ObserverFusion.assertFusion(ts, QueueDisposable.NONE) .assertResult(1, 2, 3, 4, 5); assertEquals(1, calls); }