@Override public void close(int timeout) { if (closed) { return; } closed = true; if (timeout > 0) { long start = System.currentTimeMillis(); while (DefaultFuture.hasFuture(channel) && System.currentTimeMillis() - start < timeout) { try { Thread.sleep(10); } catch (InterruptedException e) { logger.warn(e.getMessage(), e); } } } close(); }
@Override public void close(int timeout) { if (closed) { return; } closed = true; if (timeout > 0) { long start = System.currentTimeMillis(); while (DefaultFuture.hasFuture(channel) && System.currentTimeMillis() - start < timeout) { try { Thread.sleep(10); } catch (InterruptedException e) { logger.warn(e.getMessage(), e); } } } close(); }
@Override public void run() { try { start.await(); serialDisposable.dispose(); } catch (InterruptedException e) { fail(e.getMessage()); } finally { end.countDown(); } } };
@Override public void run() { try { start.await(); serialDisposable.update(subscription); } catch (InterruptedException e) { fail(e.getMessage()); } finally { end.countDown(); } } };
@Override public void run() { try { start.await(); serialDisposable.dispose(); } catch (InterruptedException e) { fail(e.getMessage()); } finally { end.countDown(); } } };
@Override public void run() { try { start.await(); serialDisposable.set(subscription); } catch (InterruptedException e) { fail(e.getMessage()); } finally { end.countDown(); } } };
@Override public void run() { try { start.await(); cd.dispose(); } catch (final InterruptedException e) { fail(e.getMessage()); } } };
@Override public void run() { try { start.await(); cd.dispose(); } catch (final InterruptedException e) { fail(e.getMessage()); } } };
@Test public void testResumeNext() { Disposable upstream = mock(Disposable.class); // Trigger failure on second element TestObservable f = new TestObservable(upstream, "one", "fail", "two", "three"); Observable<String> w = Observable.unsafeCreate(f); Observable<String> resume = Observable.just("twoResume", "threeResume"); Observable<String> observable = w.onErrorResumeNext(resume); Observer<String> observer = TestHelper.mockObserver(); observable.subscribe(observer); try { f.t.join(); } catch (InterruptedException e) { fail(e.getMessage()); } verify(observer, Mockito.never()).onError(any(Throwable.class)); verify(observer, times(1)).onComplete(); verify(observer, times(1)).onNext("one"); verify(observer, Mockito.never()).onNext("two"); verify(observer, Mockito.never()).onNext("three"); verify(observer, times(1)).onNext("twoResume"); verify(observer, times(1)).onNext("threeResume"); }
@Test public void testResumeNextWithException() { // Trigger failure on second element TestObservable f = new TestObservable("one", "EXCEPTION", "two", "three"); Observable<String> w = Observable.unsafeCreate(f); Observable<String> resume = Observable.just("twoResume", "threeResume"); Observable<String> observable = w.onExceptionResumeNext(resume); Observer<String> observer = TestHelper.mockObserver(); observable.subscribe(observer); try { f.t.join(); } catch (InterruptedException e) { fail(e.getMessage()); } verify(observer).onSubscribe((Disposable)any()); verify(observer, times(1)).onNext("one"); verify(observer, Mockito.never()).onNext("two"); verify(observer, Mockito.never()).onNext("three"); verify(observer, times(1)).onNext("twoResume"); verify(observer, times(1)).onNext("threeResume"); verify(observer, Mockito.never()).onError(any(Throwable.class)); verify(observer, times(1)).onComplete(); verifyNoMoreInteractions(observer); }
@Test public void testThrowablePassesThru() { // Trigger failure on second element TestObservable f = new TestObservable("one", "THROWABLE", "two", "three"); Observable<String> w = Observable.unsafeCreate(f); Observable<String> resume = Observable.just("twoResume", "threeResume"); Observable<String> observable = w.onExceptionResumeNext(resume); Observer<String> observer = TestHelper.mockObserver(); observable.subscribe(observer); try { f.t.join(); } catch (InterruptedException e) { fail(e.getMessage()); } verify(observer).onSubscribe((Disposable)any()); verify(observer, times(1)).onNext("one"); verify(observer, never()).onNext("two"); verify(observer, never()).onNext("three"); verify(observer, never()).onNext("twoResume"); verify(observer, never()).onNext("threeResume"); verify(observer, times(1)).onError(any(Throwable.class)); verify(observer, never()).onComplete(); verifyNoMoreInteractions(observer); }
@Test public void testErrorPassesThru() { // Trigger failure on second element TestObservable f = new TestObservable("one", "ERROR", "two", "three"); Observable<String> w = Observable.unsafeCreate(f); Observable<String> resume = Observable.just("twoResume", "threeResume"); Observable<String> observable = w.onExceptionResumeNext(resume); Observer<String> observer = TestHelper.mockObserver(); observable.subscribe(observer); try { f.t.join(); } catch (InterruptedException e) { fail(e.getMessage()); } verify(observer).onSubscribe((Disposable)any()); verify(observer, times(1)).onNext("one"); verify(observer, never()).onNext("two"); verify(observer, never()).onNext("three"); verify(observer, never()).onNext("twoResume"); verify(observer, never()).onNext("threeResume"); verify(observer, times(1)).onError(any(Throwable.class)); verify(observer, never()).onComplete(); verifyNoMoreInteractions(observer); }
@Test public void testResumeNextWithRuntimeException() { // Trigger failure on second element TestObservable f = new TestObservable("one", "RUNTIMEEXCEPTION", "two", "three"); Observable<String> w = Observable.unsafeCreate(f); Observable<String> resume = Observable.just("twoResume", "threeResume"); Observable<String> observable = w.onExceptionResumeNext(resume); Observer<String> observer = TestHelper.mockObserver(); observable.subscribe(observer); try { f.t.join(); } catch (InterruptedException e) { fail(e.getMessage()); } verify(observer).onSubscribe((Disposable)any()); verify(observer, times(1)).onNext("one"); verify(observer, Mockito.never()).onNext("two"); verify(observer, Mockito.never()).onNext("three"); verify(observer, times(1)).onNext("twoResume"); verify(observer, times(1)).onNext("threeResume"); verify(observer, Mockito.never()).onError(any(Throwable.class)); verify(observer, times(1)).onComplete(); verifyNoMoreInteractions(observer); }
@Test public void testThrowablePassesThru() { // Trigger failure on second element TestObservable f = new TestObservable("one", "THROWABLE", "two", "three"); Flowable<String> w = Flowable.unsafeCreate(f); Flowable<String> resume = Flowable.just("twoResume", "threeResume"); Flowable<String> flowable = w.onExceptionResumeNext(resume); Subscriber<String> subscriber = TestHelper.mockSubscriber(); flowable.subscribe(subscriber); try { f.t.join(); } catch (InterruptedException e) { fail(e.getMessage()); } verify(subscriber).onSubscribe((Subscription)any()); verify(subscriber, times(1)).onNext("one"); verify(subscriber, never()).onNext("two"); verify(subscriber, never()).onNext("three"); verify(subscriber, never()).onNext("twoResume"); verify(subscriber, never()).onNext("threeResume"); verify(subscriber, times(1)).onError(any(Throwable.class)); verify(subscriber, never()).onComplete(); verifyNoMoreInteractions(subscriber); }
@Test public void testResumeNextWithException() { // Trigger failure on second element TestObservable f = new TestObservable("one", "EXCEPTION", "two", "three"); Flowable<String> w = Flowable.unsafeCreate(f); Flowable<String> resume = Flowable.just("twoResume", "threeResume"); Flowable<String> flowable = w.onExceptionResumeNext(resume); Subscriber<String> subscriber = TestHelper.mockSubscriber(); flowable.subscribe(subscriber); try { f.t.join(); } catch (InterruptedException e) { fail(e.getMessage()); } verify(subscriber).onSubscribe((Subscription)any()); verify(subscriber, times(1)).onNext("one"); verify(subscriber, Mockito.never()).onNext("two"); verify(subscriber, Mockito.never()).onNext("three"); verify(subscriber, times(1)).onNext("twoResume"); verify(subscriber, times(1)).onNext("threeResume"); verify(subscriber, Mockito.never()).onError(any(Throwable.class)); verify(subscriber, times(1)).onComplete(); verifyNoMoreInteractions(subscriber); }
@Test public void testResumeNextWithRuntimeException() { // Trigger failure on second element TestObservable f = new TestObservable("one", "RUNTIMEEXCEPTION", "two", "three"); Flowable<String> w = Flowable.unsafeCreate(f); Flowable<String> resume = Flowable.just("twoResume", "threeResume"); Flowable<String> flowable = w.onExceptionResumeNext(resume); Subscriber<String> subscriber = TestHelper.mockSubscriber(); flowable.subscribe(subscriber); try { f.t.join(); } catch (InterruptedException e) { fail(e.getMessage()); } verify(subscriber).onSubscribe((Subscription)any()); verify(subscriber, times(1)).onNext("one"); verify(subscriber, Mockito.never()).onNext("two"); verify(subscriber, Mockito.never()).onNext("three"); verify(subscriber, times(1)).onNext("twoResume"); verify(subscriber, times(1)).onNext("threeResume"); verify(subscriber, Mockito.never()).onError(any(Throwable.class)); verify(subscriber, times(1)).onComplete(); verifyNoMoreInteractions(subscriber); }
@Test public void testErrorPassesThru() { // Trigger failure on second element TestObservable f = new TestObservable("one", "ERROR", "two", "three"); Flowable<String> w = Flowable.unsafeCreate(f); Flowable<String> resume = Flowable.just("twoResume", "threeResume"); Flowable<String> flowable = w.onExceptionResumeNext(resume); Subscriber<String> subscriber = TestHelper.mockSubscriber(); flowable.subscribe(subscriber); try { f.t.join(); } catch (InterruptedException e) { fail(e.getMessage()); } verify(subscriber).onSubscribe((Subscription)any()); verify(subscriber, times(1)).onNext("one"); verify(subscriber, never()).onNext("two"); verify(subscriber, never()).onNext("three"); verify(subscriber, never()).onNext("twoResume"); verify(subscriber, never()).onNext("threeResume"); verify(subscriber, times(1)).onError(any(Throwable.class)); verify(subscriber, never()).onComplete(); verifyNoMoreInteractions(subscriber); }
@Test public void testResumeNext() { TestObservable f = new TestObservable("one"); Observable<String> w = Observable.unsafeCreate(f); final AtomicReference<Throwable> capturedException = new AtomicReference<Throwable>(); Observable<String> observable = w.onErrorReturn(new Function<Throwable, String>() { @Override public String apply(Throwable e) { capturedException.set(e); return "failure"; } }); Observer<String> observer = TestHelper.mockObserver(); observable.subscribe(observer); try { f.t.join(); } catch (InterruptedException e) { fail(e.getMessage()); } verify(observer, Mockito.never()).onError(any(Throwable.class)); verify(observer, times(1)).onComplete(); verify(observer, times(1)).onNext("one"); verify(observer, times(1)).onNext("failure"); assertNotNull(capturedException.get()); }
@Test public void testResumeNext() { Subscription s = mock(Subscription.class); // Trigger failure on second element TestObservable f = new TestObservable(s, "one", "fail", "two", "three"); Flowable<String> w = Flowable.unsafeCreate(f); Flowable<String> resume = Flowable.just("twoResume", "threeResume"); Flowable<String> flowable = w.onErrorResumeNext(resume); Subscriber<String> subscriber = TestHelper.mockSubscriber(); flowable.subscribe(subscriber); try { f.t.join(); } catch (InterruptedException e) { fail(e.getMessage()); } verify(subscriber, Mockito.never()).onError(any(Throwable.class)); verify(subscriber, times(1)).onComplete(); verify(subscriber, times(1)).onNext("one"); verify(subscriber, Mockito.never()).onNext("two"); verify(subscriber, Mockito.never()).onNext("three"); verify(subscriber, times(1)).onNext("twoResume"); verify(subscriber, times(1)).onNext("threeResume"); }
@Test public void testResumeNext() { TestFlowable f = new TestFlowable("one"); Flowable<String> w = Flowable.unsafeCreate(f); final AtomicReference<Throwable> capturedException = new AtomicReference<Throwable>(); Flowable<String> flowable = w.onErrorReturn(new Function<Throwable, String>() { @Override public String apply(Throwable e) { capturedException.set(e); return "failure"; } }); Subscriber<String> subscriber = TestHelper.mockSubscriber(); flowable.subscribe(subscriber); try { f.t.join(); } catch (InterruptedException e) { fail(e.getMessage()); } verify(subscriber, Mockito.never()).onError(any(Throwable.class)); verify(subscriber, times(1)).onNext("one"); verify(subscriber, times(1)).onNext("failure"); verify(subscriber, times(1)).onComplete(); assertNotNull(capturedException.get()); }