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