| Index: chrome/android/javatests/src/org/chromium/chrome/browser/history/HistoryAdapterTest.java
|
| diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/history/HistoryAdapterTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/history/HistoryAdapterTest.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1f773ce4daa8926baf0dcb54d07022085cee4217
|
| --- /dev/null
|
| +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/history/HistoryAdapterTest.java
|
| @@ -0,0 +1,149 @@
|
| +// Copyright 2017 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.history;
|
| +
|
| +import static org.chromium.chrome.browser.widget.DateDividedAdapter.TYPE_DATE;
|
| +import static org.chromium.chrome.browser.widget.DateDividedAdapter.TYPE_HEADER;
|
| +import static org.chromium.chrome.browser.widget.DateDividedAdapter.TYPE_NORMAL;
|
| +
|
| +import android.support.test.filters.SmallTest;
|
| +import android.test.InstrumentationTestCase;
|
| +
|
| +import org.chromium.base.ThreadUtils;
|
| +import org.chromium.chrome.browser.widget.selection.SelectionDelegate;
|
| +
|
| +import java.util.Date;
|
| +import java.util.concurrent.TimeUnit;
|
| +
|
| +/**
|
| + * Tests for the {@link HistoryAdapter}.
|
| + */
|
| +public class HistoryAdapterTest extends InstrumentationTestCase {
|
| + private StubbedHistoryProvider mHistoryProvider;
|
| + private HistoryAdapter mAdapter;
|
| +
|
| + @Override
|
| + public void setUp() throws Exception {
|
| + super.setUp();
|
| + mHistoryProvider = new StubbedHistoryProvider();
|
| + mAdapter = new HistoryAdapter(new SelectionDelegate<HistoryItem>(), null, mHistoryProvider);
|
| + }
|
| +
|
| + private void initializeAdapter() {
|
| + ThreadUtils.runOnUiThreadBlocking(new Runnable(){
|
| + @Override
|
| + public void run() {
|
| + mAdapter.initialize();
|
| + }
|
| + });
|
| + }
|
| +
|
| + @SmallTest
|
| + public void testInitialize_Empty() {
|
| + initializeAdapter();
|
| + checkAdapterContents(false);
|
| + }
|
| +
|
| + @SmallTest
|
| + public void testInitialize_SingleItem() {
|
| + Date today = new Date();
|
| + long[] timestamps = {today.getTime(), today.getTime() - 100};
|
| + HistoryItem item1 = StubbedHistoryProvider.createHistoryItem(0, timestamps);
|
| + mHistoryProvider.addItem(item1);
|
| +
|
| + initializeAdapter();
|
| +
|
| + // There should be three items - the header, a date and the history item.
|
| + checkAdapterContents(true, null, null, item1);
|
| + }
|
| +
|
| + @SmallTest
|
| + public void testRemove_TwoItemsOneDate() {
|
| + Date today = new Date();
|
| + long[] timestamps = {today.getTime()};
|
| + HistoryItem item1 = StubbedHistoryProvider.createHistoryItem(0, timestamps);
|
| + mHistoryProvider.addItem(item1);
|
| +
|
| + HistoryItem item2 = StubbedHistoryProvider.createHistoryItem(1, timestamps);
|
| + mHistoryProvider.addItem(item2);
|
| +
|
| + initializeAdapter();
|
| +
|
| + // There should be four items - the list header, a date header and two history items.
|
| + checkAdapterContents(true, null, null, item1, item2);
|
| +
|
| + mAdapter.markItemForRemoval(item1);
|
| +
|
| + // Check that one item was removed.
|
| + checkAdapterContents(true, null, null, item2);
|
| + assertEquals(1, mHistoryProvider.markItemForRemovalCallback.getCallCount());
|
| + assertEquals(0, mHistoryProvider.removeItemsCallback.getCallCount());
|
| +
|
| + mAdapter.markItemForRemoval(item2);
|
| +
|
| + // There should no longer be any items in the adapter.
|
| + checkAdapterContents(false);
|
| + assertEquals(2, mHistoryProvider.markItemForRemovalCallback.getCallCount());
|
| + assertEquals(0, mHistoryProvider.removeItemsCallback.getCallCount());
|
| +
|
| + mAdapter.removeItems();
|
| + assertEquals(1, mHistoryProvider.removeItemsCallback.getCallCount());
|
| + }
|
| +
|
| + @SmallTest
|
| + public void testRemove_TwoItemsTwoDates() {
|
| + Date today = new Date();
|
| + long[] timestamps = {today.getTime()};
|
| + HistoryItem item1 = StubbedHistoryProvider.createHistoryItem(0, timestamps);
|
| + mHistoryProvider.addItem(item1);
|
| +
|
| + long[] timestamps2 = {today.getTime() - TimeUnit.DAYS.toMillis(3)};
|
| + HistoryItem item2 = StubbedHistoryProvider.createHistoryItem(1, timestamps2);
|
| + mHistoryProvider.addItem(item2);
|
| +
|
| + initializeAdapter();
|
| +
|
| + // There should be five items - the list header, a date header, a history item, another
|
| + // date header and another history item.
|
| + checkAdapterContents(true, null, null, item1, null, item2);
|
| +
|
| + mAdapter.markItemForRemoval(item1);
|
| +
|
| + // Check that the first item and date header were removed.
|
| + checkAdapterContents(true, null, null, item2);
|
| + assertEquals(1, mHistoryProvider.markItemForRemovalCallback.getCallCount());
|
| + assertEquals(0, mHistoryProvider.removeItemsCallback.getCallCount());
|
| +
|
| + mAdapter.markItemForRemoval(item2);
|
| +
|
| + // There should no longer be any items in the adapter.
|
| + checkAdapterContents(false);
|
| + assertEquals(2, mHistoryProvider.markItemForRemovalCallback.getCallCount());
|
| + assertEquals(0, mHistoryProvider.removeItemsCallback.getCallCount());
|
| +
|
| + mAdapter.removeItems();
|
| + assertEquals(1, mHistoryProvider.removeItemsCallback.getCallCount());
|
| + }
|
| +
|
| + private void checkAdapterContents(boolean hasHeader, Object... expectedItems) {
|
| + assertEquals(expectedItems.length, mAdapter.getItemCount());
|
| + assertEquals(hasHeader, mAdapter.hasListHeader());
|
| +
|
| + for (int i = 0; i < expectedItems.length; i++) {
|
| + if (i == 0 && hasHeader) {
|
| + assertEquals(TYPE_HEADER, mAdapter.getItemViewType(i));
|
| + continue;
|
| + }
|
| +
|
| + if (expectedItems[i] == null) {
|
| + // TODO(twellington): Check what date header is showing.
|
| + assertEquals(TYPE_DATE, mAdapter.getItemViewType(i));
|
| + } else {
|
| + assertEquals(TYPE_NORMAL, mAdapter.getItemViewType(i));
|
| + assertEquals(expectedItems[i], mAdapter.getItemAt(i).second);
|
| + }
|
| + }
|
| + }
|
| +}
|
|
|