Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1178)

Unified Diff: chrome/android/javatests/src/org/chromium/chrome/browser/download/ui/DownloadHistoryAdapterTest.java

Issue 2247923003: [Downloads] Add basic DownloadHistoryAdapterTests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@OFFLINE_deletions
Patch Set: Rebase again Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/android/java_sources.gni ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/javatests/src/org/chromium/chrome/browser/download/ui/DownloadHistoryAdapterTest.java
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/download/ui/DownloadHistoryAdapterTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/download/ui/DownloadHistoryAdapterTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..91754d8b8d83b4720e8d762066b7471646168159
--- /dev/null
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/download/ui/DownloadHistoryAdapterTest.java
@@ -0,0 +1,315 @@
+// Copyright 2016 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.download.ui;
+
+import static org.chromium.chrome.browser.widget.DateDividedAdapter.TYPE_DATE;
+import static org.chromium.chrome.browser.widget.DateDividedAdapter.TYPE_NORMAL;
+
+import android.support.v7.widget.RecyclerView;
+import android.test.InstrumentationTestCase;
+import android.test.UiThreadTest;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import org.chromium.chrome.browser.download.DownloadInfo;
+import org.chromium.chrome.browser.download.DownloadItem;
+import org.chromium.chrome.browser.widget.selection.SelectionDelegate;
+import org.chromium.content.browser.test.util.CallbackHelper;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+
+/**
+ * Tests a DownloadHistoryAdapter that is isolated from the real bridges.
+ */
+public class DownloadHistoryAdapterTest extends InstrumentationTestCase {
+
+ private static class StubbedAdapter extends DownloadHistoryAdapter {
+ private final SelectionDelegate<DownloadItem> mDelegate = new SelectionDelegate<>();
+
+ StubbedAdapter(boolean showOffTheRecord) {
+ super(showOffTheRecord, null);
+ }
+
+ @Override
+ protected SelectionDelegate getSelectionDelegate(DownloadManagerUi manager) {
+ return mDelegate;
+ }
+
+ @Override
+ protected void initializeDownloadBridge() {
+ }
+
+ @Override
+ protected void initializeOfflinePageBridge() {
+ }
+ }
+
+ private static class Observer extends RecyclerView.AdapterDataObserver {
+ public CallbackHelper onChangedCallback = new CallbackHelper();
+
+ @Override
+ public void onChanged() {
+ onChangedCallback.notifyCalled();
+ }
+ }
+
+ private DownloadHistoryAdapter mAdapter;
+ private Observer mObserver;
+
+ private void initializeAdapter(boolean showOffTheRecord) {
+ mObserver = new Observer();
+ mAdapter = new StubbedAdapter(showOffTheRecord);
+ mAdapter.initialize(null);
+ mAdapter.registerAdapterDataObserver(mObserver);
+ }
+
+ /** Nothing downloaded, nothing shown. */
+ @SmallTest
+ public void testInitialize_Empty() throws Exception {
+ initializeAdapter(false);
+
+ List<DownloadItem> regularItems = new ArrayList<DownloadItem>();
+ int callCount = mObserver.onChangedCallback.getCallCount();
+ assertEquals(0, callCount);
+ mAdapter.onAllDownloadsRetrieved(regularItems, false);
+ mObserver.onChangedCallback.waitForCallback(callCount, 1);
+
+ assertEquals(0, mAdapter.getItemCount());
+ assertEquals(0, mAdapter.getTotalDownloadSize());
+ }
+
+ /** One downloaded item should show the item and a date header. */
+ @UiThreadTest
+ @SmallTest
+ public void testInitialize_SingleItem() throws Exception {
+ initializeAdapter(false);
+
+ List<DownloadItem> regularItems = new ArrayList<DownloadItem>();
+ DownloadItem firstItem = createDownloadItem(0, "19840116 12:00");
+ regularItems.add(firstItem);
+
+ int callCount = mObserver.onChangedCallback.getCallCount();
+ assertEquals(0, callCount);
+ mAdapter.onAllDownloadsRetrieved(regularItems, false);
+ mObserver.onChangedCallback.waitForCallback(callCount, 1);
+ checkAdapterTypes(TYPE_DATE, TYPE_NORMAL);
+ assertEquals(1, mAdapter.getTotalDownloadSize());
+ }
+
+ /** Two items downloaded on the same day should end up in the same date group. */
+ @UiThreadTest
+ @SmallTest
+ public void testInitialize_TwoItemsOneDate() throws Exception {
+ initializeAdapter(false);
+
+ List<DownloadItem> regularItems = new ArrayList<DownloadItem>();
+ regularItems.add(createDownloadItem(0, "19840116 12:00"));
+ regularItems.add(createDownloadItem(1, "19840116 12:01"));
+
+ int callCount = mObserver.onChangedCallback.getCallCount();
+ assertEquals(0, callCount);
+ mAdapter.onAllDownloadsRetrieved(regularItems, false);
+ mObserver.onChangedCallback.waitForCallback(callCount, 1);
+ checkAdapterTypes(TYPE_DATE, TYPE_NORMAL, TYPE_NORMAL);
+ assertEquals(11, mAdapter.getTotalDownloadSize());
+ }
+
+ /** Two items downloaded on different days should end up in different date groups. */
+ @UiThreadTest
+ @SmallTest
+ public void testInitialize_TwoItemsTwoDates() throws Exception {
+ initializeAdapter(false);
+
+ List<DownloadItem> regularItems = new ArrayList<DownloadItem>();
+ regularItems.add(createDownloadItem(0, "19840116 12:00"));
+ regularItems.add(createDownloadItem(1, "19840117 12:00"));
+
+ int callCount = mObserver.onChangedCallback.getCallCount();
+ assertEquals(0, callCount);
+ mAdapter.onAllDownloadsRetrieved(regularItems, false);
+ mObserver.onChangedCallback.waitForCallback(callCount, 1);
+ checkAdapterTypes(TYPE_DATE, TYPE_NORMAL, TYPE_DATE, TYPE_NORMAL);
+ assertEquals(11, mAdapter.getTotalDownloadSize());
+ }
+
+ /** Off the record downloads are ignored if the DownloadHistoryAdapter isn't watching them. */
+ @UiThreadTest
+ @SmallTest
+ public void testInitialize_OffTheRecord_Ignored() throws Exception {
+ initializeAdapter(false);
+
+ List<DownloadItem> regularItems = new ArrayList<DownloadItem>();
+ regularItems.add(createDownloadItem(0, "19840116 12:00"));
+
+ List<DownloadItem> offTheRecordItems = new ArrayList<DownloadItem>();
+ offTheRecordItems.add(createDownloadItem(1, "19840116 12:00"));
+
+ int callCount = mObserver.onChangedCallback.getCallCount();
+ assertEquals(0, callCount);
+ mAdapter.onAllDownloadsRetrieved(offTheRecordItems, true);
+ assertEquals(0, callCount);
+ mAdapter.onAllDownloadsRetrieved(regularItems, false);
+ mObserver.onChangedCallback.waitForCallback(callCount, 1);
+
+ checkAdapterTypes(TYPE_DATE, TYPE_NORMAL);
+ assertEquals(1, mAdapter.getTotalDownloadSize());
+ }
+
+ /** A regular and a off the record item with the same date are bucketed together. */
+ @UiThreadTest
+ @SmallTest
+ public void testInitialize_OffTheRecord_TwoItemsOneDate() throws Exception {
+ initializeAdapter(true);
+
+ List<DownloadItem> regularItems = new ArrayList<DownloadItem>();
+ regularItems.add(createDownloadItem(0, "19840116 12:00"));
+
+ List<DownloadItem> offTheRecordItems = new ArrayList<DownloadItem>();
+ offTheRecordItems.add(createDownloadItem(1, "19840116 12:00"));
+
+ int callCount = mObserver.onChangedCallback.getCallCount();
+ assertEquals(0, callCount);
+ mAdapter.onAllDownloadsRetrieved(offTheRecordItems, true);
+ mObserver.onChangedCallback.waitForCallback(callCount, 1);
+ mAdapter.onAllDownloadsRetrieved(regularItems, false);
+ mObserver.onChangedCallback.waitForCallback(callCount, 2);
+
+ checkAdapterTypes(TYPE_DATE, TYPE_NORMAL, TYPE_NORMAL);
+ assertEquals(11, mAdapter.getTotalDownloadSize());
+ }
+
+ /** Adding new items should bucket them into the proper dates. */
+ @UiThreadTest
+ @SmallTest
+ public void testUpdate_UpdateItems() throws Exception {
+ initializeAdapter(false);
+
+ // Start with an empty Adapter.
+ List<DownloadItem> regularItems = new ArrayList<DownloadItem>();
+ assertEquals(0, mObserver.onChangedCallback.getCallCount());
+ mAdapter.onAllDownloadsRetrieved(regularItems, false);
+ mObserver.onChangedCallback.waitForCallback(0, 1);
+ assertEquals(0, mAdapter.getItemCount());
+ assertEquals(0, mAdapter.getTotalDownloadSize());
+
+ // Add the first item.
+ mAdapter.onDownloadItemUpdated(createDownloadItem(0, "19840116 12:00"), false);
+ mObserver.onChangedCallback.waitForCallback(1, 1);
+ checkAdapterTypes(TYPE_DATE, TYPE_NORMAL);
+ assertEquals(1, mAdapter.getTotalDownloadSize());
+
+ // Add a second item with a different date.
+ DownloadItem secondItem = createDownloadItem(1, "19840117 12:00");
+ assertEquals(2, mObserver.onChangedCallback.getCallCount());
+ mAdapter.onDownloadItemUpdated(secondItem, false);
+ mObserver.onChangedCallback.waitForCallback(2, 1);
+ checkAdapterTypes(TYPE_DATE, TYPE_NORMAL, TYPE_DATE, TYPE_NORMAL);
+ assertEquals(11, mAdapter.getTotalDownloadSize());
+
+ // Add a third item with the same date as the second item.
+ assertEquals(3, mObserver.onChangedCallback.getCallCount());
+ mAdapter.onDownloadItemUpdated(createDownloadItem(2, "19840117 12:00"), false);
+ mObserver.onChangedCallback.waitForCallback(3, 1);
+ checkAdapterTypes(TYPE_DATE, TYPE_NORMAL, TYPE_NORMAL, TYPE_DATE, TYPE_NORMAL);
+ assertEquals(111, mAdapter.getTotalDownloadSize());
+
+ // An item with the same values as the second item should just update the old one.
+ assertEquals(4, mObserver.onChangedCallback.getCallCount());
+ mAdapter.onDownloadItemUpdated(createDownloadItem(2, "19840117 12:00"), false);
+ mObserver.onChangedCallback.waitForCallback(4, 1);
+ checkAdapterTypes(TYPE_DATE, TYPE_NORMAL, TYPE_NORMAL, TYPE_DATE, TYPE_NORMAL);
+ assertEquals(111, mAdapter.getTotalDownloadSize());
+ }
+
+ /** Test removal of items. */
+ @UiThreadTest
+ @SmallTest
+ public void testRemove_ThreeItemsTwoDates() throws Exception {
+ initializeAdapter(false);
+
+ // Initialize the DownloadHistoryAdapter with three items in two date buckets.
+ DownloadItem item0 = createDownloadItem(0, "19840116 12:00");
+ DownloadItem item1 = createDownloadItem(1, "19840116 12:01");
+ DownloadItem item2 = createDownloadItem(2, "19840117 12:01");
+
+ List<DownloadItem> regularItems = new ArrayList<DownloadItem>();
+ regularItems.add(item0);
+ regularItems.add(item1);
+ regularItems.add(item2);
+
+ assertEquals(0, mObserver.onChangedCallback.getCallCount());
+ mAdapter.onAllDownloadsRetrieved(regularItems, false);
+ mObserver.onChangedCallback.waitForCallback(0, 1);
+ checkAdapterTypes(TYPE_DATE, TYPE_NORMAL, TYPE_DATE, TYPE_NORMAL, TYPE_NORMAL);
+ assertEquals(111, mAdapter.getTotalDownloadSize());
+
+ // Remove an item from the date bucket with two items.
+ assertEquals(1, mObserver.onChangedCallback.getCallCount());
+ mAdapter.onDownloadItemRemoved(item1.getId(), false);
+ mObserver.onChangedCallback.waitForCallback(1, 1);
+ checkAdapterTypes(TYPE_DATE, TYPE_NORMAL, TYPE_DATE, TYPE_NORMAL);
+
+ // Remove an item from the second bucket, which removes it entirely.
+ assertEquals(2, mObserver.onChangedCallback.getCallCount());
+ mAdapter.onDownloadItemRemoved(item2.getId(), false);
+ mObserver.onChangedCallback.waitForCallback(2, 1);
+ checkAdapterTypes(TYPE_DATE, TYPE_NORMAL);
+ }
+
+ /** Checks that the adapter has the correct types of items in the right places. */
+ private void checkAdapterTypes(Integer... expectedTypes) {
+ assertEquals(expectedTypes.length, mAdapter.getItemCount());
+ for (int i = 0; i < expectedTypes.length; i++) {
+ assertEquals(expectedTypes[i].intValue(), mAdapter.getItemViewType(i));
+ }
+ }
+
+ /** Converts a date string to a timestamp. */
+ private long dateToEpoch(String dateStr) throws Exception {
+ return new SimpleDateFormat("yyyyMMdd HH:mm", Locale.getDefault()).parse(dateStr).getTime();
+ }
+
+ /** Creates a new DownloadItem with pre-defined values. */
+ private DownloadItem createDownloadItem(int which, String date)
+ throws Exception {
+ DownloadItem item = null;
+ if (which == 0) {
+ item = new DownloadItem(false, new DownloadInfo.Builder()
+ .setUrl("https://google.com")
+ .setContentLength(1)
+ .setFileName("first_file")
+ .setFilePath("/storage/fake_path/Downloads/first_file")
+ .setDownloadGuid("first_guid")
+ .setMimeType("image/gif")
+ .build());
+ } else if (which == 1) {
+ item = new DownloadItem(false, new DownloadInfo.Builder()
+ .setUrl("https://ugh.com")
+ .setContentLength(10)
+ .setFileName("second_file")
+ .setFilePath("/storage/fake_path/Downloads/second_file")
+ .setDownloadGuid("second_guid")
+ .setMimeType("image/gif")
+ .build());
+ } else if (which == 2) {
+ item = new DownloadItem(false, new DownloadInfo.Builder()
+ .setUrl("https://ugh.com")
+ .setContentLength(100)
+ .setFileName("third_file")
+ .setFilePath("/storage/fake_path/Downloads/third_file")
+ .setDownloadGuid("third_guid")
+ .setMimeType("text/plain")
+ .build());
+ } else {
+ return null;
+ }
+
+ item.setStartTime(dateToEpoch(date));
+ return item;
+ }
+
+}
« no previous file with comments | « chrome/android/java_sources.gni ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698