/** * Creates a pattern that matches when both observable sequences have an available element. * @param left the left source * @param right the right source * @param <T1> the left value type * @param <T2> the right value type * @return the pattern with two sources 'and'-ed */ public static <T1, T2> Pattern2<T1, T2> and(/* this */Observable<T1> left, Observable<T2> right) { if (left == null) { throw new NullPointerException("left"); } if (right == null) { throw new NullPointerException("right"); } return new Pattern2<T1, T2>(left, right); }
@Test(expected = NullPointerException.class) public void and3argumentNull() { JoinObservable.from(some).and(some).and(null); }
@Test public void whenMultipleSymmetric() { Observable<Integer> source1 = Observable.just(1, 2, 3); Observable<Integer> source2 = Observable.just(4, 5, 6); Observable<Integer> m = JoinObservable.when(JoinObservable.from(source1).and(source2).then(add)).toObservable(); m.subscribe(observer); verify(observer, never()).onError(any(Throwable.class)); verify(observer, times(1)).onNext(1 + 4); verify(observer, times(1)).onNext(2 + 5); verify(observer, times(1)).onNext(3 + 6); verify(observer, times(1)).onComplete(); }
@Test public void whenMultipleAsymSymmetric() { Observable<Integer> source1 = Observable.just(1, 2, 3); Observable<Integer> source2 = Observable.just(4, 5); Observable<Integer> m = JoinObservable.when(JoinObservable.from(source1).and(source2).then(add)).toObservable(); m.subscribe(observer); verify(observer, never()).onError(any(Throwable.class)); verify(observer, times(1)).onNext(1 + 4); verify(observer, times(1)).onNext(2 + 5); verify(observer, times(1)).onComplete(); }
@Test(expected = NullPointerException.class) public void then3ArgumentNull() { JoinObservable.from(some).and(some).and(some).then(null); }
@Test public void whenEmptyEmpty() { Observable<Integer> source1 = Observable.empty(); Observable<Integer> source2 = Observable.empty(); Observable<Integer> m = JoinObservable.when(JoinObservable.from(source1).and(source2).then(add)).toObservable(); m.subscribe(observer); verify(observer, never()).onError(any(Throwable.class)); verify(observer, never()).onNext(any(Integer.class)); verify(observer, times(1)).onComplete(); }
/** * Creates a pattern that matches when both observable sequences have an available element. * @param left the left source * @param right the right source * @param <T1> the left value type * @param <T2> the right value type * @return the pattern with two sources 'and'-ed */ public static <T1, T2> Pattern2<T1, T2> and(/* this */Observable<T1> left, Observable<T2> right) { if (left == null) { throw new NullPointerException("left"); } if (right == null) { throw new NullPointerException("right"); } return new Pattern2<T1, T2>(left, right); }
@Test(expected = NullPointerException.class) public void then4ArgumentNull() { JoinObservable.from(some).and(some).and(some).and(some).then(null); }
@Test public void whenNeverNever() { Observable<Integer> source1 = Observable.never(); Observable<Integer> source2 = Observable.never(); Observable<Integer> m = JoinObservable.when(JoinObservable.from(source1).and(source2).then(add)).toObservable(); m.subscribe(observer); verify(observer, never()).onError(any(Throwable.class)); verify(observer, never()).onNext(any(Integer.class)); verify(observer, never()).onComplete(); }
@Test public void and3Error3() { verifyError(JoinObservable.when(JoinObservable.from(some).and(some).and(error).then(add))); }
@Test public void whenThrowNonEmpty() { Observable<Integer> source1 = Observable.empty(); Observable<Integer> source2 = Observable.error(new TestException("Forced failure")); Observable<Integer> m = JoinObservable.when(JoinObservable.from(source1).and(source2).then(add)).toObservable(); m.subscribe(observer); verify(observer, times(1)).onError(any(Throwable.class)); verify(observer, never()).onNext(any(Integer.class)); verify(observer, never()).onComplete(); }
@Test public void and3() { verifyAnd(JoinObservable.when(JoinObservable.from(some).and(some).and(some).then(add)), 3); }
@Test(expected = NullPointerException.class) public void then2ArgumentNull() { JoinObservable.from(some).and(some).then(null); }
@Test public void then3Throws() { verifyError(JoinObservable.when(JoinObservable.from(some).and(some).and(some).then(throwFunc))); }
@Test public void then2Throws() { verifyError(JoinObservable.when(JoinObservable.from(some).and(some).then(throwFunc))); }
@Test public void and3Error1() { verifyError(JoinObservable.when(JoinObservable.from(error).and(some).and(some).then(add))); }
@Test public void and2() { verifyAnd(JoinObservable.when(JoinObservable.from(some).and(some).then(add)), 2); }
@Test(expected = NullPointerException.class) public void then5ArgumentNull() { JoinObservable.from(some).and(some).and(some).and(some).and(some).then(null); }