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

Reply via email to