Revision: 8211
Author: jlaba...@google.com
Date: Wed May 26 03:15:17 2010
Log: Added null checks to MenuItem.setSubMenu(null) so it doesn't throw an
NPE. Also made sure that the Accessibility HASPOPUP state is set to false
when the submenu is removed.
http://code.google.com/p/google-web-toolkit/issues/detail?id=4756
http://gwt-code-reviews.appspot.com/556801
http://code.google.com/p/google-web-toolkit/source/detail?r=8211
Added:
/branches/2.1/user/test/com/google/gwt/user/client/ui/MenuItemTest.java
Modified:
/branches/2.1/user/src/com/google/gwt/user/client/ui/MenuItem.java
/branches/2.1/user/test/com/google/gwt/user/UISuite.java
=======================================
--- /dev/null
+++ /branches/2.1/user/test/com/google/gwt/user/client/ui/MenuItemTest.java
Wed May 26 03:15:17 2010
@@ -0,0 +1,100 @@
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * 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 com.google.gwt.user.client.ui;
+
+import com.google.gwt.junit.client.GWTTestCase;
+import com.google.gwt.user.client.Command;
+
+/**
+ * Tests for {...@link MenuItem}.
+ */
+public class MenuItemTest extends GWTTestCase {
+
+ @Override
+ public String getModuleName() {
+ return "com.google.gwt.user.UserTest";
+ }
+
+ public void testSetCommandWithMenuBar() {
+ Command command = new Command() {
+ public void execute() {
+ }
+ };
+ MenuBar bar = new MenuBar();
+ MenuItem item = bar.addItem("test", command);
+ assertEquals(command, item.getCommand());
+
+ item.setCommand(null);
+ assertNull(item.getCommand());
+
+ item.setCommand(command);
+ assertEquals(command, item.getCommand());
+ }
+
+ public void testSetCommandWithoutMenuBar() {
+ Command command = new Command() {
+ public void execute() {
+ }
+ };
+ MenuItem item = new MenuItem("test", command);
+ assertEquals(command, item.getCommand());
+
+ item.setCommand(null);
+ assertNull(item.getCommand());
+
+ item.setCommand(command);
+ assertEquals(command, item.getCommand());
+ }
+
+ public void testSetSubMenuWithMenuBar() {
+ MenuBar bar = new MenuBar();
+ MenuBar submenu = new MenuBar();
+ MenuItem item = bar.addItem("test", submenu);
+ assertEquals(submenu, item.getSubMenu());
+ assertEquals(-1, FocusPanel.impl.getTabIndex(submenu.getElement()));
+ assertEquals("true", Accessibility.getState(item.getElement(),
+ Accessibility.STATE_HASPOPUP));
+
+ item.setSubMenu(null);
+ assertNull(item.getSubMenu());
+ assertEquals("false", Accessibility.getState(item.getElement(),
+ Accessibility.STATE_HASPOPUP));
+
+ item.setSubMenu(submenu);
+ assertEquals(submenu, item.getSubMenu());
+ assertEquals("true", Accessibility.getState(item.getElement(),
+ Accessibility.STATE_HASPOPUP));
+ }
+
+ public void testSetSubMenuWithoutMenuBar() {
+ MenuBar submenu = new MenuBar();
+ MenuItem item = new MenuItem("test", submenu);
+ assertEquals(submenu, item.getSubMenu());
+ assertEquals(-1, FocusPanel.impl.getTabIndex(submenu.getElement()));
+ assertEquals("true", Accessibility.getState(item.getElement(),
+ Accessibility.STATE_HASPOPUP));
+
+ item.setSubMenu(null);
+ assertNull(item.getSubMenu());
+ assertEquals("false", Accessibility.getState(item.getElement(),
+ Accessibility.STATE_HASPOPUP));
+
+ item.setSubMenu(submenu);
+ assertEquals(submenu, item.getSubMenu());
+ assertEquals("true", Accessibility.getState(item.getElement(),
+ Accessibility.STATE_HASPOPUP));
+ }
+}
=======================================
--- /branches/2.1/user/src/com/google/gwt/user/client/ui/MenuItem.java Wed
Apr 29 13:23:39 2009
+++ /branches/2.1/user/src/com/google/gwt/user/client/ui/MenuItem.java Wed
May 26 03:15:17 2010
@@ -155,12 +155,19 @@
this.parentMenu.updateSubmenuIcon(this);
}
- // Change tab index from 0 to -1, because only the root menu is
supposed to
- // be in the tab order
- FocusPanel.impl.setTabIndex(subMenu.getElement(), -1);
-
- // Update a11y role "haspopup"
- Accessibility.setState(this.getElement(),
Accessibility.STATE_HASPOPUP, "true");
+ if (subMenu != null) {
+ // Change tab index from 0 to -1, because only the root menu is
supposed
+ // to be in the tab order
+ FocusPanel.impl.setTabIndex(subMenu.getElement(), -1);
+
+ // Update a11y role "haspopup"
+ Accessibility.setState(this.getElement(),
Accessibility.STATE_HASPOPUP,
+ "true");
+ } else {
+ // Update a11y role "haspopup"
+ Accessibility.setState(this.getElement(),
Accessibility.STATE_HASPOPUP,
+ "false");
+ }
}
public void setText(String text) {
=======================================
--- /branches/2.1/user/test/com/google/gwt/user/UISuite.java Mon Feb 8
10:51:53 2010
+++ /branches/2.1/user/test/com/google/gwt/user/UISuite.java Wed May 26
03:15:17 2010
@@ -65,6 +65,7 @@
import com.google.gwt.user.client.ui.LinearPanelTest;
import com.google.gwt.user.client.ui.ListBoxTest;
import com.google.gwt.user.client.ui.MenuBarTest;
+import com.google.gwt.user.client.ui.MenuItemTest;
import com.google.gwt.user.client.ui.NamedFrameTest;
import com.google.gwt.user.client.ui.PopupTest;
import com.google.gwt.user.client.ui.PrefixTreeTest;
@@ -157,6 +158,7 @@
suite.addTestSuite(LinearPanelTest.class);
suite.addTestSuite(ListBoxTest.class);
suite.addTestSuite(MenuBarTest.class);
+ suite.addTestSuite(MenuItemTest.class);
suite.addTestSuite(NamedFrameTest.class);
suite.addTestSuite(PopupTest.class);
suite.addTestSuite(PrefixTreeTest.class);
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors