blob: 6007730906457568b386e7d51368fb9887b1dd50 [file] [log] [blame]
/*
* Copyright (C) 2008 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.cts;
import com.android.cts.view.R;
import com.android.internal.view.menu.MenuBuilder;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.cts.util.WidgetTestUtils;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.test.ActivityInstrumentationTestCase2;
import android.test.UiThreadTest;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.SubMenu;
/**
* Test {@link MenuInflater}.
*/
public class MenuInflaterTest extends ActivityInstrumentationTestCase2<MenuInflaterCtsActivity> {
private MenuInflater mMenuInflater;
private Activity mActivity;
public MenuInflaterTest() {
super("com.android.cts.view", MenuInflaterCtsActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
mActivity = getActivity();
}
@UiThreadTest
public void testConstructor() {
new MenuInflater(mActivity);
}
@UiThreadTest
public void testInflate() {
Menu menu = new MenuBuilder(mActivity);
assertEquals(0, menu.size());
if (mMenuInflater == null) {
mMenuInflater = mActivity.getMenuInflater();
}
mMenuInflater.inflate(com.android.cts.view.R.menu.browser, menu);
assertNotNull(menu);
assertEquals(1, menu.size());
try {
mMenuInflater.inflate(0, menu);
fail("should throw Resources.NotFoundException");
} catch (Resources.NotFoundException e) {
}
try {
mMenuInflater.inflate(com.android.cts.view.R.menu.browser, null);
fail("should throw NullPointerException");
} catch (NullPointerException e) {
}
}
// Check wheher the objects are created correctly from xml files
@UiThreadTest
public void testInflateFromXml(){
if (mMenuInflater == null) {
mMenuInflater = mActivity.getMenuInflater();
}
// the visibility and shortcut
Menu menu = new MenuBuilder(mActivity);
mMenuInflater.inflate(R.menu.visible_shortcut, menu);
assertTrue(menu.findItem(R.id.visible_item).isVisible());
assertEquals('a', menu.findItem(R.id.visible_item).getAlphabeticShortcut());
assertFalse(menu.findItem(R.id.hidden_item).isVisible());
assertEquals('b', menu.findItem(R.id.hidden_item).getAlphabeticShortcut());
assertEquals(R.id.hidden_group, menu.findItem(R.id.hidden_by_group).getGroupId());
assertFalse(menu.findItem(R.id.hidden_by_group).isVisible());
assertEquals('c', menu.findItem(R.id.hidden_by_group).getAlphabeticShortcut());
// the titles and icons
menu = new MenuBuilder(mActivity);
mMenuInflater.inflate(com.android.cts.view.R.menu.title_icon, menu);
assertEquals("Start", menu.findItem(R.id.start).getTitle());
assertIconUsingDrawableRes((BitmapDrawable) menu.findItem(R.id.start).getIcon(),
R.drawable.start);
assertEquals("Pass", menu.findItem(R.id.pass).getTitle());
assertIconUsingDrawableRes((BitmapDrawable) menu.findItem(R.id.pass).getIcon(),
R.drawable.pass);
assertEquals("Failed", menu.findItem(R.id.failed).getTitle());
assertIconUsingDrawableRes((BitmapDrawable) menu.findItem(R.id.failed).getIcon(),
R.drawable.failed);
// the orders and categories
menu = new MenuBuilder(mActivity);
mMenuInflater.inflate(com.android.cts.view.R.menu.category_order, menu);
// default category
assertEquals(R.id.most_used_items, menu.findItem(R.id.first_most_item).getGroupId());
assertEquals(1, menu.findItem(R.id.first_most_item).getOrder());
assertEquals(R.id.most_used_items, menu.findItem(R.id.middle_most_item).getGroupId());
assertEquals(3, menu.findItem(R.id.middle_most_item).getOrder());
assertEquals(R.id.most_used_items, menu.findItem(R.id.last_most_item).getGroupId());
assertEquals(5, menu.findItem(R.id.last_most_item).getOrder());
// specific category (CATEGORY_SECONDARY)
assertEquals(R.id.least_used_items, menu.findItem(R.id.first_least_item).getGroupId());
assertEquals(Menu.CATEGORY_SECONDARY + 0, menu.findItem(R.id.first_least_item).getOrder());
assertEquals(R.id.least_used_items, menu.findItem(R.id.middle_least_item).getGroupId());
assertEquals(Menu.CATEGORY_SECONDARY + 2,
menu.findItem(R.id.middle_least_item).getOrder());
assertEquals(R.id.least_used_items, menu.findItem(R.id.last_least_item).getGroupId());
assertEquals(Menu.CATEGORY_SECONDARY + 4, menu.findItem(R.id.last_least_item).getOrder());
// the checkables
menu = new MenuBuilder(mActivity);
mMenuInflater.inflate(com.android.cts.view.R.menu.checkable, menu);
// noncheckables
assertEquals(R.id.noncheckable_group,
menu.findItem(R.id.noncheckable_item_1).getGroupId());
assertFalse(menu.findItem(R.id.noncheckable_item_1).isCheckable());
assertEquals(R.id.noncheckable_group,
menu.findItem(R.id.noncheckable_item_2).getGroupId());
assertFalse(menu.findItem(R.id.noncheckable_item_2).isCheckable());
assertEquals(R.id.noncheckable_group,
menu.findItem(R.id.noncheckable_item_3).getGroupId());
assertFalse(menu.findItem(R.id.noncheckable_item_3).isCheckable());
// multiple checkables (item 2 and item 3 are both checked)
assertEquals(R.id.checkable_group, menu.findItem(R.id.checkable_item_1).getGroupId());
assertTrue(menu.findItem(R.id.checkable_item_1).isCheckable());
assertFalse(menu.findItem(R.id.checkable_item_1).isChecked());
assertEquals(R.id.checkable_group, menu.findItem(R.id.checkable_item_3).getGroupId());
assertTrue(menu.findItem(R.id.checkable_item_2).isCheckable());
assertTrue(menu.findItem(R.id.checkable_item_2).isChecked());
assertEquals(R.id.checkable_group, menu.findItem(R.id.checkable_item_2).getGroupId());
assertTrue(menu.findItem(R.id.checkable_item_3).isCheckable());
assertTrue(menu.findItem(R.id.checkable_item_3).isChecked());
// make item 1 checked and item 2 and item 3 will remain checked
menu.findItem(R.id.checkable_item_1).setChecked(true);
assertTrue(menu.findItem(R.id.checkable_item_1).isChecked());
assertTrue(menu.findItem(R.id.checkable_item_2).isChecked());
assertTrue(menu.findItem(R.id.checkable_item_3).isChecked());
// exclusive checkables (only item 3 is checked)
assertEquals(R.id.exclusive_checkable_group,
menu.findItem(R.id.exclusive_checkable_item_1).getGroupId());
assertTrue(menu.findItem(R.id.exclusive_checkable_item_1).isCheckable());
assertFalse(menu.findItem(R.id.exclusive_checkable_item_1).isChecked());
assertEquals(R.id.exclusive_checkable_group,
menu.findItem(R.id.exclusive_checkable_item_3).getGroupId());
assertTrue(menu.findItem(R.id.exclusive_checkable_item_2).isCheckable());
assertFalse(menu.findItem(R.id.exclusive_checkable_item_2).isChecked());
assertEquals(R.id.exclusive_checkable_group,
menu.findItem(R.id.exclusive_checkable_item_2).getGroupId());
assertTrue(menu.findItem(R.id.exclusive_checkable_item_3).isCheckable());
assertTrue(menu.findItem(R.id.exclusive_checkable_item_3).isChecked());
// make item 1 checked and item 3 will be unchecked
menu.findItem(R.id.exclusive_checkable_item_1).setChecked(true);
assertTrue(menu.findItem(R.id.exclusive_checkable_item_1).isChecked());
assertFalse(menu.findItem(R.id.exclusive_checkable_item_2).isChecked());
assertFalse(menu.findItem(R.id.exclusive_checkable_item_3).isChecked());
// checkables without group (all in a sub menu)
SubMenu subMenu = menu.findItem(R.id.submenu).getSubMenu();
assertNotNull(subMenu);
assertTrue(subMenu.findItem(R.id.nongroup_checkable_item_1).isCheckable());
assertFalse(subMenu.findItem(R.id.nongroup_checkable_item_1).isChecked());
assertTrue(subMenu.findItem(R.id.nongroup_checkable_item_2).isCheckable());
assertTrue(subMenu.findItem(R.id.nongroup_checkable_item_2).isChecked());
assertTrue(subMenu.findItem(R.id.nongroup_checkable_item_3).isCheckable());
assertTrue(subMenu.findItem(R.id.nongroup_checkable_item_3).isChecked());
// make item 1 checked and item 2 and item 3 will remain checked
subMenu.findItem(R.id.nongroup_checkable_item_1).setChecked(true);
assertTrue(menu.findItem(R.id.nongroup_checkable_item_1).isChecked());
assertTrue(menu.findItem(R.id.nongroup_checkable_item_2).isChecked());
assertTrue(menu.findItem(R.id.nongroup_checkable_item_3).isChecked());
}
public void assertIconUsingDrawableRes(BitmapDrawable b, int resId) {
Bitmap expected = BitmapFactory.decodeResource(mActivity.getResources(), resId);
WidgetTestUtils.assertEquals(expected, b.getBitmap());
}
}