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