1cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes/*
2cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes * Copyright (C) 2015 The Android Open Source Project
3cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes *
4cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes * Licensed under the Apache License, Version 2.0 (the "License");
5cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes * you may not use this file except in compliance with the License.
6cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes * You may obtain a copy of the License at
7cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes *
8cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes *      http://www.apache.org/licenses/LICENSE-2.0
9cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes *
10cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes * Unless required by applicable law or agreed to in writing, software
11cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes * distributed under the License is distributed on an "AS IS" BASIS,
12cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes * See the License for the specific language governing permissions and
14cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes * limitations under the License.
15cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes */
16cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes
17ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikaspackage androidx.appcompat.app;
18cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes
198d3b808ab4720ef4e9d58f2bba4e31f741d3898cAurimas Liutikasimport static org.junit.Assert.assertFalse;
208d3b808ab4720ef4e9d58f2bba4e31f741d3898cAurimas Liutikasimport static org.junit.Assert.assertTrue;
218d3b808ab4720ef4e9d58f2bba4e31f741d3898cAurimas Liutikas
228d3b808ab4720ef4e9d58f2bba4e31f741d3898cAurimas Liutikasimport android.support.test.InstrumentationRegistry;
2349b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Roskyimport android.support.test.filters.SmallTest;
2449b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Roskyimport android.view.KeyEvent;
25ffada290900fdef74c194561399e8a2a66e484aeEvan Roskyimport android.view.Window;
2649b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky
273de8a4e8305507475d7890205184946a25cf45e7Aurimas Liutikasimport androidx.appcompat.widget.Toolbar;
283de8a4e8305507475d7890205184946a25cf45e7Aurimas Liutikas
2949b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Roskyimport org.junit.Test;
3049b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky
31a7eda07bf9dba63dde6cb4eaa06a5229cfd832ecAurimas Liutikaspublic class KeyEventsTestCaseWithToolbar extends BaseKeyEventsTestCase<ToolbarAppCompatActivity> {
32cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes    public KeyEventsTestCaseWithToolbar() {
33a7eda07bf9dba63dde6cb4eaa06a5229cfd832ecAurimas Liutikas        super(ToolbarAppCompatActivity.class);
34cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes    }
3549b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky
3649b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky    @Test
3749b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky    @SmallTest
3849b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky    @Override
3949b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky    public void testMenuKeyEventReachesActivity() throws InterruptedException {
4049b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky        // With Toolbar, MENU key gets sent-to (and consumed by) Toolbar rather than Activity
4149b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky    }
4249b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky
4349b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky    @Test
4449b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky    @SmallTest
4549b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky    public void testMenuKeyOpensToolbarMenu() {
4649b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky        // Base test only checks that *a* menu is opened, we check here that the toolbar's menu
4749b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky        // specifically is opened.
4849b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky        Toolbar toolbar = mActivityTestRule.getActivity().getToolbar();
4949b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky        assertFalse(toolbar.isOverflowMenuShowing());
5049b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky
518d3b808ab4720ef4e9d58f2bba4e31f741d3898cAurimas Liutikas        InstrumentationRegistry.getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_MENU);
528d3b808ab4720ef4e9d58f2bba4e31f741d3898cAurimas Liutikas        InstrumentationRegistry.getInstrumentation().waitForIdleSync();
5349b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky        assertTrue(toolbar.isOverflowMenuShowing());
5449b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky
558d3b808ab4720ef4e9d58f2bba4e31f741d3898cAurimas Liutikas        InstrumentationRegistry.getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_MENU);
568d3b808ab4720ef4e9d58f2bba4e31f741d3898cAurimas Liutikas        InstrumentationRegistry.getInstrumentation().waitForIdleSync();
5749b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky        assertFalse(toolbar.isOverflowMenuShowing());
5849b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky    }
5949b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky
6049b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky    @Test
6149b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky    @SmallTest
6249b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky    public void testOpenMenuOpensToolbarMenu() throws Throwable {
63ffada290900fdef74c194561399e8a2a66e484aeEvan Rosky        if (!mActivityTestRule.getActivity().getWindow().hasFeature(Window.FEATURE_OPTIONS_PANEL)) {
64ffada290900fdef74c194561399e8a2a66e484aeEvan Rosky            return;
65ffada290900fdef74c194561399e8a2a66e484aeEvan Rosky        }
6649b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky        Toolbar toolbar = mActivityTestRule.getActivity().getToolbar();
6749b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky        assertFalse(toolbar.isOverflowMenuShowing());
6849b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky
6949b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky        mActivityTestRule.runOnUiThread(new Runnable() {
7049b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky            @Override
7149b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky            public void run() {
7249b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky                mActivityTestRule.getActivity().openOptionsMenu();
7349b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky            }
7449b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky        });
758d3b808ab4720ef4e9d58f2bba4e31f741d3898cAurimas Liutikas        InstrumentationRegistry.getInstrumentation().waitForIdleSync();
7649b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky        assertTrue(toolbar.isOverflowMenuShowing());
7749b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky
7849b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky        mActivityTestRule.runOnUiThread(new Runnable() {
7949b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky            @Override
8049b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky            public void run() {
8149b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky                mActivityTestRule.getActivity().closeOptionsMenu();
8249b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky            }
8349b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky        });
848d3b808ab4720ef4e9d58f2bba4e31f741d3898cAurimas Liutikas        InstrumentationRegistry.getInstrumentation().waitForIdleSync();
8549b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky        assertFalse(toolbar.isOverflowMenuShowing());
8649b39d17068f2d6ff09378827b2a7d56163b6ffdEvan Rosky    }
87cdbdcb29b4a4e3bf1553f824902562cee3fcb723Chris Banes}
88