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 com.android.unit_tests; 18 19 import com.android.internal.view.menu.MenuBuilder; 20 21 import junit.framework.Assert; 22 23 import android.test.AndroidTestCase; 24 import android.test.MoreAsserts; 25 import android.test.suitebuilder.annotation.LargeTest; 26 import android.test.suitebuilder.annotation.SmallTest; 27 import android.view.KeyEvent; 28 import android.view.Menu; 29 import android.view.MenuItem; 30 import android.view.SubMenu; 31 32 public class MenuTest extends AndroidTestCase { 33 34 private MenuBuilder mMenu; 35 setUp()36 public void setUp() throws Exception { 37 super.setUp(); 38 mMenu = new MenuBuilder(super.getContext()); 39 } 40 41 @SmallTest testItemId()42 public void testItemId() { 43 final int id = 512; 44 final MenuItem item = mMenu.add(0, id, 0, "test"); 45 46 Assert.assertEquals(id, item.getItemId()); 47 Assert.assertEquals(item, mMenu.findItem(id)); 48 Assert.assertEquals(0, mMenu.findItemIndex(id)); 49 } 50 51 @SmallTest testGroupId()52 public void testGroupId() { 53 final int groupId = 541; 54 final int item1Index = 1; 55 final int item2Index = 3; 56 57 mMenu.add(0, 0, item1Index - 1, "ignore"); 58 final MenuItem item = mMenu.add(groupId, 0, item1Index, "test"); 59 mMenu.add(0, 0, item2Index - 1, "ignore"); 60 final MenuItem item2 = mMenu.add(groupId, 0, item2Index, "test2"); 61 62 Assert.assertEquals(groupId, item.getGroupId()); 63 Assert.assertEquals(groupId, item2.getGroupId()); 64 Assert.assertEquals(item1Index, mMenu.findGroupIndex(groupId)); 65 Assert.assertEquals(item2Index, mMenu.findGroupIndex(groupId, item1Index + 1)); 66 } 67 68 @SmallTest testGroup()69 public void testGroup() { 70 // This test does the following 71 // 1. Create a grouped item in the menu 72 // 2. Check that findGroupIndex() finds the grouped item. 73 // 3. Check that findGroupIndex() doesn't find a non-existent group. 74 75 final int GROUP_ONE = Menu.FIRST; 76 final int GROUP_TWO = Menu.FIRST + 1; 77 78 mMenu.add(GROUP_ONE, 0, 0, "Menu text"); 79 Assert.assertEquals(mMenu.findGroupIndex(GROUP_ONE), 0); 80 Assert.assertEquals(mMenu.findGroupIndex(GROUP_TWO), -1); 81 //TODO: expand this test case to do multiple groups, 82 //adding and removing, hiding and showing, etc. 83 } 84 85 @SmallTest testIsShortcutWithAlpha()86 public void testIsShortcutWithAlpha() throws Exception { 87 mMenu.setQwertyMode(true); 88 mMenu.add(0, 0, 0, "test").setShortcut('2', 'a'); 89 Assert.assertTrue(mMenu.isShortcutKey(KeyEvent.KEYCODE_A, 90 makeKeyEvent(KeyEvent.KEYCODE_A, 0))); 91 Assert.assertFalse(mMenu.isShortcutKey(KeyEvent.KEYCODE_B, 92 makeKeyEvent(KeyEvent.KEYCODE_B, 0))); 93 } 94 95 @SmallTest testIsShortcutWithNumeric()96 public void testIsShortcutWithNumeric() throws Exception { 97 mMenu.setQwertyMode(false); 98 mMenu.add(0, 0, 0, "test").setShortcut('2', 'a'); 99 Assert.assertTrue(mMenu.isShortcutKey(KeyEvent.KEYCODE_2, 100 makeKeyEvent(KeyEvent.KEYCODE_2, 0))); 101 Assert.assertFalse(mMenu.isShortcutKey(KeyEvent.KEYCODE_A, 102 makeKeyEvent(KeyEvent.KEYCODE_A, 0))); 103 } 104 105 @SmallTest testIsShortcutWithAlt()106 public void testIsShortcutWithAlt() throws Exception { 107 mMenu.setQwertyMode(true); 108 mMenu.add(0, 0, 0, "test").setShortcut('2', 'a'); 109 Assert.assertTrue(mMenu.isShortcutKey(KeyEvent.KEYCODE_A, 110 makeKeyEvent(KeyEvent.KEYCODE_A, 111 KeyEvent.META_ALT_ON))); 112 Assert.assertFalse(mMenu.isShortcutKey(KeyEvent.KEYCODE_A, 113 makeKeyEvent(KeyEvent.KEYCODE_A, 114 KeyEvent.META_SYM_ON))); 115 } 116 117 @SmallTest testIsNotShortcutWithShift()118 public void testIsNotShortcutWithShift() throws Exception { 119 mMenu.setQwertyMode(true); 120 mMenu.add(0, 0, 0, "test").setShortcut('2', 'a'); 121 Assert.assertFalse(mMenu.isShortcutKey(KeyEvent.KEYCODE_A, 122 makeKeyEvent(KeyEvent.KEYCODE_A, 123 KeyEvent.META_SHIFT_ON))); 124 } 125 126 @SmallTest testIsNotShortcutWithSym()127 public void testIsNotShortcutWithSym() throws Exception { 128 mMenu.setQwertyMode(true); 129 mMenu.add(0, 0, 0, "test").setShortcut('2', 'a'); 130 Assert.assertFalse(mMenu.isShortcutKey(KeyEvent.KEYCODE_A, 131 makeKeyEvent(KeyEvent.KEYCODE_A, 132 KeyEvent.META_SYM_ON))); 133 } 134 135 @SmallTest testIsShortcutWithUpperCaseAlpha()136 public void testIsShortcutWithUpperCaseAlpha() throws Exception { 137 mMenu.setQwertyMode(true); 138 mMenu.add(0, 0, 0, "test").setShortcut('2', 'A'); 139 Assert.assertTrue(mMenu.isShortcutKey(KeyEvent.KEYCODE_A, 140 makeKeyEvent(KeyEvent.KEYCODE_A, 0))); 141 } 142 143 @SmallTest testIsShortcutWithBackspace()144 public void testIsShortcutWithBackspace() throws Exception { 145 mMenu.setQwertyMode(true); 146 mMenu.add(0, 0, 0, "test").setShortcut('2', '\b'); 147 Assert.assertTrue(mMenu.isShortcutKey(KeyEvent.KEYCODE_DEL, 148 makeKeyEvent(KeyEvent.KEYCODE_DEL, 0))); 149 } 150 151 @SmallTest testIsShortcutWithNewline()152 public void testIsShortcutWithNewline() throws Exception { 153 mMenu.setQwertyMode(true); 154 mMenu.add(0, 0, 0, "test").setShortcut('2', '\n'); 155 Assert.assertTrue(mMenu.isShortcutKey(KeyEvent.KEYCODE_ENTER, 156 makeKeyEvent(KeyEvent.KEYCODE_ENTER, 0))); 157 } 158 159 @SmallTest testOrder()160 public void testOrder() { 161 final String a = "a", b = "b", c = "c"; 162 final int firstOrder = 7, midOrder = 8, lastOrder = 9; 163 164 mMenu.add(0, 0, lastOrder, c); 165 mMenu.add(0, 0, firstOrder, a); 166 mMenu.add(0, 0, midOrder, b); 167 168 Assert.assertEquals(firstOrder, mMenu.getItem(0).getOrder()); 169 Assert.assertEquals(a, mMenu.getItem(0).getTitle()); 170 Assert.assertEquals(midOrder, mMenu.getItem(1).getOrder()); 171 Assert.assertEquals(b, mMenu.getItem(1).getTitle()); 172 Assert.assertEquals(lastOrder, mMenu.getItem(2).getOrder()); 173 Assert.assertEquals(c, mMenu.getItem(2).getTitle()); 174 } 175 176 @SmallTest testTitle()177 public void testTitle() { 178 final String title = "test"; 179 final MenuItem stringItem = mMenu.add(title); 180 final MenuItem resItem = mMenu.add(R.string.menu_test); 181 182 Assert.assertEquals(title, stringItem.getTitle()); 183 Assert.assertEquals(getContext().getResources().getString(R.string.menu_test), resItem 184 .getTitle()); 185 } 186 187 @SmallTest testCheckable()188 public void testCheckable() { 189 final int groupId = 1; 190 final MenuItem item1 = mMenu.add(groupId, 1, 0, "item1"); 191 final MenuItem item2 = mMenu.add(groupId, 2, 0, "item2"); 192 193 // Set to exclusive 194 mMenu.setGroupCheckable(groupId, true, true); 195 Assert.assertTrue("Item was not set to checkable", item1.isCheckable()); 196 item1.setChecked(true); 197 Assert.assertTrue("Item did not get checked", item1.isChecked()); 198 Assert.assertFalse("Item was not unchecked due to exclusive checkable", item2.isChecked()); 199 mMenu.findItem(2).setChecked(true); 200 Assert.assertTrue("Item did not get checked", item2.isChecked()); 201 Assert.assertFalse("Item was not unchecked due to exclusive checkable", item1.isChecked()); 202 203 // Multiple non-exlusive checkable items 204 mMenu.setGroupCheckable(groupId, true, false); 205 Assert.assertTrue("Item was not set to checkable", item1.isCheckable()); 206 item1.setChecked(false); 207 Assert.assertFalse("Item did not get unchecked", item1.isChecked()); 208 item1.setChecked(true); 209 Assert.assertTrue("Item did not get checked", item1.isChecked()); 210 mMenu.findItem(2).setChecked(true); 211 Assert.assertTrue("Item did not get checked", item2.isChecked()); 212 Assert.assertTrue("Item was unchecked when it shouldnt have been", item1.isChecked()); 213 } 214 215 @SmallTest testVisibility()216 public void testVisibility() { 217 final MenuItem item1 = mMenu.add(0, 1, 0, "item1"); 218 final MenuItem item2 = mMenu.add(0, 2, 0, "item2"); 219 220 // Should start as visible 221 Assert.assertTrue("Item did not start as visible", item1.isVisible()); 222 Assert.assertTrue("Item did not start as visible", item2.isVisible()); 223 224 // Hide 225 item1.setVisible(false); 226 Assert.assertFalse("Item did not become invisible", item1.isVisible()); 227 mMenu.findItem(2).setVisible(false); 228 Assert.assertFalse("Item did not become invisible", item2.isVisible()); 229 } 230 231 @SmallTest testSubMenu()232 public void testSubMenu() { 233 final SubMenu subMenu = mMenu.addSubMenu(0, 0, 0, "submenu"); 234 final MenuItem subMenuItem = subMenu.getItem(); 235 final MenuItem item1 = subMenu.add(0, 1, 0, "item1"); 236 final MenuItem item2 = subMenu.add(0, 2, 0, "item2"); 237 238 // findItem should recurse into submenus 239 Assert.assertEquals(item1, mMenu.findItem(1)); 240 Assert.assertEquals(item2, mMenu.findItem(2)); 241 } 242 243 @SmallTest testRemove()244 public void testRemove() { 245 final int groupId = 1; 246 final MenuItem item1 = mMenu.add(groupId, 1, 0, "item1"); 247 final MenuItem item2 = mMenu.add(groupId, 2, 0, "item2"); 248 final MenuItem item3 = mMenu.add(groupId, 3, 0, "item3"); 249 final MenuItem item4 = mMenu.add(groupId, 4, 0, "item4"); 250 final MenuItem item5 = mMenu.add(groupId, 5, 0, "item5"); 251 final MenuItem item6 = mMenu.add(0, 6, 0, "item6"); 252 253 Assert.assertEquals(item1, mMenu.findItem(1)); 254 mMenu.removeItemAt(0); 255 Assert.assertNull(mMenu.findItem(1)); 256 257 Assert.assertEquals(item2, mMenu.findItem(2)); 258 mMenu.removeItem(2); 259 Assert.assertNull(mMenu.findItem(2)); 260 261 Assert.assertEquals(item3, mMenu.findItem(3)); 262 Assert.assertEquals(item4, mMenu.findItem(4)); 263 Assert.assertEquals(item5, mMenu.findItem(5)); 264 mMenu.removeGroup(groupId); 265 Assert.assertNull(mMenu.findItem(3)); 266 Assert.assertNull(mMenu.findItem(4)); 267 Assert.assertNull(mMenu.findItem(5)); 268 269 Assert.assertEquals(item6, mMenu.findItem(6)); 270 mMenu.clear(); 271 Assert.assertNull(mMenu.findItem(6)); 272 } 273 makeKeyEvent(int keyCode, int metaState)274 private KeyEvent makeKeyEvent(int keyCode, int metaState) { 275 return new KeyEvent(0L, 0L, KeyEvent.ACTION_DOWN, keyCode, 0, metaState); 276 } 277 } 278