8190347: [TESTBUG] Test javax/swing/JWindow/ShapedAndTranslucentWindows/TranslucentJComboBox.java fails
authorpbansal
Wed, 07 Mar 2018 18:20:09 +0530
changeset 49224 d432d559a343
parent 49223 2cebce5e0ecc
child 49225 e0b025915be8
8190347: [TESTBUG] Test javax/swing/JWindow/ShapedAndTranslucentWindows/TranslucentJComboBox.java fails Reviewed-by: serb, psadhukhan
test/jdk/ProblemList.txt
test/jdk/javax/swing/JWindow/ShapedAndTranslucentWindows/TranslucentJComboBox.java
--- a/test/jdk/ProblemList.txt	Wed Mar 07 17:05:28 2018 +0530
+++ b/test/jdk/ProblemList.txt	Wed Mar 07 18:20:09 2018 +0530
@@ -622,7 +622,7 @@
 javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentSwing.java 8194128 macosx-all
 javax/swing/JWindow/ShapedAndTranslucentWindows/ShapedPerPixelTranslucentGradient.java 8198667 macosx-all
 javax/swing/JWindow/ShapedAndTranslucentWindows/SetShapeAndClickSwing.java 8013450 macosx-all
-javax/swing/JWindow/ShapedAndTranslucentWindows/TranslucentJComboBox.java 8190347 macosx-all
+javax/swing/JWindow/ShapedAndTranslucentWindows/TranslucentJComboBox.java 8024627 macosx-all
 # The next test below is an intermittent failure
 javax/swing/JComboBox/8033069/bug8033069ScrollBar.java 8163367 generic-all
 javax/swing/JColorChooser/Test6541987.java 8143021 windows-all,linux-all,macosx-all
--- a/test/jdk/javax/swing/JWindow/ShapedAndTranslucentWindows/TranslucentJComboBox.java	Wed Mar 07 17:05:28 2018 +0530
+++ b/test/jdk/javax/swing/JWindow/ShapedAndTranslucentWindows/TranslucentJComboBox.java	Wed Mar 07 18:20:09 2018 +0530
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2018, 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
@@ -21,15 +21,10 @@
  * questions.
  */
 
-import javax.swing.*;
-import java.awt.*;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-
 /*
  * @test
  * @key headful
- * @bug 8024627
+ * @bug 8024627 8190347
  * @summary Check if a JComboBox present in a window set with opacity less than
  *          1.0 shows a translucent drop down
  * Test Description: Check if TRANSLUCENT translucency type is supported on the
@@ -46,6 +41,24 @@
  * @run main TranslucentJComboBox
  */
 
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import javax.swing.RootPaneContainer;
+import javax.swing.JList;
+import javax.swing.JComboBox;
+import javax.swing.JPopupMenu;
+import javax.swing.event.PopupMenuEvent;
+import javax.swing.event.PopupMenuListener;
+import java.awt.GraphicsDevice;
+import java.awt.Container;
+import java.awt.BorderLayout;
+import java.awt.Point;
+import java.awt.Color;
+import java.awt.Window;
+import java.awt.EventQueue;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
 public class TranslucentJComboBox extends Common {
 
     JComponent south;
@@ -53,6 +66,8 @@
     JPanel north;
     volatile boolean southClicked = false;
 
+    JPopupMenu popup = null;
+
     public static void main(String[] args) throws Exception {
         if (checkTranslucencyMode(GraphicsDevice.WindowTranslucency.TRANSLUCENT))
             for (Class<Window> windowClass: WINDOWS_TO_TEST)
@@ -84,6 +99,24 @@
             jComboBox.addItem("item " + i);
         }
         south = jComboBox;
+        jComboBox.addPopupMenuListener(new PopupMenuListener() {
+
+            @Override
+            public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
+                popup = (JPopupMenu) jComboBox.getAccessibleContext()
+                        .getAccessibleChild(0);
+            }
+
+            @Override
+            public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
+
+            }
+
+            @Override
+            public void popupMenuCanceled(PopupMenuEvent e) {
+
+            }
+        });
 
         south.addMouseListener(new MouseAdapter() {
             @Override
@@ -142,12 +175,19 @@
                             ". Before click: " + c1 + ", after click: " + c1b +
                             ", expected is " + south.getBackground());
 
-        if (!c2.equals(c2b) && !south.getBackground().equals(c2b))
+        //This following check is only valid if the popup was created below the
+        // JComboBox and will be opaque or it is created above the JComboBox
+        // and it can not fit inside the JWindow along with JComboBox and will
+        // be opaque
+        if ( !c2.equals(c2b) && !south.getBackground().equals(c2b) &&
+                (popup.getLocationOnScreen().y > ls.y ||
+                        window.getHeight() < popup.getHeight() + south.getHeight()))
             throw new RuntimeException(
                     "Check for opaque drop down failed at point " + p2 +
                             ". Before click: " + c2 + ", after click: " + c2b +
                             ", expected is " + south.getBackground());
 
+        popup = null;
         EventQueue.invokeAndWait(this::dispose);
     }
 }