• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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