提交 142b6b6c 编写于 作者: K kshefov

8017180: [macosx] [TEST_BUG] alt-key doesn't work on macos for menu

Reviewed-by: alexsch, serb
Contributed-by: vera.akulova@oracle.com
上级 6b747c73
/*
* 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.
*/
/*
@test
@bug 4476629
@library ../../../../javax/swing/regtesthelpers
@build Util
@summary KeyEvents dispatched to old focus owner that is no longer showing
@author son@sparc.spb.su: area=awt.focus
@run main KeyEventForBadFocusOwnerTest
*/
/**
* KeyEventForBadFocusOwnerTest.java
*
* summary: KeyEvents dispatched to old focus owner that is no longer showing
*/
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import sun.awt.SunToolkit;
public class KeyEventForBadFocusOwnerTest {
final static String ITEM_ONE_TEXT = "one";
final static String ITEM_TWO_TEXT = "two";
volatile static boolean itemOneSelected = false;
volatile static boolean itemTwoSelected = false;
volatile static boolean unexpectedItemSelected = false;
static Robot robot;
static SunToolkit toolkit;
public static void main(String[] args) throws Exception {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
JFrame frame = new JFrame("TEST");
JMenuBar mb = new JMenuBar();
JMenu one = new JMenu(ITEM_ONE_TEXT);
JMenu two = new JMenu(ITEM_TWO_TEXT);
mb.add(one);
mb.add(two);
ActionListener al = new ActionListener() {
public void actionPerformed(ActionEvent ae) {
String itemText = ((JMenuItem)ae.getSource()).getText();
System.out.println("--> " + itemText);
unexpectedItemSelected = true;
}
};
one.setMnemonic(KeyEvent.VK_O);
JMenuItem item = new JMenuItem("one 1");
item.setMnemonic(KeyEvent.VK_O);
item.addActionListener(al);
one.add(item);
one.add("two");
one.add("three");
two.setMnemonic(KeyEvent.VK_T);
item = new JMenuItem("two 2");
item.setMnemonic(KeyEvent.VK_T);
item.addActionListener(al);
two.add(item);
two.add("three");
two.add("four");
PopupMenuListener popupMenuListener = new PopupMenuListener() {
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
System.out.print(e);
System.out.print(e.getSource());
String itemText = ((JPopupMenu)e.getSource()).getName();
System.out.println("Menu " + itemText + "is opened.");
switch(itemText) {
case ITEM_ONE_TEXT:
itemOneSelected = true;
break;
case ITEM_TWO_TEXT:
itemTwoSelected = true;
break;
}
}
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {}
public void popupMenuCanceled(PopupMenuEvent e) {}
};
one.getPopupMenu().setName(ITEM_ONE_TEXT);
two.getPopupMenu().setName(ITEM_TWO_TEXT);
one.getPopupMenu().addPopupMenuListener(popupMenuListener);
two.getPopupMenu().addPopupMenuListener(popupMenuListener);
frame.setJMenuBar(mb);
frame.setSize(100,100);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
});
toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
toolkit.realSync();
robot = new Robot();
robot.setAutoDelay(100);
Util.hitMnemonics(robot, KeyEvent.VK_O);
Util.hitMnemonics(robot, KeyEvent.VK_T);
toolkit.realSync();
Thread.sleep(1000); // workaround for MacOS
if (unexpectedItemSelected) {
throw new Exception("Test failed. KeyEvent dispatched to old focus owner. ");
}
if (!itemOneSelected || !itemTwoSelected) {
throw new Exception("Not all expected events were received");
}
}
}
/*
* 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.
*/
/* @test
@bug 4171437
@library ../../regtesthelpers
@build Util
@author Georges Saab
@run main bug4171437
*/
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.event.*;
import sun.awt.SunToolkit;
public class bug4171437 {
static volatile boolean closeActivated = false;
static volatile boolean customActivated = false;
public static void main(String[] args) throws Exception {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
createAndShowGUI();
}
});
SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
toolkit.realSync();
Robot robot = new Robot();
robot.setAutoDelay(50);
Util.hitMnemonics(robot, KeyEvent.VK_F);
Util.hitKeys(robot, KeyEvent.VK_C);
toolkit.realSync();
Thread.sleep(1000);
if (!closeActivated || customActivated) {
throw new RuntimeException("Didn't pass the muster");
}
}
public static void createAndShowGUI() {
JMenuBar menubar = new JMenuBar();
JMenu fileMenu = new JMenu("File");
fileMenu.setMnemonic('f');
JMenuItem fmi1 = new JMenuItem();
fmi1 = new JMenuItem("Open");
JMenuItem fmi2 = new JMenuItem();
fmi2 = new JMenuItem("Close");
fmi2.setMnemonic('c');
fmi2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
closeActivated = true;
}
});
fileMenu.add( fmi1);
fileMenu.add( fmi2);
menubar.add( fileMenu);
JMenu custom = new JMenu("Custom");
custom.setMnemonic('c');
JMenuItem cmi = new JMenuItem();
cmi = new JMenuItem("Properties");
cmi.setMnemonic('p');
custom.add( cmi);
custom.addMenuListener(new MenuListener() {
public void menuSelected(MenuEvent e) {
customActivated = true;
}
public void menuDeselected(MenuEvent e) {}
public void menuCanceled(MenuEvent e) {}
});
menubar.add( custom);
JFrame frame = new JFrame();
frame.setJMenuBar( menubar);
frame.setSize(300, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
/*
* 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.
*/
/* @test
@bug 4458079
@library ../../regtesthelpers
@build Util
@summary Tests calling removeAll() from PopupMenuListener
@author Peter Zhelezniakov
@run main bug4458079
*/
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import sun.awt.SunToolkit;
public class bug4458079 extends JFrame implements PopupMenuListener {
public JMenu menu;
static volatile boolean itemASelected = false;
public static void main(String[] args) throws Exception {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
new bug4458079().createAndShowGUI();
}
});
SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
toolkit.realSync();
Robot robot = new Robot();
robot.setAutoDelay(50);
Util.hitMnemonics(robot, KeyEvent.VK_M);
toolkit.realSync();
Thread.sleep(1000);
Util.hitKeys(robot, KeyEvent.VK_DOWN);
Util.hitKeys(robot, KeyEvent.VK_ENTER);
toolkit.realSync();
Thread.sleep(1000);
if (!itemASelected) {
throw new RuntimeException("Test failed: arrow key traversal in JMenu broken!");
}
}
public void createAndShowGUI() {
JMenuBar bar = new JMenuBar();
menu = new JMenu("Menu");
menu.add(new JMenuItem("1"));
menu.add(new JMenuItem("2"));
menu.setMnemonic(KeyEvent.VK_M);
menu.getPopupMenu().addPopupMenuListener(this);
bar.add(menu);
setJMenuBar(bar);
getContentPane().add(new JButton(""));
setSize(300, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
}
public void rebuildMenu() {
menu.removeAll();
final String itemCommand = "A";
JMenuItem item = new JMenuItem(itemCommand);
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JMenuItem item = ((JMenuItem)e.getSource());
if (e.getActionCommand() == itemCommand) {
itemASelected = true;
}
}
});
menu.add(item);
menu.add(new JMenuItem("B"));
}
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
rebuildMenu();
}
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {}
public void popupMenuCanceled(PopupMenuEvent e) {}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册