8009221: [macosx] Two closed/javax/swing regression tests fail on MacOSX.
Reviewed-by: serb, alexp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JMenu/4515762/bug4515762.java Fri Mar 15 17:02:24 2013 +0400
@@ -0,0 +1,172 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+import sun.awt.SunToolkit;
+
+/**
+ * @test
+ * @bug 4515762
+ * @author Mark Davidson
+ * @summary Tests the ability to support duplicate mnemonics
+ * @library ../../regtesthelpers
+ * @build Util
+ * @run main bug4515762
+ */
+public class bug4515762 {
+
+ private static volatile boolean actionExpected = false;
+ private static volatile boolean actionRecieved = false;
+
+ /**
+ * @param str name of Menu
+ */
+ private static JMenuBar createMenuBar() {
+ JMenuBar menubar = new JMenuBar();
+
+ // Duplicate menu item test for 4515762
+ JMenu menu = new JMenu("Duplicate Menu");
+ menu.setMnemonic('D');
+ menu.add(createMenuItem("Sunday", 'S'));
+ menu.add(createMenuItem("Monday", 'M'));
+
+ menu.add(createMenuItem("Tuesday", 'S'));
+ menu.add(createMenuItem("Wednesday", 'S'));
+ menu.add(createMenuItem("Thursday", 'S'));
+ menu.add(createMenuItem("Friday", 'F'));
+ menu.add(createMenuItem("Saturday", 'S'));
+
+ // Control with unique menu
+ JMenu menu2 = new JMenu("Unique Menu");
+ menu2.setMnemonic('U');
+ menu2.add(createMenuItem("Sunday", 'S'));
+ menu2.add(createMenuItem("Monday", 'M'));
+
+ menu2.add(createMenuItem("Tuesday", 'T'));
+ menu2.add(createMenuItem("Wednesday", 'W'));
+ menu2.add(createMenuItem("Thursday", 'U'));
+ menu2.add(createMenuItem("Friday", 'F'));
+ menu2.add(createMenuItem("Saturday", 'A'));
+
+ menubar.add(menu);
+ menubar.add(menu2);
+
+ return menubar;
+ }
+
+ /**
+ * Creates and returns the menu item.
+ */
+ private static JMenuItem createMenuItem(String name, char mnemonic) {
+ JMenuItem menuItem = new JMenuItem(name, mnemonic);
+ menuItem.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent evt) {
+ JMenuItem item = (JMenuItem) evt.getSource();
+ if (actionExpected == false) {
+ throw new RuntimeException("Menu Action: "
+ + item.getText() + " should not be called");
+ } else {
+ actionRecieved = true;
+ }
+ }
+ });
+
+ return menuItem;
+ }
+
+ public static void checkAction() {
+ if (actionRecieved == true) {
+ actionRecieved = false;
+ } else {
+ throw new RuntimeException("Action has not been received");
+ }
+ }
+
+ public static void main(String[] args) throws Throwable {
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+ Robot robot = new Robot();
+ robot.setAutoDelay(250);
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+
+ @Override
+ public void run() {
+ JFrame frame = new JFrame("Test");
+ frame.setJMenuBar(createMenuBar());
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ frame.pack();
+ frame.setVisible(true);
+ }
+ });
+
+ toolkit.realSync();
+
+ Util.hitMnemonics(robot, KeyEvent.VK_D);
+ toolkit.realSync();
+
+ // Press the S key many times (should not cause an action peformed)
+ int TIMES = 5;
+ for (int i = 0; i < TIMES; i++) {
+ Util.hitKeys(robot, KeyEvent.VK_S);
+ }
+ toolkit.realSync();
+
+ // Unique menu items.
+ actionExpected = true;
+ Util.hitMnemonics(robot, KeyEvent.VK_U);
+
+ robot.keyPress(KeyEvent.VK_S);
+ robot.keyRelease(KeyEvent.VK_S);
+ toolkit.realSync();
+
+ checkAction();
+
+ Util.hitMnemonics(robot, KeyEvent.VK_U);
+ robot.keyPress(KeyEvent.VK_M);
+ robot.keyRelease(KeyEvent.VK_M);
+ toolkit.realSync();
+
+ checkAction();
+
+ Util.hitMnemonics(robot, KeyEvent.VK_U);
+ Util.hitKeys(robot, KeyEvent.VK_T);
+ toolkit.realSync();
+
+ checkAction();
+ Util.hitMnemonics(robot, KeyEvent.VK_U);
+ Util.hitKeys(robot, KeyEvent.VK_W);
+ toolkit.realSync();
+
+ checkAction();
+
+ Util.hitMnemonics(robot, KeyEvent.VK_U);
+ Util.hitKeys(robot, KeyEvent.VK_U);
+ toolkit.realSync();
+
+ checkAction();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JRootPane/4670486/bug4670486.java Fri Mar 15 17:02:24 2013 +0400
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+import sun.awt.SunToolkit;
+
+/**
+ * @test
+ * @bug 4670486
+ * @author Mark Davidson
+ * @summary Regression: Popup menu bindings doesn't work when a default button has been defined.
+ * @library ../../regtesthelpers
+ * @build Util
+ * @run main bug4670486
+ */
+public class bug4670486 {
+
+ public static volatile boolean actionExpected = false;
+ public static volatile boolean actionRecieved = false;
+
+ private static JMenuBar createMenuBar() {
+ JMenuBar menubar = new JMenuBar();
+
+ // Control with unique menu
+ JMenu menu = new JMenu("Unique Menu");
+ menu.setMnemonic('U');
+ menu.add(createMenuItem("Sunday", 'S'));
+ menu.add(createMenuItem("Monday", 'M'));
+
+ menu.add(createMenuItem("Tuesday", 'T'));
+ menu.add(createMenuItem("Wednesday", 'W'));
+ menu.add(createMenuItem("Thursday", 'U'));
+ menu.add(createMenuItem("Friday", 'F'));
+ menu.add(createMenuItem("Saturday", 'A'));
+
+ menubar.add(menu);
+
+ return menubar;
+ }
+
+ private static JPanel createPanel(JFrame frame) {
+ JPanel panel = new JPanel();
+ JButton button = new JButton("Button");
+ JButton button2 = new JButton("Button 2");
+ JButton button3 = new JButton("Button 3");
+
+ JRootPane root = frame.getRootPane();
+ root.setDefaultButton(button);
+
+ panel.add(button);
+ panel.add(button2);
+ panel.add(button3);
+
+ return panel;
+ }
+
+ /**
+ * Creates and returns the menu item.
+ */
+ private static JMenuItem createMenuItem(String name, char mnemonic) {
+ JMenuItem menuItem = new JMenuItem(name, mnemonic);
+ menuItem.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent evt) {
+ actionRecieved = true;
+ }
+ });
+
+ return menuItem;
+ }
+
+ public static void checkAction() {
+ if (actionRecieved == true) {
+ actionRecieved = false;
+ } else {
+ throw new RuntimeException("Action has not been received");
+ }
+ }
+
+ public static void main(String[] args) throws Throwable {
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+ Robot robot = new Robot();
+ robot.setAutoDelay(250);
+
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+
+ @Override
+ public void run() {
+ JFrame frame = new JFrame("Test");
+ frame.setContentPane(createPanel(frame));
+ frame.setJMenuBar(createMenuBar());
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ frame.pack();
+ frame.setVisible(true);
+ }
+ });
+
+ toolkit.realSync();
+
+ // Change the default button to
+ // force a call to BasicRootPaneUI.updateDefaultButtonBindings()
+ Util.hitKeys(robot, KeyEvent.VK_TAB);
+
+ // If the bug exists, then as soon as the menu appears,
+ // the VK_ENTER, VK_DOWN, VK_UP and VK_ESC will have no
+ // effect.
+ Util.hitMnemonics(robot, KeyEvent.VK_U);
+ Util.hitKeys(robot, KeyEvent.VK_ENTER);
+ toolkit.realSync();
+
+ checkAction();
+
+ Util.hitMnemonics(robot, KeyEvent.VK_U);
+ Util.hitKeys(robot, KeyEvent.VK_DOWN);
+ Util.hitKeys(robot, KeyEvent.VK_ENTER);
+ toolkit.realSync();
+
+ checkAction();
+ }
+}
--- a/jdk/test/javax/swing/regtesthelpers/Util.java Thu Mar 14 12:15:17 2013 +0400
+++ b/jdk/test/javax/swing/regtesthelpers/Util.java Fri Mar 15 17:02:24 2013 +0400
@@ -146,6 +146,23 @@
}
/**
+ * Hits mnemonics by robot.
+ */
+ public static void hitMnemonics(Robot robot, int... keys) {
+
+ ArrayList<Integer> mnemonicKeyCodes = getSystemMnemonicKeyCodes();
+ for (Integer mnemonic : mnemonicKeyCodes) {
+ robot.keyPress(mnemonic);
+ }
+
+ hitKeys(robot, keys);
+
+ for (Integer mnemonic : mnemonicKeyCodes) {
+ robot.keyRelease(mnemonic);
+ }
+ }
+
+ /**
* Hits keys by robot.
*/
public static void hitKeys(Robot robot, int... keys) {