From d3571d7787c350400964decff04d1cfb2c9eeb5b Mon Sep 17 00:00:00 2001 From: Avik Niyogi Date: Tue, 31 May 2016 16:03:21 +0530 Subject: [PATCH] 8144161: [TESTBUG] [macosx] Test javax/swing/plaf/basic/BasicComboPopup/7072653/bug7072653.java fails for mac Reviewed-by: rchamyal, alexsch --- .../BasicComboPopup/7072653/bug7072653.java | 177 +++++++++++------- 1 file changed, 112 insertions(+), 65 deletions(-) diff --git a/jdk/test/javax/swing/plaf/basic/BasicComboPopup/7072653/bug7072653.java b/jdk/test/javax/swing/plaf/basic/BasicComboPopup/7072653/bug7072653.java index ccecdc2c311..d983cd565a0 100644 --- a/jdk/test/javax/swing/plaf/basic/BasicComboPopup/7072653/bug7072653.java +++ b/jdk/test/javax/swing/plaf/basic/BasicComboPopup/7072653/bug7072653.java @@ -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; + } }