| Index: chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuUtils.java
|
| diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuUtils.java b/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuUtils.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3fa382bfd74fd30d8451729fed5c608a5e9760fb
|
| --- /dev/null
|
| +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuUtils.java
|
| @@ -0,0 +1,88 @@
|
| +// Copyright 2013 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.contextmenu;
|
| +
|
| +import android.test.ActivityInstrumentationTestCase2;
|
| +import android.text.TextUtils;
|
| +import android.view.ContextMenu;
|
| +import android.view.MenuItem;
|
| +
|
| +import junit.framework.Assert;
|
| +
|
| +import org.chromium.chrome.browser.TabBase;
|
| +import org.chromium.chrome.browser.TabBaseTabUtils.TestCallbackHelperContainerForTab;
|
| +import org.chromium.content.browser.test.util.Criteria;
|
| +import org.chromium.content.browser.test.util.CriteriaHelper;
|
| +import org.chromium.content.browser.test.util.DOMUtils;
|
| +
|
| +import java.util.concurrent.TimeoutException;
|
| +
|
| +public class ContextMenuUtils {
|
| + public static ContextMenu openContextMenu(ActivityInstrumentationTestCase2 testCase,
|
| + TabBase tab, TestCallbackHelperContainerForTab client, String openerDOMNodeId)
|
| + throws InterruptedException, TimeoutException {
|
| + TestCallbackHelperContainerForTab.OnContextMenuShownHelper helper =
|
| + client.getOnContextMenuShownHelper();
|
| +
|
| + int callCount = helper.getCallCount();
|
| + DOMUtils.longPressNode(testCase, tab.getContentView(), client, openerDOMNodeId);
|
| +
|
| + helper.waitForCallback(callCount);
|
| + return helper.getContextMenu();
|
| + }
|
| +
|
| + public static void selectContextMenuItem(ActivityInstrumentationTestCase2 testCase,
|
| + TabBase tab, TestCallbackHelperContainerForTab client, String openerDOMNodeId,
|
| + final int itemId) throws InterruptedException, TimeoutException {
|
| + ContextMenu menu = openContextMenu(testCase, tab, client, openerDOMNodeId);
|
| + Assert.assertNotNull("Failed to open context menu", menu);
|
| +
|
| + selectOpenContextMenuItem(testCase, menu, itemId);
|
| + }
|
| +
|
| + public static void selectContextMenuItemByTitle(ActivityInstrumentationTestCase2 testCase,
|
| + TabBase tab, TestCallbackHelperContainerForTab client, String openerDOMNodeId,
|
| + String itemTitle) throws InterruptedException, TimeoutException {
|
| +
|
| + ContextMenu menu = openContextMenu(testCase, tab, client, openerDOMNodeId);
|
| + Assert.assertNotNull("Failed to open context menu", menu);
|
| +
|
| + Integer itemId = null;
|
| + for (int i = 0; i < menu.size(); i++) {
|
| + MenuItem item = menu.getItem(i);
|
| + if (TextUtils.equals(item.getTitle(), itemTitle)) {
|
| + itemId = item.getItemId();
|
| + break;
|
| + }
|
| + }
|
| + Assert.assertNotNull("Couldn't find context menu item for '" + itemTitle + "'", itemId);
|
| +
|
| + selectOpenContextMenuItem(testCase, menu, itemId);
|
| + }
|
| +
|
| + private static void selectOpenContextMenuItem(final ActivityInstrumentationTestCase2 testCase,
|
| + final ContextMenu menu, final int itemId) throws InterruptedException {
|
| + MenuItem item = menu.findItem(itemId);
|
| + Assert.assertNotNull("Could not find '" + itemId + "' in menu", item);
|
| + Assert.assertTrue("'" + itemId + "' is not visible", item.isVisible());
|
| + Assert.assertTrue("'" + itemId + "' is not enabled", item.isEnabled());
|
| +
|
| + testCase.getInstrumentation().runOnMainSync(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + boolean activated = menu.performIdentifierAction(itemId, 0);
|
| + Assert.assertTrue("Failed to activate '" + itemId + "' in menu", activated);
|
| + }
|
| + });
|
| +
|
| + Assert.assertTrue("Activity did not regain focus.",
|
| + CriteriaHelper.pollForCriteria(new Criteria() {
|
| + @Override
|
| + public boolean isSatisfied() {
|
| + return testCase.getActivity().hasWindowFocus();
|
| + }
|
| + }));
|
| + }
|
| +}
|
|
|