Index: chrome/android/javatests/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkTest.java |
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkTest.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f5d25df748995b23814d218c7a3e2a3dd769ced2 |
--- /dev/null |
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkTest.java |
@@ -0,0 +1,171 @@ |
+// Copyright 2015 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.enhancedbookmarks; |
+ |
+import android.test.suitebuilder.annotation.SmallTest; |
+import android.text.TextUtils; |
+import android.view.View; |
+ |
+import com.google.android.apps.chrome.R; |
+ |
+import junit.framework.Assert; |
+ |
+import org.chromium.base.ThreadUtils; |
+import org.chromium.base.test.util.CommandLineFlags; |
+import org.chromium.chrome.browser.BookmarksBridge.BookmarkItem; |
+import org.chromium.chrome.browser.BookmarksBridge.BookmarkModelObserver; |
+import org.chromium.chrome.browser.ChromeActivity; |
+import org.chromium.chrome.browser.ChromeSwitches; |
+import org.chromium.chrome.browser.UrlConstants; |
+import org.chromium.chrome.browser.enhanced_bookmarks.EnhancedBookmarksModel; |
+import org.chromium.chrome.test.ChromeActivityTestCaseBase; |
+import org.chromium.chrome.test.util.ActivityUtils; |
+import org.chromium.chrome.test.util.BookmarkTestUtils; |
+import org.chromium.chrome.test.util.ChromeTabUtils; |
+import org.chromium.chrome.test.util.MenuUtils; |
+import org.chromium.chrome.test.util.TestHttpServerClient; |
+import org.chromium.components.bookmarks.BookmarkId; |
+import org.chromium.components.bookmarks.BookmarkType; |
+import org.chromium.content.browser.test.util.CallbackHelper; |
+import org.chromium.content.browser.test.util.TouchCommon; |
+import org.chromium.ui.base.DeviceFormFactor; |
+ |
+import java.util.concurrent.Callable; |
+import java.util.concurrent.TimeoutException; |
+ |
+/** |
+ * Tests for the enhanced bookmark manager. |
+ */ |
+@CommandLineFlags.Add(ChromeSwitches.ENABLE_ENHANCED_BOOKMARKS + "=1") |
+public class EnhancedBookmarkTest extends ChromeActivityTestCaseBase<ChromeActivity> { |
+ |
+ public EnhancedBookmarkTest() { |
+ super(ChromeActivity.class); |
+ } |
+ |
+ private static final String TEST_PAGE = TestHttpServerClient.getUrl( |
+ "chrome/test/data/android/google.html"); |
+ private static final String TEST_PAGE_TITLE = "The Google"; |
+ |
+ private EnhancedBookmarksModel mBookmarkModel; |
+ private EnhancedBookmarkRecyclerView mItemsContainer; |
+ |
+ @Override |
+ public void startMainActivity() throws InterruptedException { |
+ startMainActivityFromLauncher(); |
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
+ @Override |
+ public void run() { |
+ mBookmarkModel = new EnhancedBookmarksModel( |
+ getActivity().getActivityTab().getProfile()); |
+ } |
+ }); |
+ waitForBookmarkModelLoaded(); |
+ } |
+ |
+ private void waitForBookmarkModelLoaded() throws InterruptedException { |
+ final CallbackHelper loadedCallback = new CallbackHelper(); |
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
+ @Override |
+ public void run() { |
+ if (mBookmarkModel.isBookmarkModelLoaded()) loadedCallback.notifyCalled(); |
+ else { |
+ mBookmarkModel.addModelObserver(new BookmarkModelObserver() { |
+ @Override |
+ public void bookmarkModelChanged() {} |
+ |
+ @Override |
+ public void bookmarkModelLoaded() { |
+ loadedCallback.notifyCalled(); |
+ mBookmarkModel.removeModelObserver(this); |
+ } |
+ }); |
+ } |
+ } |
+ }); |
+ try { |
+ loadedCallback.waitForCallback(0); |
+ } catch (TimeoutException e) { |
+ Assert.fail("Enhanced Bookmark model did not load: Timeout."); |
+ } |
+ } |
+ |
+ private void openBookmarkManager() throws InterruptedException { |
+ if (DeviceFormFactor.isTablet(getActivity())) { |
+ loadUrl(UrlConstants.BOOKMARKS_URL); |
+ mItemsContainer = (EnhancedBookmarkRecyclerView) getActivity().findViewById( |
+ R.id.eb_items_container); |
+ } else { |
+ // phone |
+ EnhancedBookmarkActivity activity = ActivityUtils.waitForActivity(getInstrumentation(), |
+ EnhancedBookmarkActivity.class, new MenuUtils.MenuActivityTrigger( |
+ getInstrumentation(), getActivity(), R.id.all_bookmarks_menu_id)); |
+ mItemsContainer = (EnhancedBookmarkRecyclerView) activity.findViewById( |
+ R.id.eb_items_container); |
+ } |
+ } |
+ |
+ private boolean isItemPresentInBookmarkList(final String expectedTitle) { |
+ return ThreadUtils.runOnUiThreadBlockingNoException(new Callable<Boolean>() { |
+ @Override |
+ public Boolean call() throws Exception { |
+ for (int i = 0; i < mItemsContainer.getAdapter().getItemCount(); i++) { |
+ if (mItemsContainer.getAdapter().isHeader(i)) continue; |
+ |
+ String actualTitle = mBookmarkModel.getBookmarkTitle( |
+ mItemsContainer.getAdapter().getItem(i)); |
+ if (TextUtils.equals(actualTitle, expectedTitle)) { |
+ return true; |
+ } |
+ } |
+ return false; |
+ } |
+ }); |
+ } |
+ |
+ @SmallTest |
+ public void testAddBookmark() throws InterruptedException { |
+ loadUrl(TEST_PAGE); |
+ // Click star button to bookmark the curent tab. |
+ MenuUtils.invokeCustomMenuActionSync(getInstrumentation(), getActivity(), |
+ R.id.bookmark_this_page_id); |
+ // All actions with EnhancedBookmarksModel needs to run on UI thread. |
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
+ @Override |
+ public void run() { |
+ long bookmarkIdLong = getActivity().getActivityTab().getUserBookmarkId(); |
+ BookmarkId id = new BookmarkId(bookmarkIdLong, BookmarkType.NORMAL); |
+ assertTrue("The test page is not added as bookmark: ", |
+ mBookmarkModel.doesBookmarkExist(id)); |
+ BookmarkItem item = mBookmarkModel.getBookmarkById(id); |
+ assertEquals(mBookmarkModel.getDefaultFolder(), item.getParentId()); |
+ assertEquals(TEST_PAGE, item.getUrl()); |
+ assertEquals(TEST_PAGE_TITLE, item.getTitle()); |
+ } |
+ }); |
+ } |
+ |
+ @SmallTest |
+ public void testOpenBookmark() throws InterruptedException { |
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
+ @Override |
+ public void run() { |
+ mBookmarkModel.addBookmark(mBookmarkModel.getDefaultFolder(), 0, TEST_PAGE_TITLE, |
+ TEST_PAGE); |
+ } |
+ }); |
+ openBookmarkManager(); |
+ assertTrue("Grid view does not contain added bookmark: ", |
+ isItemPresentInBookmarkList(TEST_PAGE_TITLE)); |
+ final View tile = BookmarkTestUtils.getViewWithText(mItemsContainer, TEST_PAGE_TITLE); |
+ ChromeTabUtils.waitForTabPageLoaded(getActivity().getActivityTab(), new Runnable() { |
+ @Override |
+ public void run() { |
+ TouchCommon.singleClickView(tile); |
+ } |
+ }); |
+ assertEquals(TEST_PAGE_TITLE, getActivity().getActivityTab().getTitle()); |
+ } |
+} |