private void connectOnMainThread() { Check.isMainThread(); final boolean connecting = mConnector.connect(); if (!connecting) { setState(State.FAILED); } }
@Test public void testShouldDisconnectOnlyIfNotInInitialState() throws Exception { mBilling.setState(Billing.State.INITIAL); mBilling.setService(null, false); assertEquals(Billing.State.INITIAL, mBilling.getState()); mBilling.setState(Billing.State.CONNECTING); mBilling.setState(Billing.State.CONNECTED); mBilling.setState(Billing.State.DISCONNECTING); mBilling.setService(null, false); assertEquals(Billing.State.DISCONNECTED, mBilling.getState()); mBilling.setState(Billing.State.CONNECTING); mBilling.setState(Billing.State.CONNECTED); mBilling.setService(null, false); assertEquals(Billing.State.DISCONNECTED, mBilling.getState()); }
@Test public void testShouldConnectOnlyIfConnecting() throws Exception { mBilling.setState(Billing.State.CONNECTING); mBilling.setState(Billing.State.FAILED); mBilling.setService(mock(IInAppBillingService.class), true); assertEquals(Billing.State.FAILED, mBilling.getState()); mBilling.setState(Billing.State.CONNECTING); mBilling.setService(mock(IInAppBillingService.class), true); assertEquals(Billing.State.CONNECTED, mBilling.getState()); }
@Test public void testShouldDisconnectServiceIfBillingIsInactive() throws Exception { final Billing.ServiceConnector connector = mock(Billing.ServiceConnector.class); mBilling.setConnector(connector); mBilling.setState(Billing.State.CONNECTING); mBilling.setState(Billing.State.DISCONNECTED); mBilling.setService(mock(IInAppBillingService.class), true); assertEquals(Billing.State.DISCONNECTED, mBilling.getState()); verify(connector, times(1)).disconnect(); }
/** * Connects to the Billing service. Called automatically when first request is done, * Use {@link #disconnect()} to disconnect. * It's allowed to call this method several times, if service is already connected nothing will * happen. */ public void connect() { synchronized (mLock) { if (mState == State.CONNECTED) { executePendingRequests(); return; } if (mState == State.CONNECTING) { return; } if (mConfiguration.isAutoConnect() && mCheckoutCount <= 0) { warning("Auto connection feature is turned on. There is no need in calling Billing.connect() manually. See Billing.Configuration.isAutoConnect"); } setState(State.CONNECTING); mMainThread.execute(new Runnable() { @Override public void run() { connectOnMainThread(); } }); } }
@Test public void testShouldJumpToDisconnectedStateIfWasConnecting() throws Exception { mBilling.setState(Billing.State.CONNECTING); mBilling.setService(null, false); assertEquals(Billing.State.FAILED, mBilling.getState()); }
@Test public void testShouldGoToDisconnectedStateFromConnectingIfBillingDies() throws Exception { mBilling.setState(Billing.State.CONNECTING); mBilling.disconnect(); assertEquals(Billing.State.DISCONNECTED, mBilling.getState()); }