protected <T> void setupBaseSingleError(final BaseSingle<T> baseSingle) { doAnswer(invocation -> { final SingleEmitter<T> subscriber = ((BaseSingle.ApiClientConnectionCallbacks)invocation.getArguments()[0]).subscriber; doAnswer(invocation1 -> { subscriber.onError(new GoogleAPIConnectionException("Error connecting to GoogleApiClient.", connectionResult)); return null; }).when(apiClient).connect(); return apiClient; }).when(baseSingle).createApiClient(Matchers.any(BaseRx.ApiClientConnectionCallbacks.class)); }
protected <T> void setupBaseSingleSuccess(final BaseSingle<T> baseSingle, final GoogleApiClient apiClient) { doAnswer(invocation -> { final SingleEmitter<T> subscriber = ((BaseSingle.ApiClientConnectionCallbacks)invocation.getArguments()[0]).subscriber; doAnswer(invocation1 -> { baseSingle.onGoogleApiClientReady(apiClient, subscriber); return null; }).when(apiClient).connect(); return apiClient; }).when(baseSingle).createApiClient(Matchers.any(BaseRx.ApiClientConnectionCallbacks.class)); }
@Override public final void subscribe(SingleEmitter<T> subscriber) throws Exception { final GoogleApiClient apiClient = createApiClient(new ApiClientConnectionCallbacks(subscriber)); subscriptionInfoMap.put(apiClient, subscriber); try { apiClient.connect(); } catch (Throwable ex) { subscriber.onError(ex); } subscriber.setCancellable(() -> { if (apiClient.isConnected() || apiClient.isConnecting()) { onUnsubscribed(apiClient); apiClient.disconnect(); } subscriptionInfoMap.remove(apiClient); }); }
@Test public void handleResolutionResult_ResultCanceled() { final Object object = new Object(); BaseSingle<Object> single = spy(new BaseSingle<Object>(rxFit, null, null) { @Override protected void onGoogleApiClientReady(GoogleApiClient apiClient, SingleEmitter<? super Object> subscriber) { subscriber.onSuccess(object); } }); SingleEmitter sub = PowerMockito.spy(new SingleEmitter() { @Override public void onSuccess(Object value) { } @Override public void onError(Throwable error) { } @Override public void setDisposable(Disposable s) {} @Override public void setCancellable(Cancellable c) { } @Override public boolean isDisposed() { return false;} }); PowerMockito.doReturn(false).when(sub).isDisposed(); single.subscriptionInfoMap.put(apiClient, sub); single.handleResolutionResult(Activity.RESULT_CANCELED, connectionResult); verifyZeroInteractions(apiClient); verify(sub).onError(Matchers.any(GoogleAPIConnectionException.class)); }
@Test public void handleResolutionResult_ResultOK() { final Object object = new Object(); BaseSingle<Object> single = spy(new BaseSingle<Object>(rxFit, null, null) { @Override protected void onGoogleApiClientReady(GoogleApiClient apiClient, SingleEmitter<? super Object> subscriber) { subscriber.onSuccess(object); } }); SingleEmitter sub = PowerMockito.spy(new SingleEmitter() { @Override public void onSuccess(Object value) { } @Override public void onError(Throwable error) { } @Override public void setDisposable(Disposable s) {} @Override public void setCancellable(Cancellable c) { } @Override public boolean isDisposed() { return false;} }); PowerMockito.doReturn(false).when(sub).isDisposed(); single.subscriptionInfoMap.put(apiClient, sub); single.handleResolutionResult(Activity.RESULT_OK, connectionResult); verify(apiClient).connect(); verifyNoMoreInteractions(apiClient); verify(sub, never()).onError(Matchers.any(Throwable.class)); }
@Test public void BaseObservable_ApiClient_ConnectionFailed_Resolution() { final Object object = new Object(); BaseSingle<Object> single = spy(new BaseSingle<Object>(rxFit, null, null) { @Override protected void onGoogleApiClientReady(GoogleApiClient apiClient, SingleEmitter<? super Object> subscriber) { subscriber.onSuccess(object); } }); doReturn(true).when(connectionResult).hasResolution(); doAnswer(invocation -> { BaseRx.ApiClientConnectionCallbacks callbacks = invocation.getArgumentAt(0, BaseRx.ApiClientConnectionCallbacks.class); callbacks.setClient(apiClient); callbacks.onConnectionFailed(connectionResult); return apiClient; }).when(single).createApiClient(Matchers.any(BaseRx.ApiClientConnectionCallbacks.class)); TestObserver<Object> sub = Single.create(single).test(); sub.assertNoValues(); sub.assertNotTerminated(); verify(ctx).startActivity(Matchers.any(Intent.class)); }
@Test public void handleResolutionResult_ResultOK_ConnectionException() { final Object object = new Object(); BaseSingle<Object> single = spy(new BaseSingle<Object>(rxFit, null, null) { @Override protected void onGoogleApiClientReady(GoogleApiClient apiClient, SingleEmitter<? super Object> subscriber) { subscriber.onSuccess(object); } }); SingleEmitter sub = PowerMockito.spy(new SingleEmitter() { @Override public void onSuccess(Object value) { } @Override public void onError(Throwable error) { } @Override public void setDisposable(Disposable s) {} @Override public void setCancellable(Cancellable c) { } @Override public boolean isDisposed() { return false;} }); RuntimeException exception = new RuntimeException(); doThrow(exception).when(apiClient).connect(); PowerMockito.doReturn(false).when(sub).isDisposed(); single.subscriptionInfoMap.put(apiClient, sub); single.handleResolutionResult(Activity.RESULT_OK, connectionResult); verify(apiClient).connect(); verifyNoMoreInteractions(apiClient); verify(sub).onError(exception); }
@Test public void BaseObservable_ApiClient_ConnectionFailed_NoResulution() { final Object object = new Object(); BaseSingle<Object> single = spy(new BaseSingle<Object>(ctx, new Api[] {}, null) { @Override protected void onGoogleApiClientReady(GoogleApiClient apiClient, SingleEmitter<? super Object> subscriber) { subscriber.onSuccess(object); } }); doReturn(false).when(connectionResult).hasResolution(); doAnswer(invocation -> { BaseRx.ApiClientConnectionCallbacks callbacks = invocation.getArgumentAt(0, BaseRx.ApiClientConnectionCallbacks.class); callbacks.setClient(apiClient); callbacks.onConnectionFailed(connectionResult); return apiClient; }).when(single).createApiClient(Matchers.any(BaseRx.ApiClientConnectionCallbacks.class)); TestObserver<Object> sub = Single.create(single).test(); sub.assertNoValues(); sub.assertError(GoogleAPIConnectionException.class); }
@Test public void BaseObservable_ApiClient_ConnectionSuspended() { final Object object = new Object(); BaseSingle<Object> single = spy(new BaseSingle<Object>(ctx, new Api[] {}, null) { @Override protected void onGoogleApiClientReady(GoogleApiClient apiClient, SingleEmitter<? super Object> subscriber) { subscriber.onSuccess(object); } }); doAnswer(invocation -> { BaseRx.ApiClientConnectionCallbacks callbacks = invocation.getArgumentAt(0, BaseRx.ApiClientConnectionCallbacks.class); callbacks.setClient(apiClient); callbacks.onConnectionSuspended(0); return apiClient; }).when(single).createApiClient(Matchers.any(BaseRx.ApiClientConnectionCallbacks.class)); TestObserver<Object> sub = Single.create(single).test(); sub.assertNoValues(); sub.assertError(GoogleAPIConnectionSuspendedException.class); }
@Test public void BaseObservable_ApiClient_Connected() { final Object object = new Object(); BaseSingle<Object> single = spy(new BaseSingle<Object>(ctx, new Api[] {}, null) { @Override protected void onGoogleApiClientReady(GoogleApiClient apiClient, SingleEmitter<? super Object> subscriber) { subscriber.onSuccess(object); } }); doAnswer(invocation -> { BaseRx.ApiClientConnectionCallbacks callbacks = invocation.getArgumentAt(0, BaseRx.ApiClientConnectionCallbacks.class); callbacks.setClient(apiClient); callbacks.onConnected(null); return apiClient; }).when(single).createApiClient(Matchers.any(BaseRx.ApiClientConnectionCallbacks.class)); TestObserver<Object> sub = Single.create(single).test(); sub.assertValue(object); sub.assertComplete(); }