diff options
Diffstat (limited to 'core/tests/coretests/src/android/view/MenuTest.java')
-rw-r--r-- | core/tests/coretests/src/android/view/MenuTest.java | 279 |
1 files changed, 279 insertions, 0 deletions
diff --git a/core/tests/coretests/src/android/view/MenuTest.java b/core/tests/coretests/src/android/view/MenuTest.java new file mode 100644 index 0000000..e8a8438 --- /dev/null +++ b/core/tests/coretests/src/android/view/MenuTest.java @@ -0,0 +1,279 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.view; + +import com.android.internal.view.menu.MenuBuilder; + +import junit.framework.Assert; + +import android.test.AndroidTestCase; +import android.test.MoreAsserts; +import android.test.suitebuilder.annotation.LargeTest; +import android.test.suitebuilder.annotation.SmallTest; +import android.view.KeyEvent; +import android.view.Menu; +import android.view.MenuItem; +import android.view.SubMenu; + +import com.android.frameworks.coretests.R; + +public class MenuTest extends AndroidTestCase { + + private MenuBuilder mMenu; + + public void setUp() throws Exception { + super.setUp(); + mMenu = new MenuBuilder(super.getContext()); + } + + @SmallTest + public void testItemId() { + final int id = 512; + final MenuItem item = mMenu.add(0, id, 0, "test"); + + Assert.assertEquals(id, item.getItemId()); + Assert.assertEquals(item, mMenu.findItem(id)); + Assert.assertEquals(0, mMenu.findItemIndex(id)); + } + + @SmallTest + public void testGroupId() { + final int groupId = 541; + final int item1Index = 1; + final int item2Index = 3; + + mMenu.add(0, 0, item1Index - 1, "ignore"); + final MenuItem item = mMenu.add(groupId, 0, item1Index, "test"); + mMenu.add(0, 0, item2Index - 1, "ignore"); + final MenuItem item2 = mMenu.add(groupId, 0, item2Index, "test2"); + + Assert.assertEquals(groupId, item.getGroupId()); + Assert.assertEquals(groupId, item2.getGroupId()); + Assert.assertEquals(item1Index, mMenu.findGroupIndex(groupId)); + Assert.assertEquals(item2Index, mMenu.findGroupIndex(groupId, item1Index + 1)); + } + + @SmallTest + public void testGroup() { + // This test does the following + // 1. Create a grouped item in the menu + // 2. Check that findGroupIndex() finds the grouped item. + // 3. Check that findGroupIndex() doesn't find a non-existent group. + + final int GROUP_ONE = Menu.FIRST; + final int GROUP_TWO = Menu.FIRST + 1; + + mMenu.add(GROUP_ONE, 0, 0, "Menu text"); + Assert.assertEquals(mMenu.findGroupIndex(GROUP_ONE), 0); + Assert.assertEquals(mMenu.findGroupIndex(GROUP_TWO), -1); + //TODO: expand this test case to do multiple groups, + //adding and removing, hiding and showing, etc. + } + + @SmallTest + public void testIsShortcutWithAlpha() throws Exception { + mMenu.setQwertyMode(true); + mMenu.add(0, 0, 0, "test").setShortcut('2', 'a'); + Assert.assertTrue(mMenu.isShortcutKey(KeyEvent.KEYCODE_A, + makeKeyEvent(KeyEvent.KEYCODE_A, 0))); + Assert.assertFalse(mMenu.isShortcutKey(KeyEvent.KEYCODE_B, + makeKeyEvent(KeyEvent.KEYCODE_B, 0))); + } + + @SmallTest + public void testIsShortcutWithNumeric() throws Exception { + mMenu.setQwertyMode(false); + mMenu.add(0, 0, 0, "test").setShortcut('2', 'a'); + Assert.assertTrue(mMenu.isShortcutKey(KeyEvent.KEYCODE_2, + makeKeyEvent(KeyEvent.KEYCODE_2, 0))); + Assert.assertFalse(mMenu.isShortcutKey(KeyEvent.KEYCODE_A, + makeKeyEvent(KeyEvent.KEYCODE_A, 0))); + } + + @SmallTest + public void testIsShortcutWithAlt() throws Exception { + mMenu.setQwertyMode(true); + mMenu.add(0, 0, 0, "test").setShortcut('2', 'a'); + Assert.assertTrue(mMenu.isShortcutKey(KeyEvent.KEYCODE_A, + makeKeyEvent(KeyEvent.KEYCODE_A, + KeyEvent.META_ALT_ON))); + Assert.assertFalse(mMenu.isShortcutKey(KeyEvent.KEYCODE_A, + makeKeyEvent(KeyEvent.KEYCODE_A, + KeyEvent.META_SYM_ON))); + } + + @SmallTest + public void testIsNotShortcutWithShift() throws Exception { + mMenu.setQwertyMode(true); + mMenu.add(0, 0, 0, "test").setShortcut('2', 'a'); + Assert.assertFalse(mMenu.isShortcutKey(KeyEvent.KEYCODE_A, + makeKeyEvent(KeyEvent.KEYCODE_A, + KeyEvent.META_SHIFT_ON))); + } + + @SmallTest + public void testIsNotShortcutWithSym() throws Exception { + mMenu.setQwertyMode(true); + mMenu.add(0, 0, 0, "test").setShortcut('2', 'a'); + Assert.assertFalse(mMenu.isShortcutKey(KeyEvent.KEYCODE_A, + makeKeyEvent(KeyEvent.KEYCODE_A, + KeyEvent.META_SYM_ON))); + } + + @SmallTest + public void testIsShortcutWithUpperCaseAlpha() throws Exception { + mMenu.setQwertyMode(true); + mMenu.add(0, 0, 0, "test").setShortcut('2', 'A'); + Assert.assertTrue(mMenu.isShortcutKey(KeyEvent.KEYCODE_A, + makeKeyEvent(KeyEvent.KEYCODE_A, 0))); + } + + @SmallTest + public void testIsShortcutWithBackspace() throws Exception { + mMenu.setQwertyMode(true); + mMenu.add(0, 0, 0, "test").setShortcut('2', '\b'); + Assert.assertTrue(mMenu.isShortcutKey(KeyEvent.KEYCODE_DEL, + makeKeyEvent(KeyEvent.KEYCODE_DEL, 0))); + } + + @SmallTest + public void testIsShortcutWithNewline() throws Exception { + mMenu.setQwertyMode(true); + mMenu.add(0, 0, 0, "test").setShortcut('2', '\n'); + Assert.assertTrue(mMenu.isShortcutKey(KeyEvent.KEYCODE_ENTER, + makeKeyEvent(KeyEvent.KEYCODE_ENTER, 0))); + } + + @SmallTest + public void testOrder() { + final String a = "a", b = "b", c = "c"; + final int firstOrder = 7, midOrder = 8, lastOrder = 9; + + mMenu.add(0, 0, lastOrder, c); + mMenu.add(0, 0, firstOrder, a); + mMenu.add(0, 0, midOrder, b); + + Assert.assertEquals(firstOrder, mMenu.getItem(0).getOrder()); + Assert.assertEquals(a, mMenu.getItem(0).getTitle()); + Assert.assertEquals(midOrder, mMenu.getItem(1).getOrder()); + Assert.assertEquals(b, mMenu.getItem(1).getTitle()); + Assert.assertEquals(lastOrder, mMenu.getItem(2).getOrder()); + Assert.assertEquals(c, mMenu.getItem(2).getTitle()); + } + + @SmallTest + public void testTitle() { + final String title = "test"; + final MenuItem stringItem = mMenu.add(title); + final MenuItem resItem = mMenu.add(R.string.menu_test); + + Assert.assertEquals(title, stringItem.getTitle()); + Assert.assertEquals(getContext().getResources().getString(R.string.menu_test), resItem + .getTitle()); + } + + @SmallTest + public void testCheckable() { + final int groupId = 1; + final MenuItem item1 = mMenu.add(groupId, 1, 0, "item1"); + final MenuItem item2 = mMenu.add(groupId, 2, 0, "item2"); + + // Set to exclusive + mMenu.setGroupCheckable(groupId, true, true); + Assert.assertTrue("Item was not set to checkable", item1.isCheckable()); + item1.setChecked(true); + Assert.assertTrue("Item did not get checked", item1.isChecked()); + Assert.assertFalse("Item was not unchecked due to exclusive checkable", item2.isChecked()); + mMenu.findItem(2).setChecked(true); + Assert.assertTrue("Item did not get checked", item2.isChecked()); + Assert.assertFalse("Item was not unchecked due to exclusive checkable", item1.isChecked()); + + // Multiple non-exlusive checkable items + mMenu.setGroupCheckable(groupId, true, false); + Assert.assertTrue("Item was not set to checkable", item1.isCheckable()); + item1.setChecked(false); + Assert.assertFalse("Item did not get unchecked", item1.isChecked()); + item1.setChecked(true); + Assert.assertTrue("Item did not get checked", item1.isChecked()); + mMenu.findItem(2).setChecked(true); + Assert.assertTrue("Item did not get checked", item2.isChecked()); + Assert.assertTrue("Item was unchecked when it shouldnt have been", item1.isChecked()); + } + + @SmallTest + public void testVisibility() { + final MenuItem item1 = mMenu.add(0, 1, 0, "item1"); + final MenuItem item2 = mMenu.add(0, 2, 0, "item2"); + + // Should start as visible + Assert.assertTrue("Item did not start as visible", item1.isVisible()); + Assert.assertTrue("Item did not start as visible", item2.isVisible()); + + // Hide + item1.setVisible(false); + Assert.assertFalse("Item did not become invisible", item1.isVisible()); + mMenu.findItem(2).setVisible(false); + Assert.assertFalse("Item did not become invisible", item2.isVisible()); + } + + @SmallTest + public void testSubMenu() { + final SubMenu subMenu = mMenu.addSubMenu(0, 0, 0, "submenu"); + final MenuItem subMenuItem = subMenu.getItem(); + final MenuItem item1 = subMenu.add(0, 1, 0, "item1"); + final MenuItem item2 = subMenu.add(0, 2, 0, "item2"); + + // findItem should recurse into submenus + Assert.assertEquals(item1, mMenu.findItem(1)); + Assert.assertEquals(item2, mMenu.findItem(2)); + } + + @SmallTest + public void testRemove() { + final int groupId = 1; + final MenuItem item1 = mMenu.add(groupId, 1, 0, "item1"); + final MenuItem item2 = mMenu.add(groupId, 2, 0, "item2"); + final MenuItem item3 = mMenu.add(groupId, 3, 0, "item3"); + final MenuItem item4 = mMenu.add(groupId, 4, 0, "item4"); + final MenuItem item5 = mMenu.add(groupId, 5, 0, "item5"); + final MenuItem item6 = mMenu.add(0, 6, 0, "item6"); + + Assert.assertEquals(item1, mMenu.findItem(1)); + mMenu.removeItemAt(0); + Assert.assertNull(mMenu.findItem(1)); + + Assert.assertEquals(item2, mMenu.findItem(2)); + mMenu.removeItem(2); + Assert.assertNull(mMenu.findItem(2)); + + Assert.assertEquals(item3, mMenu.findItem(3)); + Assert.assertEquals(item4, mMenu.findItem(4)); + Assert.assertEquals(item5, mMenu.findItem(5)); + mMenu.removeGroup(groupId); + Assert.assertNull(mMenu.findItem(3)); + Assert.assertNull(mMenu.findItem(4)); + Assert.assertNull(mMenu.findItem(5)); + + Assert.assertEquals(item6, mMenu.findItem(6)); + mMenu.clear(); + Assert.assertNull(mMenu.findItem(6)); + } + + private KeyEvent makeKeyEvent(int keyCode, int metaState) { + return new KeyEvent(0L, 0L, KeyEvent.ACTION_DOWN, keyCode, 0, metaState); + } +} |