8324238: [macOS] java/awt/Frame/ShapeNotSetSometimes/ShapeNotSetSometimes.java fails with the shape has not been applied msg
Reviewed-by: azvegint, dnguyen
This commit is contained in:
parent
1f2922ad85
commit
62c9530c05
@ -21,8 +21,6 @@
|
|||||||
* questions.
|
* questions.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.EventQueue;
|
import java.awt.EventQueue;
|
||||||
@ -44,7 +42,7 @@ import javax.imageio.ImageIO;
|
|||||||
* @key headful
|
* @key headful
|
||||||
* @bug 6988428
|
* @bug 6988428
|
||||||
* @summary Tests whether shape is always set
|
* @summary Tests whether shape is always set
|
||||||
* @run main ShapeNotSetSometimes
|
* @run main/othervm -Dsun.java2d.uiScale=1 ShapeNotSetSometimes
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class ShapeNotSetSometimes {
|
public class ShapeNotSetSometimes {
|
||||||
@ -55,22 +53,24 @@ public class ShapeNotSetSometimes {
|
|||||||
private Point[] pointsOutsideToCheck;
|
private Point[] pointsOutsideToCheck;
|
||||||
private Point[] shadedPointsToCheck;
|
private Point[] shadedPointsToCheck;
|
||||||
private Point innerPoint;
|
private Point innerPoint;
|
||||||
private final Rectangle bounds = new Rectangle(220, 400, 300, 300);
|
|
||||||
|
|
||||||
private static Robot robot;
|
private static Robot robot;
|
||||||
private static final Color BACKGROUND_COLOR = Color.GREEN;
|
private static final Color BACKGROUND_COLOR = Color.GREEN;
|
||||||
private static final Color SHAPE_COLOR = Color.WHITE;
|
private static final Color SHAPE_COLOR = Color.WHITE;
|
||||||
|
private static final int DIM = 300;
|
||||||
|
private static final int DELTA = 2;
|
||||||
|
|
||||||
public ShapeNotSetSometimes() throws Exception {
|
public ShapeNotSetSometimes() throws Exception {
|
||||||
EventQueue.invokeAndWait(this::initializeGUI);
|
EventQueue.invokeAndWait(this::initializeGUI);
|
||||||
robot.waitForIdle();
|
robot.waitForIdle();
|
||||||
robot.delay(1000);
|
robot.delay(500);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeGUI() {
|
private void initializeGUI() {
|
||||||
backgroundFrame = new BackgroundFrame();
|
backgroundFrame = new BackgroundFrame();
|
||||||
backgroundFrame.setUndecorated(true);
|
backgroundFrame.setUndecorated(true);
|
||||||
backgroundFrame.setBounds(bounds);
|
backgroundFrame.setSize(DIM, DIM);
|
||||||
|
backgroundFrame.setLocationRelativeTo(null);
|
||||||
backgroundFrame.setVisible(true);
|
backgroundFrame.setVisible(true);
|
||||||
|
|
||||||
Area area = new Area();
|
Area area = new Area();
|
||||||
@ -81,8 +81,10 @@ public class ShapeNotSetSometimes {
|
|||||||
area.add(new Area(new Ellipse2D.Float(150, 50, 100, 100)));
|
area.add(new Area(new Ellipse2D.Float(150, 50, 100, 100)));
|
||||||
area.add(new Area(new Ellipse2D.Float(150, 100, 100, 100)));
|
area.add(new Area(new Ellipse2D.Float(150, 100, 100, 100)));
|
||||||
|
|
||||||
|
// point at the center of white ellipse
|
||||||
innerPoint = new Point(150, 130);
|
innerPoint = new Point(150, 130);
|
||||||
|
|
||||||
|
// mid points on the 4 sides - on the green background frame
|
||||||
pointsOutsideToCheck = new Point[] {
|
pointsOutsideToCheck = new Point[] {
|
||||||
new Point(150, 20),
|
new Point(150, 20),
|
||||||
new Point(280, 120),
|
new Point(280, 120),
|
||||||
@ -90,6 +92,7 @@ public class ShapeNotSetSometimes {
|
|||||||
new Point(20, 120)
|
new Point(20, 120)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// points just outside the ellipse (opposite side of diagonal)
|
||||||
shadedPointsToCheck = new Point[] {
|
shadedPointsToCheck = new Point[] {
|
||||||
new Point(62, 62),
|
new Point(62, 62),
|
||||||
new Point(240, 185)
|
new Point(240, 185)
|
||||||
@ -97,7 +100,8 @@ public class ShapeNotSetSometimes {
|
|||||||
|
|
||||||
window = new TestFrame();
|
window = new TestFrame();
|
||||||
window.setUndecorated(true);
|
window.setUndecorated(true);
|
||||||
window.setBounds(bounds);
|
window.setSize(DIM, DIM);
|
||||||
|
window.setLocationRelativeTo(null);
|
||||||
window.setShape(area);
|
window.setShape(area);
|
||||||
window.setVisible(true);
|
window.setVisible(true);
|
||||||
}
|
}
|
||||||
@ -108,7 +112,7 @@ public class ShapeNotSetSometimes {
|
|||||||
public void paint(Graphics g) {
|
public void paint(Graphics g) {
|
||||||
|
|
||||||
g.setColor(BACKGROUND_COLOR);
|
g.setColor(BACKGROUND_COLOR);
|
||||||
g.fillRect(0, 0, 300, 300);
|
g.fillRect(0, 0, DIM, DIM);
|
||||||
|
|
||||||
super.paint(g);
|
super.paint(g);
|
||||||
}
|
}
|
||||||
@ -120,7 +124,7 @@ public class ShapeNotSetSometimes {
|
|||||||
public void paint(Graphics g) {
|
public void paint(Graphics g) {
|
||||||
|
|
||||||
g.setColor(SHAPE_COLOR);
|
g.setColor(SHAPE_COLOR);
|
||||||
g.fillRect(0, 0, bounds.width, bounds.height);
|
g.fillRect(0, 0, DIM, DIM);
|
||||||
|
|
||||||
super.paint(g);
|
super.paint(g);
|
||||||
}
|
}
|
||||||
@ -155,17 +159,24 @@ public class ShapeNotSetSometimes {
|
|||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
EventQueue.invokeAndWait(() -> {
|
EventQueue.invokeAndWait(() -> {
|
||||||
backgroundFrame.dispose();
|
if (backgroundFrame != null) {
|
||||||
window.dispose();
|
backgroundFrame.dispose();
|
||||||
|
}
|
||||||
|
if (window != null) {
|
||||||
|
window.dispose();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void colorCheck(int x, int y, Color expectedColor, boolean mustBeExpectedColor) {
|
private void colorCheck(int x, int y, Color expectedColor, boolean mustBeExpectedColor) {
|
||||||
|
|
||||||
int screenX = window.getX() + x;
|
int screenX = window.getX() + x;
|
||||||
int screenY = window.getY() + y;
|
int screenY = window.getY() + y;
|
||||||
|
|
||||||
|
robot.mouseMove(screenX, screenY);
|
||||||
|
robot.waitForIdle();
|
||||||
|
robot.delay(50);
|
||||||
|
|
||||||
Color actualColor = robot.getPixelColor(screenX, screenY);
|
Color actualColor = robot.getPixelColor(screenX, screenY);
|
||||||
|
|
||||||
System.out.printf(
|
System.out.printf(
|
||||||
@ -176,7 +187,7 @@ public class ShapeNotSetSometimes {
|
|||||||
expectedColor
|
expectedColor
|
||||||
);
|
);
|
||||||
|
|
||||||
if (mustBeExpectedColor != expectedColor.equals(actualColor)) {
|
if (mustBeExpectedColor != colorCompare(expectedColor, actualColor)) {
|
||||||
captureScreen();
|
captureScreen();
|
||||||
System.out.printf("window.getX() = %3d, window.getY() = %3d\n", window.getX(), window.getY());
|
System.out.printf("window.getX() = %3d, window.getY() = %3d\n", window.getX(), window.getY());
|
||||||
System.err.printf(
|
System.err.printf(
|
||||||
@ -190,6 +201,15 @@ public class ShapeNotSetSometimes {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean colorCompare(Color expected, Color actual) {
|
||||||
|
if (Math.abs(expected.getRed() - actual.getRed()) <= DELTA
|
||||||
|
&& Math.abs(expected.getGreen() - actual.getGreen()) <= DELTA
|
||||||
|
&& Math.abs(expected.getBlue() - actual.getBlue()) <= DELTA) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private static void captureScreen() {
|
private static void captureScreen() {
|
||||||
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
|
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
|
||||||
Rectangle screenBounds = new Rectangle(0, 0, screenSize.width, screenSize.height);
|
Rectangle screenBounds = new Rectangle(0, 0, screenSize.width, screenSize.height);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user