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