Commit 5d4dde19 authored by Brandon Wylie's avatar Brandon Wylie Committed by Commit Bot

Add unittests for NetworkImageFetcher

Bug: 1067716
Change-Id: I717bc16a22492dec3238bffc9e943c6be29f57ba
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2134205
Commit-Queue: Brandon Wylie <wylieb@chromium.org>
Reviewed-by: default avatarPavel Yatsuk <pavely@chromium.org>
Cr-Commit-Position: refs/heads/master@{#756452}
parent 0245a5fe
...@@ -94,6 +94,7 @@ chrome_junit_test_java_sources = [ ...@@ -94,6 +94,7 @@ chrome_junit_test_java_sources = [
"junit/src/org/chromium/chrome/browser/image_fetcher/ImageFetcherFactoryTest.java", "junit/src/org/chromium/chrome/browser/image_fetcher/ImageFetcherFactoryTest.java",
"junit/src/org/chromium/chrome/browser/image_fetcher/ImageFetcherTest.java", "junit/src/org/chromium/chrome/browser/image_fetcher/ImageFetcherTest.java",
"junit/src/org/chromium/chrome/browser/image_fetcher/InMemoryCachedImageFetcherTest.java", "junit/src/org/chromium/chrome/browser/image_fetcher/InMemoryCachedImageFetcherTest.java",
"junit/src/org/chromium/chrome/browser/image_fetcher/NetworkImageFetcherTest.java",
"junit/src/org/chromium/chrome/browser/incognito/IncognitoTabSnapshotControllerTest.java", "junit/src/org/chromium/chrome/browser/incognito/IncognitoTabSnapshotControllerTest.java",
"junit/src/org/chromium/chrome/browser/infobar/IPHInfoBarSupportTest.java", "junit/src/org/chromium/chrome/browser/infobar/IPHInfoBarSupportTest.java",
"junit/src/org/chromium/chrome/browser/init/AsyncInitTaskRunnerTest.java", "junit/src/org/chromium/chrome/browser/init/AsyncInitTaskRunnerTest.java",
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.image_fetcher;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.anyObject;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import android.graphics.Bitmap;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.invocation.InvocationOnMock;
import org.robolectric.annotation.Config;
import org.chromium.base.Callback;
import org.chromium.base.test.BaseRobolectricTestRunner;
import jp.tomorrowkey.android.gifplayer.BaseGifImage;
/**
* Test for NetworkImageFetcher.java.
*/
@RunWith(BaseRobolectricTestRunner.class)
@Config(manifest = Config.NONE)
public class NetworkImageFetcherTest {
private static final String UMA_CLIENT_NAME = "TestUmaClient";
private static final String URL = "http://google.com/test.png";
private static final String PATH = "test/path/cache/test.png";
private static final int WIDTH_PX = 10;
private static final int HEIGHT_PX = 20;
@Mock
ImageFetcherBridge mBridge;
@Mock
Callback<Bitmap> mBitmapCallback;
@Mock
Callback<BaseGifImage> mGifCallback;
NetworkImageFetcher mImageFetcher;
Bitmap mBitmap;
BaseGifImage mGif;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mImageFetcher = new NetworkImageFetcher(mBridge);
mBitmap = Bitmap.createBitmap(WIDTH_PX, HEIGHT_PX, Bitmap.Config.ARGB_8888);
// This gif won't be valid, but we're only using the address in these tests.
mGif = new BaseGifImage(new byte[] {});
ArgumentCaptor<Callback<Bitmap>> bitmapCallbackCaptor =
ArgumentCaptor.forClass(Callback.class);
doAnswer((InvocationOnMock invocation) -> {
bitmapCallbackCaptor.getValue().onResult(mBitmap);
return null;
})
.when(mBridge)
.fetchImage(anyInt(), eq(URL), eq(UMA_CLIENT_NAME), anyInt(), anyInt(),
bitmapCallbackCaptor.capture());
ArgumentCaptor<Callback<BaseGifImage>> gifCallbackCaptor =
ArgumentCaptor.forClass(Callback.class);
doAnswer((InvocationOnMock invocation) -> {
gifCallbackCaptor.getValue().onResult(mGif);
return null;
})
.when(mBridge)
.fetchGif(anyInt(), eq(URL), eq(UMA_CLIENT_NAME), gifCallbackCaptor.capture());
}
@Test
public void test_fetchImage() {
mImageFetcher.fetchImage(URL, UMA_CLIENT_NAME, WIDTH_PX, HEIGHT_PX, mBitmapCallback);
verify(mBitmapCallback).onResult(mBitmap);
verify(mBridge).fetchImage(eq(ImageFetcherConfig.NETWORK_ONLY), eq(URL),
eq(UMA_CLIENT_NAME), eq(WIDTH_PX), eq(HEIGHT_PX), anyObject());
verify(mBridge).reportTotalFetchTimeFromNative(eq(UMA_CLIENT_NAME), anyLong());
}
@Test
public void test_fetchGif() {
mImageFetcher.fetchGif(URL, UMA_CLIENT_NAME, mGifCallback);
verify(mGifCallback).onResult(mGif);
verify(mBridge).fetchGif(
ImageFetcherConfig.NETWORK_ONLY, URL, UMA_CLIENT_NAME, mGifCallback);
}
@Test
public void testClear() {
// Clear does nothing in NetworkImageFetcher.
mImageFetcher.clear();
verifyNoMoreInteractions(mBridge);
}
@Test
public void testDestroy() {
// Destroy does nothing in NetworkImageFetcher.
mImageFetcher.destroy();
verifyNoMoreInteractions(mBridge);
}
@Test
public void testGetConfig() {
Assert.assertEquals(ImageFetcherConfig.NETWORK_ONLY, mImageFetcher.getConfig());
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment