< prev index next >

test/jdk/java/awt/Dialog/SiblingChildOrder/SiblingChildOrderTest.java

Print this page

        

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 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
  * under the terms of the GNU General Public License version 2 only, as
  * published by the Free Software Foundation.

@@ -21,21 +21,23 @@
  * questions.
  */
 
 /**
  * @test
- * @bug 8190230
+ * @bug 8190230 8196360
  * @summary [macosx] Order of overlapping of modal dialogs is wrong
  * @key headful
  * @run main SiblingChildOrderTest
  */
 
-import javax.swing.*;
-import java.awt.*;
+import java.awt.Color;
+import java.awt.Robot;
+import javax.swing.JDialog;
+import javax.swing.JFrame;
+import javax.swing.SwingUtilities;
 
 public class SiblingChildOrderTest
-
 {
     static Color[] colors = new Color[]{Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW};
     static int[] x = new int[]{200, 150, 100, 50};
     static int[] y = new int[]{200, 150, 100, 50};
     static JDialog[] dlgs = new JDialog[4];

@@ -43,39 +45,48 @@
 
     public static void main(String args[]) throws Exception {
         SwingUtilities.invokeAndWait(() -> {
             frame = new JFrame("FRAME");
             frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-            frame.setBounds(50, 50, 400, 400);
+            frame.setUndecorated(true);
+            frame.setBounds(50,50, 400, 400);
             frame.setVisible(true);
         });
 
         for (int i = 0; i < colors.length; i++) {
             int finalI = i;
             SwingUtilities.invokeLater(() -> {
                 dlgs[finalI] = new JDialog(frame, "DLG " + finalI, true);
                 dlgs[finalI].getContentPane().setBackground(colors[finalI]);
                 dlgs[finalI].setBounds(x[finalI], y[finalI], 200, 200);
+                dlgs[finalI].setUndecorated(true);
                 dlgs[finalI].setVisible(true);
-
             });
         }
 
         Robot robot = new Robot();
         robot.waitForIdle();
-        robot.delay(200);
+        robot.delay(1000);
 
         for (int i = 0; i < colors.length; i++) {
             Color c = robot.getPixelColor(x[i] + 190, y[i] + 190);
-            if (!c.equals(colors[i])) {
+        if (!compareColor(colors[i], c, 5)) {
                 throw new RuntimeException("Expected " + colors[i] + " got " + c);
             }
         }
 
         for (int i = 0; i < colors.length; i++) {
             SwingUtilities.invokeLater(dlgs[i]::dispose);
         }
-
         SwingUtilities.invokeLater(frame::dispose);
+    }
 
+    private static boolean compareColor(Color c1, Color c2, int threshold) {
+        if (c1.equals(c2)) {
+            return true;
+        } else {
+            return ((Math.abs(c1.getRed() - c2.getRed()) < threshold ) &&
+                    (Math.abs(c1.getGreen() - c2.getGreen()) < threshold ) &&
+                    (Math.abs(c1.getBlue() - c2.getBlue()) < threshold ));
+        }
     }
 }
< prev index next >