Index: chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java |
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java |
index 2cd9ec8e90eb221a9250e38e6bc60cd7d2941922..dc188680e015a30ccedda6015155a282df4bc534 100644 |
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java |
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java |
@@ -9,6 +9,7 @@ import android.content.ClipboardManager; |
import android.content.Context; |
import android.support.test.filters.LargeTest; |
import android.support.test.filters.MediumTest; |
+import android.support.test.filters.SmallTest; |
import android.view.ContextMenu; |
import android.view.KeyEvent; |
@@ -34,6 +35,9 @@ import org.chromium.content.browser.test.util.TestTouchUtils; |
import org.chromium.net.test.EmbeddedTestServer; |
import java.io.IOException; |
+import java.util.ArrayList; |
+import java.util.Collections; |
+import java.util.List; |
import java.util.concurrent.Callable; |
import java.util.concurrent.TimeoutException; |
import java.util.concurrent.atomic.AtomicReference; |
@@ -348,6 +352,84 @@ public class ContextMenuTest extends DownloadTestBase { |
assertEquals(imageUrl, tabModel.getTabAt(indexOfLinkPage2).getUrl()); |
} |
+ @SmallTest |
+ @Feature({"Browser", "ContextMenu"}) |
+ public void testContextMenuRetrievesLinkOptions() |
+ throws TimeoutException, InterruptedException { |
+ Tab tab = getActivity().getActivityTab(); |
+ ContextMenu menu = ContextMenuUtils.openContextMenu(this, tab, "testLink"); |
+ |
+ List<Integer> expectedItems = new ArrayList<>(); |
+ Collections.addAll(expectedItems, R.id.contextmenu_open_in_new_tab, |
+ R.id.contextmenu_open_in_incognito_tab, R.id.contextmenu_copy_link_address, |
+ R.id.contextmenu_copy_link_text, R.id.contextmenu_save_link_as); |
+ assertTrue(confirmMenuList(menu, expectedItems)); |
+ } |
+ |
+ @SmallTest |
+ @Feature({"Browser", "ContextMenu"}) |
+ public void testContextMenuRetrievesImageOptions() |
+ throws TimeoutException, InterruptedException { |
+ Tab tab = getActivity().getActivityTab(); |
+ ContextMenu menu = ContextMenuUtils.openContextMenu(this, tab, "testImage"); |
+ |
+ List<Integer> expectedItems = new ArrayList<>(); |
+ Collections.addAll(expectedItems, R.id.contextmenu_save_image, |
+ R.id.contextmenu_open_image_in_new_tab, R.id.contextmenu_search_by_image, |
+ R.id.contextmenu_share_image); |
+ assertTrue(confirmMenuList(menu, expectedItems)); |
+ } |
+ |
+ @SmallTest |
+ @Feature({"Browser", "ContextMenu"}) |
+ public void testContextMenuRetrievesImageLinkOptions() |
+ throws TimeoutException, InterruptedException { |
+ Tab tab = getActivity().getActivityTab(); |
+ ContextMenu menu = ContextMenuUtils.openContextMenu(this, tab, "testImageLink"); |
+ |
+ List<Integer> expectedItems = new ArrayList<>(); |
+ Collections.addAll(expectedItems, R.id.contextmenu_open_in_new_tab, |
+ R.id.contextmenu_open_in_incognito_tab, R.id.contextmenu_copy_link_address, |
+ R.id.contextmenu_save_link_as, R.id.contextmenu_save_image, |
+ R.id.contextmenu_open_image_in_new_tab, R.id.contextmenu_search_by_image, |
+ R.id.contextmenu_share_image); |
+ assertTrue(confirmMenuList(menu, expectedItems)); |
+ } |
+ |
+ @SmallTest |
+ @Feature({"Browser", "ContextMenu"}) |
+ public void testContextMenuRetrievesVideoOptions() |
+ throws TimeoutException, InterruptedException { |
+ Tab tab = getActivity().getActivityTab(); |
+ DOMUtils.clickNode(this, getActivity().getCurrentContentViewCore(), "videoDOMElement"); |
+ ContextMenu menu = ContextMenuUtils.openContextMenu(this, tab, "videoDOMElement"); |
+ |
+ List<Integer> expectedItems = new ArrayList<>(); |
+ expectedItems.add(R.id.contextmenu_save_video); |
+ assertTrue(confirmMenuList(menu, expectedItems)); |
+ } |
+ |
+ /** |
+ * Takes all the visible items on the menu and compares them to a the list of expected items. |
+ * @param menu A context menu that is displaying visible items. |
+ * @param expectedItems A list of items that is expected to appear within a context menu. |
+ * @return Returns true when all the items in the menu are equal to the expectedItems. |
+ */ |
+ private boolean confirmMenuList(ContextMenu menu, List<Integer> expectedItems) { |
JJ
2017/02/22 00:57:43
Preemptive comment! For a while I thought of putti
David Trainor- moved to gerrit
2017/02/22 05:36:33
I see your point. IMO the (debatable) useful piec
JJ
2017/02/22 19:09:39
Interesting! I didn't think of it with line number
|
+ List<Integer> actualItems = new ArrayList<>(); |
+ for (int i = 0; i < menu.size(); i++) { |
+ if (menu.getItem(i).isVisible()) { |
+ actualItems.add(menu.getItem(i).getItemId()); |
+ } |
+ } |
+ // Leave the O(n logn) sort for when they're the same size |
+ if (actualItems.size() != expectedItems.size()) return false; |
+ |
+ Collections.sort(expectedItems); |
+ Collections.sort(actualItems); |
+ return actualItems.equals(expectedItems); |
+ } |
+ |
private void saveMediaFromContextMenu(String mediaDOMElement, int saveMenuID, |
String expectedFilename) throws InterruptedException, TimeoutException, |
SecurityException, IOException { |