chromium/chrome/test/android/javatests/src/org/chromium/chrome/test/util/MenuUtils.java

// Copyright 2015 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package org.chromium.chrome.test.util;

import android.app.Instrumentation;

import org.junit.Assert;

import org.chromium.chrome.browser.app.ChromeActivity;

/** Collection of menu utilities. */
public class MenuUtils {
    /** Trigger for a new activity based on a menu being pressed. */
    public static class MenuActivityTrigger implements Runnable {

        private final Instrumentation mInstrumentation;
        private final ChromeActivity mActivity;
        private final int mMenuId;

        public MenuActivityTrigger(
                Instrumentation instrumentation, ChromeActivity activity, int menuId) {
            mInstrumentation = instrumentation;
            mActivity = activity;
            mMenuId = menuId;
        }

        @Override
        public void run() {
            mInstrumentation.runOnMainSync(
                    new Runnable() {
                        @Override
                        public void run() {
                            Assert.assertTrue(
                                    "Could not execute menu item.",
                                    mActivity.onMenuOrKeyboardAction(mMenuId, true));
                        }
                    });
        }
    }

    /**
     * Execute a particular menu item from the custom menu.
     * The item is executed even if it is disabled or not visible.
     */
    public static void invokeCustomMenuActionSync(
            Instrumentation instrumentation, final ChromeActivity activity, final int id) {
        instrumentation.runOnMainSync(
                new Runnable() {
                    @Override
                    public void run() {
                        Assert.assertTrue(
                                "Could not execute menu item.",
                                activity.onMenuOrKeyboardAction(id, true));
                    }
                });
    }
}