private void onDone() { Check.isTrue(Thread.holdsLock(mLock), "Must be synchronized"); if (mCallback == null) { return; } mTasks.remove(this); mCallback.onLoaded(mProducts); mCallback = null; }
@Test public void testListenerShouldBeCalledOnlyOnce() throws Exception { final Inventory.Callback l = mock(Inventory.Callback.class); mCheckout.start(); mInventory.load(mRequest, mock(Inventory.Callback.class)); mInventory.load(mRequest, mock(Inventory.Callback.class)); mInventory.load(mRequest, l); Tests.waitWhileLoading(mInventory); mInventory.load(mRequest, mock(Inventory.Callback.class)); mInventory.load(mRequest, mock(Inventory.Callback.class)); verify(l, times(1)).onLoaded(anyProducts()); }
@Test public void testCanceledCallbackShouldNotGetCalled() throws Exception { mCheckout.start(); final Inventory.Callback c1 = mock(Inventory.Callback.class); final Inventory.Callback c2 = mock(Inventory.Callback.class); final int task1 = mInventory.load(mRequest, c1); mInventory.load(mRequest, c2); mInventory.cancel(task1); Tests.waitWhileLoading(mInventory); verify(c1, never()).onLoaded(anyProducts()); verify(c2, times(1)).onLoaded(anyProducts()); }
@Test public void testShouldCallListenerWhenLoaded() throws Exception { final Inventory.Callback c = mock(Inventory.Callback.class); mCheckout.start(); mInventory.load(mRequest, c); Tests.waitWhileLoading(mInventory); verify(c, times(1)).onLoaded(anyProducts()); }
@Override public void onLoaded(@Nonnull Inventory.Products products) { for (Inventory.Callback callback : mInventoryCallbacks) { callback.onLoaded(products); } } });