@Test public void testStartGetsNextFrameIfNotStartedAndWithNoLoadPending() { verify(requestBuilder).into(aTarget()); }
@SuppressWarnings("unchecked") @Before public void setUp() { MockitoAnnotations.initMocks(this); when(handler.obtainMessage(anyInt(), isA(DelayTarget.class))).thenReturn(mock(Message.class)); firstFrame = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888); ByteBuffer byteBuffer = ByteBuffer.allocate(10); when(gifDecoder.getData()).thenReturn(byteBuffer); requestBuilder = mock(RequestBuilder.class, new ReturnsSelfAnswer()); loader = createGifFrameLoader(handler); }
@NonNull private GifFrameLoader createGifFrameLoader(Handler handler) { Glide glide = getGlideSingleton(); GifFrameLoader result = new GifFrameLoader( glide.getBitmapPool(), requestManager, gifDecoder, handler, requestBuilder, transformation, firstFrame); result.subscribe(callback); return result; }
@Test public void testClearsCompletedLoadOnFrameReadyIfCleared() { // Force the loader to create a real Handler by passing null; loader = createGifFrameLoader(null); loader.clear(); DelayTarget delayTarget = mock(DelayTarget.class); Request request = mock(Request.class); when(delayTarget.getRequest()).thenReturn(request); loader.onFrameReady(delayTarget); verify(requestManager).clear(eq(delayTarget)); }
@Test public void testOnFrameReadyClearsPreviousFrame() { // Force the loader to create a real Handler. loader = createGifFrameLoader(null); DelayTarget previous = mock(DelayTarget.class); Request previousRequest = mock(Request.class); when(previous.getRequest()).thenReturn(previousRequest); when(previous.getResource()).thenReturn(Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888)); DelayTarget current = mock(DelayTarget.class); when(current.getResource()).thenReturn(Bitmap.createBitmap(100, 100, Bitmap.Config.RGB_565)); loader.onFrameReady(previous); loader.onFrameReady(current); verify(requestManager).clear(eq(previous)); }
@Test public void testStartDoesNotStartIfAlreadyRunning() { loader.subscribe(mock(FrameCallback.class)); verify(requestBuilder, times(1)).into(aTarget()); }
@Test public void onFrameReady_whenNotRunning_doesNotClearPreviouslyLoadedImage() { loader = createGifFrameLoader(/*handler=*/ null); DelayTarget loaded = mock(DelayTarget.class); when(loaded.getResource()).thenReturn(Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888)); loader.onFrameReady(loaded); loader.unsubscribe(callback); DelayTarget nextFrame = mock(DelayTarget.class); when(nextFrame.getResource()) .thenReturn(Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888)); loader.onFrameReady(nextFrame); verify(requestManager, never()).clear(loaded); }
@Test public void testGetNextFrameDoesStartLoadAfterLoadCompletesIfStarted() { loader.onFrameReady(mock(DelayTarget.class)); verify(requestBuilder, times(2)).into(aTarget()); }
@Test public void testOnFrameReadyWithNullResourceDoesNotClearPreviousFrame() { // Force the loader to create a real Handler by passing null. loader = createGifFrameLoader(null); DelayTarget previous = mock(DelayTarget.class); Request previousRequest = mock(Request.class); when(previous.getRequest()).thenReturn(previousRequest); when(previous.getResource()).thenReturn(Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888)); DelayTarget current = mock(DelayTarget.class); when(current.getResource()).thenReturn(null); loader.onFrameReady(previous); loader.onFrameReady(current); verify(previousRequest, never()).clear(); }
@Test public void testGetNextFrameDoesNotStartLoadIfLoadIsInProgress() { loader.unsubscribe(callback); loader.subscribe(callback); verify(requestBuilder, times(1)).into(aTarget()); }
@Test public void onFrameReady_whenNotRunning_clearsOldFrameOnStart() { loader = createGifFrameLoader(/*handler=*/ null); DelayTarget loaded = mock(DelayTarget.class); when(loaded.getResource()).thenReturn(Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888)); loader.onFrameReady(loaded); loader.unsubscribe(callback); DelayTarget nextFrame = mock(DelayTarget.class); when(nextFrame.getResource()) .thenReturn(Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888)); loader.onFrameReady(nextFrame); loader.subscribe(callback); verify(requestManager).clear(loaded); }
@Test public void testGetNextFrameDoesStartLoadIfRestartedAndNoLoadIsInProgress() { loader.unsubscribe(callback); loader.onFrameReady(mock(DelayTarget.class)); loader.subscribe(callback); verify(requestBuilder, times(2)).into(aTarget()); }
@Test public void onFrameReady_whenNotRunning_callsFrameReadyWithNewFrameOnStart() { loader = createGifFrameLoader(/*handler=*/ null); DelayTarget loaded = mock(DelayTarget.class); when(loaded.getResource()).thenReturn(Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888)); loader.onFrameReady(loaded); loader.unsubscribe(callback); DelayTarget nextFrame = mock(DelayTarget.class); Bitmap expected = Bitmap.createBitmap(200, 200, Bitmap.Config.ARGB_8888); when(nextFrame.getResource()) .thenReturn(expected); loader.onFrameReady(nextFrame); verify(callback, times(1)).onFrameReady(); loader.subscribe(callback); verify(callback, times(2)).onFrameReady(); assertThat(loader.getCurrentFrame()).isEqualTo(expected); }
@Test public void testGetNextFrameIncrementsSignatureAndAdvancesDecoderBeforeStartingLoad() { InOrder order = inOrder(gifDecoder, requestBuilder); order.verify(gifDecoder).advance(); order.verify(requestBuilder).apply(isA(RequestOptions.class)); order.verify(requestBuilder).into(aTarget()); }
@Test public void onFrameReady_whenNotRunning_clearsPendingFrameOnClear() { loader = createGifFrameLoader(/*handler=*/ null); DelayTarget loaded = mock(DelayTarget.class); when(loaded.getResource()).thenReturn(Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888)); loader.onFrameReady(loaded); loader.unsubscribe(callback); DelayTarget nextFrame = mock(DelayTarget.class); when(nextFrame.getResource()) .thenReturn(Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888)); loader.onFrameReady(nextFrame); loader.clear(); verify(requestManager).clear(loaded); verify(requestManager).clear(nextFrame); }
@Test public void startFromFirstFrame_withPendingFrame_clearsPendingFrame() { loader = createGifFrameLoader(/*handler=*/ null); DelayTarget loaded = mock(DelayTarget.class); when(loaded.getResource()).thenReturn(Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888)); loader.onFrameReady(loaded); loader.unsubscribe(callback); DelayTarget nextFrame = mock(DelayTarget.class); Bitmap expected = Bitmap.createBitmap(200, 200, Bitmap.Config.ARGB_8888); when(nextFrame.getResource()) .thenReturn(expected); loader.onFrameReady(nextFrame); loader.setNextStartFromFirstFrame(); verify(requestManager).clear(nextFrame); loader.subscribe(callback); verify(callback, times(1)).onFrameReady(); }