@SuppressWarnings("unchecked") @Test public void mergeArrayZero() { assertSame(Flowable.empty(), Maybe.mergeArray()); }
@SuppressWarnings("unchecked") @Test public void mergeArrayOne() { Maybe.mergeArray(Maybe.just(1)).test().assertResult(1); }
@SuppressWarnings("unchecked") @Test public void mergeBadSource() { Maybe.mergeArray(new Maybe<Integer>() { @Override protected void subscribeActual(MaybeObserver<? super Integer> observer) { observer.onSubscribe(Disposables.empty()); observer.onSuccess(1); observer.onSuccess(2); observer.onSuccess(3); } }, Maybe.never()) .test() .assertResult(1, 2); }
@Test public void mergeALot() { @SuppressWarnings("unchecked") Maybe<Integer>[] sources = new Maybe[Flowable.bufferSize() * 2]; Arrays.fill(sources, Maybe.just(1)); Maybe.mergeArray(sources) .test() .assertSubscribed() .assertValueCount(sources.length) .assertNoErrors() .assertComplete(); }
@SuppressWarnings("unchecked") @Test public void smallOffer2Throws() { Maybe.mergeArray(Maybe.never(), Maybe.never()) .subscribe(new FlowableSubscriber<Object>() { @SuppressWarnings("rawtypes") @Override public void onSubscribe(Subscription s) { MergeMaybeObserver o = (MergeMaybeObserver)s; try { o.queue.offer(1, 2); fail("Should have thrown"); } catch (UnsupportedOperationException ex) { // expected } } @Override public void onNext(Object t) { } @Override public void onError(Throwable t) { } @Override public void onComplete() { } }); }
@SuppressWarnings("unchecked") @Test public void mergeArray() { Maybe.mergeArray(Maybe.just(1), Maybe.just(2), Maybe.just(3)) .test() .assertResult(1, 2, 3); }
@Test public void mergeALotLastEmpty() { @SuppressWarnings("unchecked") Maybe<Integer>[] sources = new Maybe[Flowable.bufferSize() * 2]; Arrays.fill(sources, Maybe.just(1)); sources[sources.length - 1] = Maybe.empty(); Maybe.mergeArray(sources) .test() .assertSubscribed() .assertValueCount(sources.length - 1) .assertNoErrors() .assertComplete(); }
@SuppressWarnings("unchecked") @Test public void fusedEmptyCheck() { Maybe.mergeArray(Maybe.just(1), Maybe.<Integer>empty(), Maybe.just(2)) .subscribe(new FlowableSubscriber<Integer>() { QueueSubscription<Integer> qs; @Override public void onSubscribe(Subscription s) { qs = (QueueSubscription<Integer>)s; assertEquals(QueueFuseable.ASYNC, qs.requestFusion(QueueFuseable.ANY)); } @Override public void onNext(Integer value) { assertFalse(qs.isEmpty()); qs.clear(); assertTrue(qs.isEmpty()); qs.cancel(); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); }
@SuppressWarnings("unchecked") @Test public void firstErrors() { TestSubscriber<Integer> ts = new TestSubscriber<Integer>(0L); Maybe.mergeArray(Maybe.<Integer>error(new TestException()), Maybe.<Integer>empty(), Maybe.just(2)) .subscribe(ts); ts.assertFailure(TestException.class); }
@SuppressWarnings("unchecked") @Test public void cancel() { TestSubscriber<Integer> ts = new TestSubscriber<Integer>(0L); Maybe.mergeArray(Maybe.just(1), Maybe.<Integer>empty(), Maybe.just(2)) .subscribe(ts); ts.cancel(); ts.request(10); ts.assertEmpty(); }
@SuppressWarnings("unchecked") @Test public void mergeArrayBackpressuredMixed1() { TestSubscriber<Integer> ts = Maybe.mergeArray(Maybe.just(1), Maybe.<Integer>empty(), Maybe.just(3)) .test(0L); ts.assertEmpty(); ts.request(1); ts.assertValue(1); ts.request(1); ts.assertResult(1, 3); }
@SuppressWarnings("unchecked") @Test public void normal() { TestSubscriber<Integer> ts = SubscriberFusion.newTest(QueueFuseable.SYNC); Maybe.mergeArray(Maybe.just(1), Maybe.just(2)) .subscribe(ts); ts .assertOf(SubscriberFusion.<Integer>assertFuseable()) .assertOf(SubscriberFusion.<Integer>assertFusionMode(QueueFuseable.NONE)) .assertResult(1, 2); }
@SuppressWarnings("unchecked") @Test public void mergeArrayBackpressuredMixed2() { TestSubscriber<Integer> ts = Maybe.mergeArray(Maybe.just(1), Maybe.just(2), Maybe.<Integer>empty()) .test(0L); ts.assertEmpty(); ts.request(1); ts.assertValue(1); ts.request(1); ts.assertResult(1, 2); }
@SuppressWarnings("unchecked") @Test public void mergeArrayBackpressuredMixed3() { TestSubscriber<Integer> ts = Maybe.mergeArray(Maybe.<Integer>empty(), Maybe.just(2), Maybe.just(3)) .test(0L); ts.assertEmpty(); ts.request(1); ts.assertValue(2); ts.request(1); ts.assertResult(2, 3); }
@Test public void mergeALotFused() { @SuppressWarnings("unchecked") Maybe<Integer>[] sources = new Maybe[Flowable.bufferSize() * 2]; Arrays.fill(sources, Maybe.just(1)); TestSubscriber<Integer> ts = SubscriberFusion.newTest(QueueFuseable.ANY); Maybe.mergeArray(sources).subscribe(ts); ts .assertSubscribed() .assertOf(SubscriberFusion.<Integer>assertFuseable()) .assertOf(SubscriberFusion.<Integer>assertFusionMode(QueueFuseable.ASYNC)) .assertValueCount(sources.length) .assertNoErrors() .assertComplete(); }
@SuppressWarnings("unchecked") @Test public void errorFused() { TestSubscriber<Integer> ts = SubscriberFusion.newTest(QueueFuseable.ANY); Maybe.mergeArray(Maybe.<Integer>error(new TestException()), Maybe.just(2)) .subscribe(ts); ts .assertOf(SubscriberFusion.<Integer>assertFuseable()) .assertOf(SubscriberFusion.<Integer>assertFusionMode(QueueFuseable.ASYNC)) .assertFailure(TestException.class); }
@SuppressWarnings("unchecked") @Test public void fusedPollMixed() { TestSubscriber<Integer> ts = SubscriberFusion.newTest(QueueFuseable.ANY); Maybe.mergeArray(Maybe.just(1), Maybe.<Integer>empty(), Maybe.just(2)) .subscribe(ts); ts .assertOf(SubscriberFusion.<Integer>assertFuseable()) .assertOf(SubscriberFusion.<Integer>assertFusionMode(QueueFuseable.ASYNC)) .assertResult(1, 2); }
@SuppressWarnings("unchecked") @Test public void mergeArrayFused() { TestSubscriber<Integer> ts = SubscriberFusion.newTest(QueueFuseable.ANY); Maybe.mergeArray(Maybe.just(1), Maybe.just(2), Maybe.just(3)).subscribe(ts); ts.assertSubscribed() .assertOf(SubscriberFusion.<Integer>assertFuseable()) .assertOf(SubscriberFusion.<Integer>assertFusionMode(QueueFuseable.ASYNC)) .assertResult(1, 2, 3); }
@SuppressWarnings("unchecked") @Test public void mergeArrayBackpressured() { TestSubscriber<Integer> ts = Maybe.mergeArray(Maybe.just(1), Maybe.just(2), Maybe.just(3)) .test(0L); ts.assertEmpty(); ts.request(1); ts.assertValue(1); ts.request(1); ts.assertValues(1, 2); ts.request(1); ts.assertResult(1, 2, 3); }
@SuppressWarnings("unchecked") @Test public void mergeArrayFusedRace() { for (int i = 0; i < TestHelper.RACE_DEFAULT_LOOPS; i++) { final PublishProcessor<Integer> pp1 = PublishProcessor.create(); final PublishProcessor<Integer> pp2 = PublishProcessor.create(); TestSubscriber<Integer> ts = SubscriberFusion.newTest(QueueFuseable.ANY); Maybe.mergeArray(pp1.singleElement(), pp2.singleElement()).subscribe(ts); ts.assertSubscribed() .assertOf(SubscriberFusion.<Integer>assertFuseable()) .assertOf(SubscriberFusion.<Integer>assertFusionMode(QueueFuseable.ASYNC)) ; TestHelper.race(new Runnable() { @Override public void run() { pp1.onNext(1); pp1.onComplete(); } }, new Runnable() { @Override public void run() { pp2.onNext(1); pp2.onComplete(); } }); ts .awaitDone(5, TimeUnit.SECONDS) .assertResult(1, 1); } }