@Override public void onNext(T v) { target.onNext(v); } }
@Override public void onNext(T t) { if (!done && remaining-- > 0) { boolean stop = remaining == 0; downstream.onNext(t); if (stop) { upstream.cancel(); onComplete(); } } }
@Override public void run() { Subscriber<Object> subscriber = ref.get(); subscriber.onNext(1); subscriber.onError(ex); } };
@Override protected void subscribeActual(Subscriber<? super Object> s) { s.onSubscribe(new BooleanSubscription()); for (int i = 0; i < 10; i++) { s.onNext(i); } } }, 8)
@Override public void onNext(T t) { long idx = get(); if (idx == Long.MAX_VALUE || !compareAndSet(idx, idx + 1)) { return; } task.get().dispose(); downstream.onNext(t); startTimeout(idx + 1); }
@Test public void testTake1() { Flowable<String> w = Flowable.fromIterable(Arrays.asList("one", "two", "three")); Flowable<String> take = w.take(2); Subscriber<String> subscriber = TestHelper.mockSubscriber(); take.subscribe(subscriber); verify(subscriber, times(1)).onNext("one"); verify(subscriber, times(1)).onNext("two"); verify(subscriber, never()).onNext("three"); verify(subscriber, never()).onError(any(Throwable.class)); verify(subscriber, times(1)).onComplete(); }
@Test public void testSkipTwoElements() { Flowable<String> skip = Flowable.just("one", "two", "three").skip(2); Subscriber<String> subscriber = TestHelper.mockSubscriber(); skip.subscribe(subscriber); verify(subscriber, never()).onNext("one"); verify(subscriber, never()).onNext("two"); verify(subscriber, times(1)).onNext("three"); verify(subscriber, never()).onError(any(Throwable.class)); verify(subscriber, times(1)).onComplete(); }
@Test @Ignore("Null values not allowed") public void testSkipLastWithNull() { Flowable<String> flowable = Flowable.fromIterable(Arrays.asList("one", null, "two")).skipLast(1); Subscriber<String> subscriber = TestHelper.mockSubscriber(); flowable.subscribe(subscriber); verify(subscriber, times(1)).onNext("one"); verify(subscriber, times(1)).onNext(null); verify(subscriber, never()).onNext("two"); verify(subscriber, never()).onError(any(Throwable.class)); verify(subscriber, times(1)).onComplete(); }
@Override protected void subscribeActual(Subscriber<? super Integer> subscriber) { subscriber.onSubscribe(new BooleanSubscription()); subscriber.onNext(1); subscriber.onNext(2); subscriber.onError(new TestException("First")); subscriber.onNext(3); subscriber.onComplete(); subscriber.onError(new TestException("Second")); } }
@Test public void testSkipError() { Flowable<Integer> src = Flowable.just(1, 2, 42, 5, 3, 1); src.skipWhile(LESS_THAN_FIVE).subscribe(w); InOrder inOrder = inOrder(w); inOrder.verify(w, never()).onNext(anyInt()); inOrder.verify(w, never()).onComplete(); inOrder.verify(w, times(1)).onError(any(RuntimeException.class)); }
@Test public void testSkipEverything() { Flowable<Integer> src = Flowable.just(1, 2, 3, 4, 3, 2, 1); src.skipWhile(LESS_THAN_FIVE).subscribe(w); verify(w, never()).onNext(anyInt()); verify(w, never()).onError(any(Throwable.class)); verify(w, times(1)).onComplete(); }
@Test public void testTimerOnce() { Flowable.timer(100, TimeUnit.MILLISECONDS, scheduler).subscribe(subscriber); scheduler.advanceTimeBy(100, TimeUnit.MILLISECONDS); verify(subscriber, times(1)).onNext(0L); verify(subscriber, times(1)).onComplete(); verify(subscriber, never()).onError(any(Throwable.class)); }
@Test public void testFirstInfiniteThenSecondCompletes() { s1.onNext("a"); s1.onNext("b"); s2.onNext("1"); inOrder.verify(subscriber, times(1)).onNext("a-1"); s2.onNext("2"); inOrder.verify(subscriber, times(1)).onNext("b-2"); s2.onComplete(); inOrder.verify(subscriber, times(1)).onComplete(); inOrder.verifyNoMoreInteractions(); }
@Test public void testSkipEmptyStream() { Flowable<String> w = Flowable.empty(); Flowable<String> skip = w.skip(1); Subscriber<String> subscriber = TestHelper.mockSubscriber(); skip.subscribe(subscriber); verify(subscriber, never()).onNext(any(String.class)); verify(subscriber, never()).onError(any(Throwable.class)); verify(subscriber, times(1)).onComplete(); }
@Test(timeout = 2000) public void testRepeatError() { Subscriber<Object> subscriber = TestHelper.mockSubscriber(); Flowable.error(new TestException()).repeat(10).subscribe(subscriber); verify(subscriber).onError(any(TestException.class)); verify(subscriber, never()).onNext(any()); verify(subscriber, never()).onComplete(); }
@Test public void testSkipError() { Exception e = new Exception(); Flowable<String> ok = Flowable.just("one"); Flowable<String> error = Flowable.error(e); Flowable<String> skip = Flowable.concat(ok, error).skip(100); Subscriber<String> subscriber = TestHelper.mockSubscriber(); skip.subscribe(subscriber); verify(subscriber, never()).onNext(any(String.class)); verify(subscriber, times(1)).onError(e); verify(subscriber, never()).onComplete(); }
@Test public void testNeverCompleted() { AsyncProcessor<String> processor = AsyncProcessor.create(); Subscriber<String> subscriber = TestHelper.mockSubscriber(); processor.subscribe(subscriber); processor.onNext("one"); processor.onNext("two"); processor.onNext("three"); verify(subscriber, Mockito.never()).onNext(anyString()); verify(subscriber, Mockito.never()).onError(testException); verify(subscriber, Mockito.never()).onComplete(); }