alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Android example source code file (MenuTest.java)

This example Android source code file (MenuTest.java) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Android by Example" TM.

Java - Android tags/keywords

android, androidtestcase, exception, group_one, group_two, item, keyevent, menu, menubuilder, menuitem, menutest, smalltest, string, submenu, test, ui, view

The MenuTest.java Android example source code

/*
 * 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);
    }
}

Other Android examples (source code examples)

Here is a short list of links related to this Android MenuTest.java source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.