xref: /aosp_15_r20/frameworks/base/core/tests/coretests/src/android/view/MenuTest.java (revision d57664e9bc4670b3ecf6748a746a57c557b6bc9e)
1 /*
2  * Copyright (C) 2006 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.view;
18 
19 import android.test.AndroidTestCase;
20 
21 import androidx.test.filters.SmallTest;
22 
23 import com.android.frameworks.coretests.R;
24 import com.android.internal.view.menu.MenuBuilder;
25 
26 import junit.framework.Assert;
27 
28 public class MenuTest extends AndroidTestCase {
29 
30     private MenuBuilder mMenu;
31 
setUp()32     public void setUp() throws Exception {
33         super.setUp();
34         mMenu = new MenuBuilder(super.getContext());
35     }
36 
37     @SmallTest
testItemId()38     public void testItemId() {
39         final int id = 512;
40         final MenuItem item = mMenu.add(0, id, 0, "test");
41 
42         Assert.assertEquals(id, item.getItemId());
43         Assert.assertEquals(item, mMenu.findItem(id));
44         Assert.assertEquals(0, mMenu.findItemIndex(id));
45     }
46 
47     @SmallTest
testGroupId()48     public void testGroupId() {
49         final int groupId = 541;
50         final int item1Index = 1;
51         final int item2Index = 3;
52 
53         mMenu.add(0, 0, item1Index - 1, "ignore");
54         final MenuItem item = mMenu.add(groupId, 0, item1Index, "test");
55         mMenu.add(0, 0, item2Index - 1, "ignore");
56         final MenuItem item2 = mMenu.add(groupId, 0, item2Index, "test2");
57 
58         Assert.assertEquals(groupId, item.getGroupId());
59         Assert.assertEquals(groupId, item2.getGroupId());
60         Assert.assertEquals(item1Index, mMenu.findGroupIndex(groupId));
61         Assert.assertEquals(item2Index, mMenu.findGroupIndex(groupId, item1Index + 1));
62     }
63 
64     @SmallTest
testGroup()65     public void testGroup() {
66         // This test does the following
67         //  1. Create a grouped item in the menu
68         //  2. Check that findGroupIndex() finds the grouped item.
69         //  3. Check that findGroupIndex() doesn't find a non-existent group.
70 
71         final int GROUP_ONE = Menu.FIRST;
72         final int GROUP_TWO = Menu.FIRST + 1;
73 
74         mMenu.add(GROUP_ONE, 0, 0, "Menu text");
75         Assert.assertEquals(mMenu.findGroupIndex(GROUP_ONE), 0);
76         Assert.assertEquals(mMenu.findGroupIndex(GROUP_TWO), -1);
77         //TODO: expand this test case to do multiple groups,
78         //adding and removing, hiding and showing, etc.
79     }
80 
81     @SmallTest
testOrder()82     public void testOrder() {
83         final String a = "a", b = "b", c = "c";
84         final int firstOrder = 7, midOrder = 8, lastOrder = 9;
85 
86         mMenu.add(0, 0, lastOrder, c);
87         mMenu.add(0, 0, firstOrder, a);
88         mMenu.add(0, 0, midOrder, b);
89 
90         Assert.assertEquals(firstOrder, mMenu.getItem(0).getOrder());
91         Assert.assertEquals(a, mMenu.getItem(0).getTitle());
92         Assert.assertEquals(midOrder, mMenu.getItem(1).getOrder());
93         Assert.assertEquals(b, mMenu.getItem(1).getTitle());
94         Assert.assertEquals(lastOrder, mMenu.getItem(2).getOrder());
95         Assert.assertEquals(c, mMenu.getItem(2).getTitle());
96     }
97 
98     @SmallTest
testTitle()99     public void testTitle() {
100         final String title = "test";
101         final MenuItem stringItem = mMenu.add(title);
102         final MenuItem resItem = mMenu.add(R.string.menu_test);
103 
104         Assert.assertEquals(title, stringItem.getTitle());
105         Assert.assertEquals(getContext().getResources().getString(R.string.menu_test), resItem
106                 .getTitle());
107     }
108 
109     @SmallTest
testCheckable()110     public void testCheckable() {
111         final int groupId = 1;
112         final MenuItem item1 = mMenu.add(groupId, 1, 0, "item1");
113         final MenuItem item2 = mMenu.add(groupId, 2, 0, "item2");
114 
115         // Set to exclusive
116         mMenu.setGroupCheckable(groupId, true, true);
117         Assert.assertTrue("Item was not set to checkable", item1.isCheckable());
118         item1.setChecked(true);
119         Assert.assertTrue("Item did not get checked", item1.isChecked());
120         Assert.assertFalse("Item was not unchecked due to exclusive checkable", item2.isChecked());
121         mMenu.findItem(2).setChecked(true);
122         Assert.assertTrue("Item did not get checked", item2.isChecked());
123         Assert.assertFalse("Item was not unchecked due to exclusive checkable", item1.isChecked());
124 
125         // Multiple non-exlusive checkable items
126         mMenu.setGroupCheckable(groupId, true, false);
127         Assert.assertTrue("Item was not set to checkable", item1.isCheckable());
128         item1.setChecked(false);
129         Assert.assertFalse("Item did not get unchecked", item1.isChecked());
130         item1.setChecked(true);
131         Assert.assertTrue("Item did not get checked", item1.isChecked());
132         mMenu.findItem(2).setChecked(true);
133         Assert.assertTrue("Item did not get checked", item2.isChecked());
134         Assert.assertTrue("Item was unchecked when it shouldnt have been", item1.isChecked());
135     }
136 
137     @SmallTest
testVisibility()138     public void testVisibility() {
139         final MenuItem item1 = mMenu.add(0, 1, 0, "item1");
140         final MenuItem item2 = mMenu.add(0, 2, 0, "item2");
141 
142         // Should start as visible
143         Assert.assertTrue("Item did not start as visible", item1.isVisible());
144         Assert.assertTrue("Item did not start as visible", item2.isVisible());
145 
146         // Hide
147         item1.setVisible(false);
148         Assert.assertFalse("Item did not become invisible", item1.isVisible());
149         mMenu.findItem(2).setVisible(false);
150         Assert.assertFalse("Item did not become invisible", item2.isVisible());
151     }
152 
153     @SmallTest
testSubMenu()154     public void testSubMenu() {
155         final SubMenu subMenu = mMenu.addSubMenu(0, 0, 0, "submenu");
156         final MenuItem subMenuItem = subMenu.getItem();
157         final MenuItem item1 = subMenu.add(0, 1, 0, "item1");
158         final MenuItem item2 = subMenu.add(0, 2, 0, "item2");
159 
160         // findItem should recurse into submenus
161         Assert.assertEquals(item1, mMenu.findItem(1));
162         Assert.assertEquals(item2, mMenu.findItem(2));
163     }
164 
165     @SmallTest
testRemove()166     public void testRemove() {
167         final int groupId = 1;
168         final MenuItem item1 = mMenu.add(groupId, 1, 0, "item1");
169         final MenuItem item2 = mMenu.add(groupId, 2, 0, "item2");
170         final MenuItem item3 = mMenu.add(groupId, 3, 0, "item3");
171         final MenuItem item4 = mMenu.add(groupId, 4, 0, "item4");
172         final MenuItem item5 = mMenu.add(groupId, 5, 0, "item5");
173         final MenuItem item6 = mMenu.add(0, 6, 0, "item6");
174 
175         Assert.assertEquals(item1, mMenu.findItem(1));
176         mMenu.removeItemAt(0);
177         Assert.assertNull(mMenu.findItem(1));
178 
179         Assert.assertEquals(item2, mMenu.findItem(2));
180         mMenu.removeItem(2);
181         Assert.assertNull(mMenu.findItem(2));
182 
183         Assert.assertEquals(item3, mMenu.findItem(3));
184         Assert.assertEquals(item4, mMenu.findItem(4));
185         Assert.assertEquals(item5, mMenu.findItem(5));
186         mMenu.removeGroup(groupId);
187         Assert.assertNull(mMenu.findItem(3));
188         Assert.assertNull(mMenu.findItem(4));
189         Assert.assertNull(mMenu.findItem(5));
190 
191         Assert.assertEquals(item6, mMenu.findItem(6));
192         mMenu.clear();
193         Assert.assertNull(mMenu.findItem(6));
194     }
195 
makeKeyEvent(int keyCode, int metaState)196     private KeyEvent makeKeyEvent(int keyCode, int metaState) {
197         return new KeyEvent(0L, 0L, KeyEvent.ACTION_DOWN, keyCode, 0, metaState);
198     }
199 }
200