From ec836d6692f2425785836836fdacf4303c0ff65d Mon Sep 17 00:00:00 2001 From: Shashidhara Veerabhadraiah Date: Thu, 6 Jul 2017 16:45:56 +0530 Subject: [PATCH] 8165213: [TESTBUG] [PIT] consistent failure of a new regtest for 8163193 Reviewed-by: psadhukhan, serb --- .../8163193/ButtonGradientTest.java | 58 ++++++++++++++----- 1 file changed, 44 insertions(+), 14 deletions(-) diff --git a/jdk/test/javax/swing/plaf/metal/MetalGradient/8163193/ButtonGradientTest.java b/jdk/test/javax/swing/plaf/metal/MetalGradient/8163193/ButtonGradientTest.java index 8860d768a0d..ace98281cb5 100644 --- a/jdk/test/javax/swing/plaf/metal/MetalGradient/8163193/ButtonGradientTest.java +++ b/jdk/test/javax/swing/plaf/metal/MetalGradient/8163193/ButtonGradientTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2017, 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,13 +21,17 @@ * questions. */ -import java.awt.BorderLayout; +import java.awt.Image; +import java.awt.Robot; +import java.awt.Rectangle; import java.awt.Color; +import java.awt.Point; +import java.awt.Dimension; import java.awt.GradientPaint; import java.awt.Graphics2D; -import java.awt.Rectangle; -import java.awt.Robot; +import java.awt.BorderLayout; import java.awt.image.BufferedImage; +import java.awt.image.MultiResolutionImage; import java.util.List; import javax.swing.JButton; import javax.swing.JFrame; @@ -38,18 +42,20 @@ import javax.swing.plaf.metal.MetalLookAndFeel; /* * @test - * @bug 8163193 + * @bug 8163193 8165213 * @key headful * @summary Metal L&F gradient is lighter on HiDPI display * @run main/othervm -Dsun.java2d.uiScale=2 ButtonGradientTest */ public class ButtonGradientTest { - private static JFrame frame; private static JButton button; + private static List images; + private static Robot robot; public static void main(String[] args) throws Exception { try { + robot = new Robot(); testGradient(); } finally { SwingUtilities.invokeAndWait(() -> { @@ -61,11 +67,10 @@ public class ButtonGradientTest { } private static void testGradient() throws Exception { - Robot robot = new Robot(); - robot.setAutoDelay(50); - + // Create and show the GUI SwingUtilities.invokeAndWait(ButtonGradientTest::createAndShowGUI); robot.waitForIdle(); + robot.delay(500); Rectangle rect = getButtonBounds(); List gradient = (List) UIManager.get("Button.gradient"); @@ -73,11 +78,15 @@ public class ButtonGradientTest { Color c1 = (Color) gradient.get(2); Color c2 = (Color) gradient.get(3); int mid = (int) (ratio * rect.height); - + // Get the expected gradient color Color gradientColor = getGradientColor(rect.width, mid, c1, c2); + + // Get color from robot captured hidpi image of the button + getImageFromRobot(); int x = rect.x + rect.width / 2; int y = rect.y + mid / 2; - Color buttonColor = robot.getPixelColor(x, y); + Color buttonColor = new Color(((BufferedImage)(images.get(1))).getRGB( + (int)(x), (int)(y))); if (!similarColors(buttonColor, gradientColor)) { throw new RuntimeException("Button gradient is changed!"); @@ -103,6 +112,26 @@ public class ButtonGradientTest { frame.setVisible(true); } + private static void getImageFromRobot() { + try { + Point butLoc = button.getLocationOnScreen(); + Dimension butSize = button.getSize(); + MultiResolutionImage multiResolutionImage = + robot.createMultiResolutionScreenCapture( + new Rectangle((int)butLoc.getX(), + (int)butLoc.getY(), (int)butSize.getWidth(), + (int)butSize.getHeight())); + images = multiResolutionImage.getResolutionVariants(); + } catch (Exception e) { + throw new RuntimeException(e); + } + + if(images.size() < 2) { + throw new RuntimeException("HiDpi Image not captured - " + + "Check is this HiDpi display system?"); + } + } + private static Rectangle getButtonBounds() throws Exception { Rectangle[] rectangles = new Rectangle[1]; SwingUtilities.invokeAndWait(() -> { @@ -113,7 +142,8 @@ public class ButtonGradientTest { } private static Color getGradientColor(int w, int h, Color c1, Color c2) { - GradientPaint gradient = new GradientPaint(0, 0, c1, 0, h, c2, true); + GradientPaint gradient = new GradientPaint(0, 0, c1, 0, h, c2, + true); BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); Graphics2D g = img.createGraphics(); g.setPaint(gradient); @@ -129,6 +159,6 @@ public class ButtonGradientTest { } private static boolean similar(int i1, int i2) { - return Math.abs(i2 - i1) < 7; + return Math.abs(i2 - i1) < 6; } -} +} \ No newline at end of file