19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
171a44d5dcabc18cd5ef111f732ccff91683a1a093Neal Nguyenpackage android.view;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.view.menu.MenuBuilder;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport junit.framework.Assert;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.AndroidTestCase;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.MoreAsserts;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.LargeTest;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.SmallTest;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.KeyEvent;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.Menu;
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.MenuItem;
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.SubMenu;
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
321a44d5dcabc18cd5ef111f732ccff91683a1a093Neal Nguyenimport com.android.frameworks.coretests.R;
331a44d5dcabc18cd5ef111f732ccff91683a1a093Neal Nguyen
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class MenuTest extends AndroidTestCase {
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private MenuBuilder mMenu;
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setUp() throws Exception {
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super.setUp();
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu = new MenuBuilder(super.getContext());
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SmallTest
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testItemId() {
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final int id = 512;
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final MenuItem item = mMenu.add(0, id, 0, "test");
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertEquals(id, item.getItemId());
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertEquals(item, mMenu.findItem(id));
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertEquals(0, mMenu.findItemIndex(id));
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SmallTest
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testGroupId() {
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final int groupId = 541;
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final int item1Index = 1;
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final int item2Index = 3;
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.add(0, 0, item1Index - 1, "ignore");
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final MenuItem item = mMenu.add(groupId, 0, item1Index, "test");
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.add(0, 0, item2Index - 1, "ignore");
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final MenuItem item2 = mMenu.add(groupId, 0, item2Index, "test2");
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertEquals(groupId, item.getGroupId());
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertEquals(groupId, item2.getGroupId());
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertEquals(item1Index, mMenu.findGroupIndex(groupId));
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertEquals(item2Index, mMenu.findGroupIndex(groupId, item1Index + 1));
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SmallTest
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testGroup() {
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // This test does the following
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //  1. Create a grouped item in the menu
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //  2. Check that findGroupIndex() finds the grouped item.
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //  3. Check that findGroupIndex() doesn't find a non-existent group.
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final int GROUP_ONE = Menu.FIRST;
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final int GROUP_TWO = Menu.FIRST + 1;
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.add(GROUP_ONE, 0, 0, "Menu text");
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertEquals(mMenu.findGroupIndex(GROUP_ONE), 0);
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertEquals(mMenu.findGroupIndex(GROUP_TWO), -1);
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //TODO: expand this test case to do multiple groups,
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        //adding and removing, hiding and showing, etc.
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SmallTest
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testIsShortcutWithAlpha() throws Exception {
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.setQwertyMode(true);
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.add(0, 0, 0, "test").setShortcut('2', 'a');
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertTrue(mMenu.isShortcutKey(KeyEvent.KEYCODE_A,
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                              makeKeyEvent(KeyEvent.KEYCODE_A,  0)));
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertFalse(mMenu.isShortcutKey(KeyEvent.KEYCODE_B,
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                               makeKeyEvent(KeyEvent.KEYCODE_B,  0)));
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SmallTest
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testIsShortcutWithNumeric() throws Exception {
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.setQwertyMode(false);
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.add(0, 0, 0, "test").setShortcut('2', 'a');
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertTrue(mMenu.isShortcutKey(KeyEvent.KEYCODE_2,
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                              makeKeyEvent(KeyEvent.KEYCODE_2,  0)));
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertFalse(mMenu.isShortcutKey(KeyEvent.KEYCODE_A,
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                               makeKeyEvent(KeyEvent.KEYCODE_A,  0)));
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SmallTest
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testIsShortcutWithAlt() throws Exception {
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.setQwertyMode(true);
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.add(0, 0, 0, "test").setShortcut('2', 'a');
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertTrue(mMenu.isShortcutKey(KeyEvent.KEYCODE_A,
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                              makeKeyEvent(KeyEvent.KEYCODE_A,
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                           KeyEvent.META_ALT_ON)));
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertFalse(mMenu.isShortcutKey(KeyEvent.KEYCODE_A,
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                              makeKeyEvent(KeyEvent.KEYCODE_A,
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                           KeyEvent.META_SYM_ON)));
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SmallTest
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testIsNotShortcutWithShift() throws Exception {
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.setQwertyMode(true);
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.add(0, 0, 0, "test").setShortcut('2', 'a');
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertFalse(mMenu.isShortcutKey(KeyEvent.KEYCODE_A,
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                              makeKeyEvent(KeyEvent.KEYCODE_A,
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                           KeyEvent.META_SHIFT_ON)));
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SmallTest
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testIsNotShortcutWithSym() throws Exception {
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.setQwertyMode(true);
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.add(0, 0, 0, "test").setShortcut('2', 'a');
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertFalse(mMenu.isShortcutKey(KeyEvent.KEYCODE_A,
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                              makeKeyEvent(KeyEvent.KEYCODE_A,
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                           KeyEvent.META_SYM_ON)));
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SmallTest
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testIsShortcutWithUpperCaseAlpha() throws Exception {
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.setQwertyMode(true);
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.add(0, 0, 0, "test").setShortcut('2', 'A');
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertTrue(mMenu.isShortcutKey(KeyEvent.KEYCODE_A,
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                              makeKeyEvent(KeyEvent.KEYCODE_A,  0)));
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SmallTest
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testIsShortcutWithBackspace() throws Exception {
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.setQwertyMode(true);
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.add(0, 0, 0, "test").setShortcut('2', '\b');
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertTrue(mMenu.isShortcutKey(KeyEvent.KEYCODE_DEL,
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                              makeKeyEvent(KeyEvent.KEYCODE_DEL,  0)));
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SmallTest
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testIsShortcutWithNewline() throws Exception {
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.setQwertyMode(true);
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.add(0, 0, 0, "test").setShortcut('2', '\n');
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertTrue(mMenu.isShortcutKey(KeyEvent.KEYCODE_ENTER,
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                              makeKeyEvent(KeyEvent.KEYCODE_ENTER,  0)));
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SmallTest
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testOrder() {
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final String a = "a", b = "b", c = "c";
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final int firstOrder = 7, midOrder = 8, lastOrder = 9;
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.add(0, 0, lastOrder, c);
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.add(0, 0, firstOrder, a);
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.add(0, 0, midOrder, b);
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertEquals(firstOrder, mMenu.getItem(0).getOrder());
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertEquals(a, mMenu.getItem(0).getTitle());
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertEquals(midOrder, mMenu.getItem(1).getOrder());
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertEquals(b, mMenu.getItem(1).getTitle());
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertEquals(lastOrder, mMenu.getItem(2).getOrder());
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertEquals(c, mMenu.getItem(2).getTitle());
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SmallTest
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testTitle() {
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final String title = "test";
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final MenuItem stringItem = mMenu.add(title);
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final MenuItem resItem = mMenu.add(R.string.menu_test);
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertEquals(title, stringItem.getTitle());
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertEquals(getContext().getResources().getString(R.string.menu_test), resItem
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                .getTitle());
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SmallTest
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testCheckable() {
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final int groupId = 1;
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final MenuItem item1 = mMenu.add(groupId, 1, 0, "item1");
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final MenuItem item2 = mMenu.add(groupId, 2, 0, "item2");
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Set to exclusive
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.setGroupCheckable(groupId, true, true);
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertTrue("Item was not set to checkable", item1.isCheckable());
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        item1.setChecked(true);
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertTrue("Item did not get checked", item1.isChecked());
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertFalse("Item was not unchecked due to exclusive checkable", item2.isChecked());
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.findItem(2).setChecked(true);
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertTrue("Item did not get checked", item2.isChecked());
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertFalse("Item was not unchecked due to exclusive checkable", item1.isChecked());
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Multiple non-exlusive checkable items
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.setGroupCheckable(groupId, true, false);
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertTrue("Item was not set to checkable", item1.isCheckable());
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        item1.setChecked(false);
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertFalse("Item did not get unchecked", item1.isChecked());
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        item1.setChecked(true);
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertTrue("Item did not get checked", item1.isChecked());
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.findItem(2).setChecked(true);
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertTrue("Item did not get checked", item2.isChecked());
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertTrue("Item was unchecked when it shouldnt have been", item1.isChecked());
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SmallTest
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testVisibility() {
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final MenuItem item1 = mMenu.add(0, 1, 0, "item1");
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final MenuItem item2 = mMenu.add(0, 2, 0, "item2");
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Should start as visible
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertTrue("Item did not start as visible", item1.isVisible());
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertTrue("Item did not start as visible", item2.isVisible());
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Hide
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        item1.setVisible(false);
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertFalse("Item did not become invisible", item1.isVisible());
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.findItem(2).setVisible(false);
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertFalse("Item did not become invisible", item2.isVisible());
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SmallTest
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testSubMenu() {
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final SubMenu subMenu = mMenu.addSubMenu(0, 0, 0, "submenu");
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final MenuItem subMenuItem = subMenu.getItem();
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final MenuItem item1 = subMenu.add(0, 1, 0, "item1");
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final MenuItem item2 = subMenu.add(0, 2, 0, "item2");
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // findItem should recurse into submenus
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertEquals(item1, mMenu.findItem(1));
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertEquals(item2, mMenu.findItem(2));
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SmallTest
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testRemove() {
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final int groupId = 1;
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final MenuItem item1 = mMenu.add(groupId, 1, 0, "item1");
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final MenuItem item2 = mMenu.add(groupId, 2, 0, "item2");
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final MenuItem item3 = mMenu.add(groupId, 3, 0, "item3");
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final MenuItem item4 = mMenu.add(groupId, 4, 0, "item4");
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final MenuItem item5 = mMenu.add(groupId, 5, 0, "item5");
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final MenuItem item6 = mMenu.add(0, 6, 0, "item6");
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertEquals(item1, mMenu.findItem(1));
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.removeItemAt(0);
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertNull(mMenu.findItem(1));
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertEquals(item2, mMenu.findItem(2));
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.removeItem(2);
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertNull(mMenu.findItem(2));
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertEquals(item3, mMenu.findItem(3));
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertEquals(item4, mMenu.findItem(4));
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertEquals(item5, mMenu.findItem(5));
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.removeGroup(groupId);
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertNull(mMenu.findItem(3));
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertNull(mMenu.findItem(4));
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertNull(mMenu.findItem(5));
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertEquals(item6, mMenu.findItem(6));
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenu.clear();
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Assert.assertNull(mMenu.findItem(6));
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private KeyEvent makeKeyEvent(int keyCode, int metaState) {
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return new KeyEvent(0L, 0L, KeyEvent.ACTION_DOWN, keyCode, 0, metaState);
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
280