mirror of
https://github.com/openjdk/jdk.git
synced 2026-03-08 23:20:20 +00:00
8144161: [TESTBUG] [macosx] Test javax/swing/plaf/basic/BasicComboPopup/7072653/bug7072653.java fails for mac
Reviewed-by: rchamyal, alexsch
This commit is contained in:
parent
b0d02d28a3
commit
d3571d7787
@ -22,106 +22,153 @@
|
||||
*/
|
||||
|
||||
/* @test
|
||||
@bug 7072653
|
||||
@summary JComboBox popup mispositioned if its height exceeds the screen height
|
||||
@author Semyon Sadetsky
|
||||
*/
|
||||
|
||||
|
||||
import javax.swing.*;
|
||||
* @bug 7072653 8144161
|
||||
* @summary JComboBox popup mispositioned if its height exceeds the screen height
|
||||
* @run main bug7072653
|
||||
*/
|
||||
import java.awt.FlowLayout;
|
||||
import java.awt.GraphicsConfiguration;
|
||||
import java.awt.Insets;
|
||||
import java.awt.Robot;
|
||||
import javax.swing.event.PopupMenuEvent;
|
||||
import javax.swing.event.PopupMenuListener;
|
||||
import java.awt.*;
|
||||
import java.awt.Toolkit;
|
||||
import java.awt.Window;
|
||||
import java.util.Arrays;
|
||||
import javax.swing.DefaultComboBoxModel;
|
||||
import javax.swing.JComboBox;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.SwingUtilities;
|
||||
import javax.swing.UIManager;
|
||||
import javax.swing.UnsupportedLookAndFeelException;
|
||||
|
||||
public class bug7072653 {
|
||||
|
||||
private static JComboBox combobox;
|
||||
private static JFrame frame;
|
||||
private static Robot robot;
|
||||
private static volatile String errorString = "";
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
try {
|
||||
robot = new Robot();
|
||||
robot.delay(100);
|
||||
UIManager.LookAndFeelInfo[] lookAndFeelArray
|
||||
= UIManager.getInstalledLookAndFeels();
|
||||
for (UIManager.LookAndFeelInfo lookAndFeelItem : lookAndFeelArray) {
|
||||
executeCase(lookAndFeelItem.getClassName());
|
||||
robot.delay(1000);
|
||||
}
|
||||
if (!"".equals(errorString)) {
|
||||
|
||||
throw new RuntimeException("Error Log:\n" + errorString);
|
||||
}
|
||||
}
|
||||
|
||||
private static void executeCase(String lookAndFeelString) throws Exception {
|
||||
if (tryLookAndFeel(lookAndFeelString)) {
|
||||
SwingUtilities.invokeAndWait(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
frame = new JFrame("JComboBox Test");
|
||||
setup(frame);
|
||||
try {
|
||||
setup(lookAndFeelString);
|
||||
test();
|
||||
} catch (Exception ex) {
|
||||
errorString += "\n";
|
||||
errorString += Arrays.toString(ex.getStackTrace());
|
||||
}
|
||||
finally {
|
||||
frame.dispose();
|
||||
}
|
||||
}
|
||||
});
|
||||
test();
|
||||
}
|
||||
finally {
|
||||
frame.dispose();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void setup(JFrame frame) {
|
||||
private static void setup(String lookAndFeelString)
|
||||
throws Exception {
|
||||
|
||||
|
||||
frame.setUndecorated(true);
|
||||
frame = new JFrame("JComboBox Test " + lookAndFeelString);
|
||||
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
|
||||
frame.setSize(320, 200);
|
||||
|
||||
frame.getContentPane().setLayout(new FlowLayout());
|
||||
|
||||
frame.setLocationRelativeTo(null);
|
||||
combobox = new JComboBox(new DefaultComboBoxModel() {
|
||||
public Object getElementAt(int index) { return "Element " + index; }
|
||||
@Override
|
||||
public Object getElementAt(int index) {
|
||||
return "Element " + index;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
return 1000;
|
||||
return 100;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
combobox.setMaximumRowCount(100);
|
||||
frame.getContentPane().add(combobox);
|
||||
|
||||
frame.setVisible(true);
|
||||
|
||||
}
|
||||
|
||||
static void test() throws Exception{
|
||||
SwingUtilities.invokeAndWait(new Runnable() {
|
||||
combobox.addPopupMenuListener(new PopupMenuListener() {
|
||||
@Override
|
||||
public void run() {
|
||||
combobox.addPopupMenuListener(new PopupMenuListener() {
|
||||
@Override
|
||||
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
|
||||
int height = 0;
|
||||
for (Window window : JFrame.getWindows()) {
|
||||
if (Window.Type.POPUP == window.getType()) {
|
||||
height = window.getSize().height;
|
||||
break;
|
||||
}
|
||||
}
|
||||
GraphicsConfiguration gc =
|
||||
combobox.getGraphicsConfiguration();
|
||||
Insets screenInsets = Toolkit.getDefaultToolkit()
|
||||
.getScreenInsets(gc);
|
||||
|
||||
if (height == gc.getBounds().height - screenInsets.top -
|
||||
screenInsets.bottom ) {
|
||||
System.out.println("ok");
|
||||
return;
|
||||
}
|
||||
throw new RuntimeException(
|
||||
"Popup window height is wrong " + height);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void popupMenuCanceled(PopupMenuEvent e) {
|
||||
}
|
||||
});
|
||||
combobox.setPopupVisible(true);
|
||||
combobox.setPopupVisible(false);
|
||||
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
|
||||
int height = 0;
|
||||
for (Window window : JFrame.getWindows()) {
|
||||
if (Window.Type.POPUP == window.getType()) {
|
||||
height = window.getSize().height;
|
||||
break;
|
||||
}
|
||||
}
|
||||
GraphicsConfiguration gc
|
||||
= combobox.getGraphicsConfiguration();
|
||||
Insets screenInsets = Toolkit.getDefaultToolkit()
|
||||
.getScreenInsets(gc);
|
||||
int gcHeight = gc.getBounds().height;
|
||||
if (lookAndFeelString.contains("aqua")) {
|
||||
gcHeight = gcHeight - screenInsets.top;
|
||||
//For Aqua LAF
|
||||
} else {
|
||||
gcHeight = gcHeight - screenInsets.top
|
||||
- screenInsets.bottom;
|
||||
}
|
||||
if (height == gcHeight) {
|
||||
return;
|
||||
}
|
||||
|
||||
String exception = "Popup window height "
|
||||
+ "For LookAndFeel" + lookAndFeelString + " is wrong"
|
||||
+ "\nShould be " + height + "Actually " + gcHeight;
|
||||
errorString += exception;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void popupMenuCanceled(PopupMenuEvent e) {
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private static void test() throws Exception {
|
||||
combobox.setPopupVisible(true);
|
||||
combobox.setPopupVisible(false);
|
||||
}
|
||||
|
||||
private static boolean tryLookAndFeel(String lookAndFeelString)
|
||||
throws Exception {
|
||||
try {
|
||||
UIManager.setLookAndFeel(
|
||||
lookAndFeelString);
|
||||
|
||||
} catch (UnsupportedLookAndFeelException
|
||||
| ClassNotFoundException
|
||||
| InstantiationException
|
||||
| IllegalAccessException e) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user