Index: chrome/android/javatests/src/org/chromium/chrome/browser/bookmark/ManageBookmarkActivityTest.java |
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmark/ManageBookmarkActivityTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmark/ManageBookmarkActivityTest.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6d43ef95cc83f21fbadc9209816e59a480c356ed |
--- /dev/null |
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmark/ManageBookmarkActivityTest.java |
@@ -0,0 +1,231 @@ |
+// 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.bookmark; |
+ |
+import static org.chromium.base.test.util.ScalableTimeout.scaleTimeout; |
+ |
+import android.content.Context; |
+import android.test.FlakyTest; |
+import android.test.suitebuilder.annotation.SmallTest; |
+import android.widget.Button; |
+import android.widget.EditText; |
+import android.widget.TextView; |
+ |
+import com.google.android.apps.chrome.R; |
+ |
+import org.chromium.base.test.util.Feature; |
+import org.chromium.chrome.browser.ChromeBrowserProvider.BookmarkNode; |
+import org.chromium.chrome.browser.ChromeBrowserProviderClient; |
+import org.chromium.chrome.test.ChromeTabbedActivityTestBase; |
+import org.chromium.chrome.test.util.BookmarkTestUtils; |
+import org.chromium.chrome.test.util.ChromeTabUtils; |
+import org.chromium.chrome.test.util.TestHttpServerClient; |
+import org.chromium.components.dom_distiller.core.DomDistillerUrlUtils; |
+ |
+import java.util.concurrent.atomic.AtomicReference; |
+ |
+/** |
+ * Tests the ManageBookmarkActivity, which allows users to add and edit bookmarks. |
+ */ |
+public class ManageBookmarkActivityTest extends ChromeTabbedActivityTestBase { |
+ private static final long PAGE_LOAD_WAIT_TIMEOUT_SECONDS = scaleTimeout(10); |
+ private static final String DOM_DISTILLER_SCHEME = "chrome-distiller"; |
+ |
+ @Override |
+ protected void tearDown() throws Exception { |
+ super.tearDown(); |
+ |
+ // Normally the data is cleared on start up to allow debugging, but adding bookmarks |
+ // via the test prevents adding them in the phone so we need to also clear the app data |
+ // on shutdown. |
+ // TODO(tedchoc): figure out why. |
+ // |
+ // Disable for debugging a particular test. |
+ clearAppData(); |
+ } |
+ |
+ @Override |
+ public void startMainActivity() throws InterruptedException { |
+ startMainActivityFromLauncher(); |
+ } |
+ |
+ private String getMobileBookmarkFolderName() { |
+ Context context = getActivity(); |
+ // Purposely not run on the UI thread as the ChromeBrowserProvider does not allow |
+ // execution on the UI thread. |
+ long mobileBookmarkFolderId = |
+ ChromeBrowserProviderClient.getMobileBookmarksFolderId(context); |
+ assertNotSame("Mobile bookmark folder ID returned as INVALID", |
+ ChromeBrowserProviderClient.INVALID_BOOKMARK_ID, mobileBookmarkFolderId); |
+ BookmarkNode node = ChromeBrowserProviderClient.getBookmarkNode( |
+ context, mobileBookmarkFolderId, ChromeBrowserProviderClient.GET_NODE); |
+ assertNotNull("Mobile bookmark node was null.", node); |
+ return node.name(); |
+ } |
+ |
+ private void assertFolderText(final AddEditBookmarkFragment addEditFragment, |
+ String expectedText) { |
+ final AtomicReference<String> actualTextContainer = new AtomicReference<String>(); |
+ getInstrumentation().runOnMainSync(new Runnable() { |
+ @Override |
+ public void run() { |
+ Button button = (Button) addEditFragment.getView().findViewById( |
+ R.id.bookmark_folder_select); |
+ actualTextContainer.set(button.getText().toString()); |
+ } |
+ }); |
+ assertEquals(expectedText, actualTextContainer.get()); |
+ } |
+ |
+ @SmallTest |
+ @Feature({"Bookmarks", "Main"}) |
+ public void testAddBookmark() throws InterruptedException { |
+ ManageBookmarkActivity addActivity = BookmarkTestUtils |
+ .selectBookmarkItemFromMenu(getInstrumentation(), getActivity()); |
+ final AddEditBookmarkFragment addFragment = BookmarkTestUtils.loadAddEditFragment( |
+ addActivity); |
+ BookmarkTestUtils.clickOkButton(this, addFragment); |
+ final ManageBookmarkActivity editActivity = BookmarkTestUtils |
+ .selectBookmarkItemFromMenu(getInstrumentation(), getActivity()); |
+ BookmarkTestUtils.loadAddEditFragment(editActivity); |
+ assertTrue("Expected " |
+ + "title to contain 'edit' when changing an existing bookmark", |
+ ((TextView) editActivity.findViewById(R.id.bookmark_action_title)) |
+ .getText().toString().toLowerCase().contains("edit")); |
+ } |
+ |
+ @SmallTest |
+ @Feature({"Bookmarks"}) |
+ public void testAddInvalidBookmark() throws InterruptedException { |
+ // Tests that we do not crash while adding a bookmark with an invalid url. |
+ ManageBookmarkActivity addActivity = BookmarkTestUtils |
+ .selectBookmarkItemFromMenu(getInstrumentation(), getActivity()); |
+ final AddEditBookmarkFragment addFragment = BookmarkTestUtils.loadAddEditFragment( |
+ addActivity); |
+ |
+ getInstrumentation().runOnMainSync(new Runnable() { |
+ @Override |
+ public void run() { |
+ ((EditText) addFragment.getView().findViewById(R.id.bookmark_url_input)) |
+ .setText("INVALID_URL"); |
+ } |
+ }); |
+ BookmarkTestUtils.clickOkButton(this, addFragment); |
+ getInstrumentation().waitForIdleSync(); |
+ } |
+ |
+ @SmallTest |
+ @Feature({"Bookmarks"}) |
+ public void testMobileFolderIsDefault() throws InterruptedException { |
+ String mobileBookmarksName = getMobileBookmarkFolderName(); |
+ |
+ // Initial "Add Bookmark" ui should have default |
+ ManageBookmarkActivity addActivity = BookmarkTestUtils |
+ .selectBookmarkItemFromMenu(getInstrumentation(), getActivity()); |
+ AddEditBookmarkFragment addFragment = BookmarkTestUtils.loadAddEditFragment(addActivity); |
+ assertFolderText(addFragment, mobileBookmarksName); |
+ |
+ BookmarkTestUtils.clickSelectFolderButton(this, addFragment); |
+ getInstrumentation().waitForIdleSync(); |
+ final SelectBookmarkFolderFragment selectedFolder = BookmarkTestUtils.loadSelectFragment( |
+ addActivity); |
+ |
+ BookmarkTestUtils.clickNewFolderButton(this, selectedFolder); |
+ getInstrumentation().waitForIdleSync(); |
+ final AddEditBookmarkFragment addNewFolderFragment = BookmarkTestUtils |
+ .loadAddFolderFragment(addActivity); |
+ assertFolderText(addNewFolderFragment, mobileBookmarksName); |
+ } |
+ |
+ @SmallTest |
+ @Feature({"Bookmarks"}) |
+ public void testAddFolder() throws InterruptedException { |
+ ManageBookmarkActivity addActivity = BookmarkTestUtils |
+ .selectBookmarkItemFromMenu(getInstrumentation(), getActivity()); |
+ final AddEditBookmarkFragment addFragment = |
+ BookmarkTestUtils.loadAddEditFragment(addActivity); |
+ |
+ BookmarkTestUtils.clickSelectFolderButton(this, addFragment); |
+ getInstrumentation().waitForIdleSync(); |
+ SelectBookmarkFolderFragment selectedFolder = BookmarkTestUtils.loadSelectFragment( |
+ addActivity); |
+ |
+ BookmarkTestUtils.clickNewFolderButton(this, selectedFolder); |
+ getInstrumentation().waitForIdleSync(); |
+ final AddEditBookmarkFragment addNewFolderFragment = |
+ BookmarkTestUtils.loadAddFolderFragment(addActivity); |
+ |
+ final String testFolderName = "Test Folder"; |
+ getInstrumentation().runOnMainSync(new Runnable() { |
+ @Override |
+ public void run() { |
+ ((EditText) addNewFolderFragment.getView().findViewById(R.id.bookmark_title_input)) |
+ .setText(testFolderName); |
+ } |
+ }); |
+ BookmarkTestUtils.clickOkButton(this, addNewFolderFragment); |
+ assertFolderText(addFragment, testFolderName); |
+ } |
+ |
+ /** |
+ * Add bookmark in reader mode and see if the saved URL is the original one. |
+ * TODO(wychen): test enhanced bookmark as well? |
+ */ |
+ // @SmallTest |
+ // @Feature({"Bookmarks"}) |
+ // crbug.com/464794 |
+ @FlakyTest |
+ public void testAddReaderModeBookmark() throws InterruptedException { |
+ String url = TestHttpServerClient.getUrl("chrome/test/data/android/google.html"); |
+ String distillerUrl = |
+ DomDistillerUrlUtils.getDistillerViewUrlFromUrl(DOM_DISTILLER_SCHEME, url); |
+ loadUrl(distillerUrl); |
+ ChromeTabUtils.waitForTabPageLoaded(getActivity().getActivityTab(), distillerUrl); |
+ |
+ ManageBookmarkActivity addActivity = BookmarkTestUtils |
+ .selectBookmarkItemFromMenu(getInstrumentation(), getActivity()); |
+ BookmarkTestUtils.loadAddEditFragment(addActivity); |
+ |
+ assertEquals(url, |
+ ((TextView) addActivity.findViewById(R.id.bookmark_url_input)) |
+ .getText().toString()); |
+ } |
+ |
+ /** |
+ * Add an existing bookmark in reader mode and see if it is recognized as existing. |
+ */ |
+ // @SmallTest |
+ // @Feature({"Bookmarks"}) |
+ // crbug.com/464794 |
+ @FlakyTest |
+ public void testAddExistingReaderModeBookmark() throws InterruptedException { |
+ String url = TestHttpServerClient.getUrl("chrome/test/data/android/google.html"); |
+ String distillerUrl = |
+ DomDistillerUrlUtils.getDistillerViewUrlFromUrl(DOM_DISTILLER_SCHEME, url); |
+ loadUrl(distillerUrl); |
+ ChromeTabUtils.waitForTabPageLoaded(getActivity().getActivityTab(), distillerUrl); |
+ |
+ ManageBookmarkActivity addActivity = BookmarkTestUtils |
+ .selectBookmarkItemFromMenu(getInstrumentation(), getActivity()); |
+ final AddEditBookmarkFragment addFragment = BookmarkTestUtils.loadAddEditFragment( |
+ addActivity); |
+ |
+ assertTrue("Expected " |
+ + "title to contain 'add' when adding a new bookmark", |
+ ((TextView) addActivity.findViewById(R.id.bookmark_action_title)) |
+ .getText().toString().toLowerCase().contains("add")); |
+ BookmarkTestUtils.clickOkButton(this, addFragment); |
+ |
+ |
+ final ManageBookmarkActivity editActivity = BookmarkTestUtils |
+ .selectBookmarkItemFromMenu(getInstrumentation(), getActivity()); |
+ BookmarkTestUtils.loadAddEditFragment(editActivity); |
+ |
+ assertTrue("Expected " |
+ + "title to contain 'edit' when changing an existing bookmark", |
+ ((TextView) editActivity.findViewById(R.id.bookmark_action_title)) |
+ .getText().toString().toLowerCase().contains("edit")); |
+ } |
+} |