-
Notifications
You must be signed in to change notification settings - Fork 208
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
8306634: Open source AWT Event related tests
Backport-of: 9ed456fac87f598af7d71f9c0887234a09e10eed
- Loading branch information
Amos Shi
committed
Apr 23, 2024
1 parent
7d19575
commit fbd0088
Showing
5 changed files
with
495 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
/* | ||
* Copyright (c) 1999, 2023, 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. | ||
* | ||
* This code is distributed in the hope that it will be useful, but WITHOUT | ||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
* version 2 for more details (a copy is included in the LICENSE file that | ||
* accompanied this code). | ||
* | ||
* You should have received a copy of the GNU General Public License version | ||
* 2 along with this work; if not, write to the Free Software Foundation, | ||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | ||
* | ||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | ||
* or visit www.oracle.com if you need additional information or have any | ||
* questions. | ||
*/ | ||
|
||
import java.awt.Color; | ||
import java.awt.EventQueue; | ||
import java.awt.Frame; | ||
import java.awt.Label; | ||
import java.awt.Point; | ||
import java.awt.Robot; | ||
|
||
/* | ||
* @test | ||
* @bug 4189198 | ||
* @key headful | ||
* @summary updateClient should post a PaintEvent | ||
*/ | ||
|
||
public class RepaintTest { | ||
private static volatile Frame frame; | ||
private static volatile Label label; | ||
private static volatile Point frameLoc; | ||
|
||
private static final int FRAME_DIM = 100; | ||
|
||
public static void main(String[] args) throws Exception { | ||
try { | ||
Robot robot = new Robot(); | ||
EventQueue.invokeAndWait(() -> { | ||
frame = new Frame("Repaint Tester"); | ||
frame.setSize(FRAME_DIM, FRAME_DIM); | ||
label = new Label("Hi"); | ||
frame.add(label); | ||
frame.setLocationRelativeTo(null); | ||
frame.setVisible(true); | ||
}); | ||
robot.waitForIdle(); | ||
robot.delay(1000); | ||
|
||
EventQueue.invokeAndWait(() -> { | ||
label.setBackground(Color.GREEN); | ||
label.repaint(); | ||
frameLoc = frame.getLocationOnScreen(); | ||
}); | ||
robot.waitForIdle(); | ||
robot.delay(500); | ||
|
||
Color expectedColor = robot.getPixelColor(frameLoc.x + FRAME_DIM / 2, | ||
frameLoc.y + FRAME_DIM / 2); | ||
if (!Color.GREEN.equals(expectedColor)) { | ||
throw new RuntimeException("Test Failed! \n" + | ||
"PaintEvent was not triggered: "); | ||
} | ||
} finally { | ||
EventQueue.invokeAndWait(() -> { | ||
if (frame != null) { | ||
frame.dispose(); | ||
} | ||
}); | ||
} | ||
} | ||
} |
191 changes: 191 additions & 0 deletions
191
test/jdk/java/awt/event/MouseEvent/MouseEventAbsoluteCoordsTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,191 @@ | ||
/* | ||
* Copyright (c) 2005, 2023, 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. | ||
* | ||
* This code is distributed in the hope that it will be useful, but WITHOUT | ||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
* version 2 for more details (a copy is included in the LICENSE file that | ||
* accompanied this code). | ||
* | ||
* You should have received a copy of the GNU General Public License version | ||
* 2 along with this work; if not, write to the Free Software Foundation, | ||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | ||
* | ||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | ||
* or visit www.oracle.com if you need additional information or have any | ||
* questions. | ||
*/ | ||
|
||
import java.awt.EventQueue; | ||
import java.awt.Frame; | ||
import java.awt.Point; | ||
import java.awt.Robot; | ||
import java.awt.Toolkit; | ||
import java.awt.event.MouseEvent; | ||
import java.awt.event.MouseListener; | ||
|
||
/* | ||
* @test | ||
* @bug 4992908 | ||
* @key headful | ||
* @summary Need way to get location of MouseEvent in screen coordinates | ||
*/ | ||
|
||
// The test consists of several parts: | ||
// 1. create MouseEvent with new Ctor and checking get(X|Y)OnScreen(), | ||
// getLocationOnScreen(), get(X|Y), getPoint(). | ||
// 2. create MouseEvent with old Ctor and checking get(X|Y)OnScreen(), | ||
// getLocationOnScreen(), get(X|Y), getPoint() . | ||
|
||
public class MouseEventAbsoluteCoordsTest implements MouseListener { | ||
private static Frame frame; | ||
private static Robot robot; | ||
|
||
private static Point mousePositionOnScreen = new Point(200, 200); | ||
private static final Point mousePosition = new Point(100, 100); | ||
|
||
public static void main(String[] args) throws Exception { | ||
try { | ||
robot = new Robot(); | ||
robot.setAutoWaitForIdle(true); | ||
robot.setAutoDelay(50); | ||
|
||
MouseEventAbsoluteCoordsTest cordsTest = | ||
new MouseEventAbsoluteCoordsTest(); | ||
cordsTest.createTestUI(); | ||
} finally { | ||
EventQueue.invokeAndWait(() -> { | ||
if (frame != null) { | ||
frame.dispose(); | ||
} | ||
}); | ||
} | ||
} | ||
|
||
public void createTestUI() throws Exception { | ||
EventQueue.invokeAndWait(() -> { | ||
frame = new Frame("MouseEvent Test Frame"); | ||
frame.setSize(200, 200); | ||
frame.setLocation(300, 400); | ||
frame.addMouseListener(this); | ||
frame.setVisible(true); | ||
}); | ||
|
||
robot.waitForIdle(); | ||
robot.delay(1000); | ||
|
||
// use new MouseEvent's Ctor with user-defined absolute | ||
// coordinates | ||
System.out.println("Stage MOUSE_PRESSED"); | ||
postMouseEventNewCtor(MouseEvent.MOUSE_PRESSED); | ||
|
||
System.out.println("Stage MOUSE_RELEASED"); | ||
postMouseEventNewCtor(MouseEvent.MOUSE_RELEASED); | ||
|
||
System.out.println("Stage MOUSE_CLICKED"); | ||
postMouseEventNewCtor(MouseEvent.MOUSE_CLICKED); | ||
|
||
// call syncLocation to get correct on-screen frame position | ||
syncLocationToWindowManager(); | ||
|
||
// now we gonna use old MouseEvent's Ctor thus absolute | ||
// position calculates as frame's location + relative coords | ||
// of the event. | ||
EventQueue.invokeAndWait(() -> mousePositionOnScreen = new Point( | ||
frame.getLocationOnScreen().x + mousePosition.x, | ||
frame.getLocationOnScreen().y + mousePosition.y)); | ||
|
||
System.out.println("Stage MOUSE_PRESSED"); | ||
postMouseEventOldCtor(MouseEvent.MOUSE_PRESSED); | ||
|
||
System.out.println("Stage MOUSE_RELEASED"); | ||
postMouseEventOldCtor(MouseEvent.MOUSE_RELEASED); | ||
|
||
System.out.println("Stage MOUSE_CLICKED"); | ||
postMouseEventOldCtor(MouseEvent.MOUSE_CLICKED); | ||
} | ||
|
||
private static void syncLocationToWindowManager() { | ||
Toolkit.getDefaultToolkit().sync(); | ||
try { | ||
Thread.sleep(500); | ||
} catch (InterruptedException e) { | ||
e.printStackTrace(); | ||
} | ||
} | ||
|
||
@Override | ||
public void mousePressed(MouseEvent e) { | ||
checkEventAbsolutePosition(e, "MousePressed OK"); | ||
}; | ||
|
||
@Override | ||
public void mouseExited(MouseEvent e) { | ||
System.out.println("mouse exited"); | ||
}; | ||
|
||
@Override | ||
public void mouseReleased(MouseEvent e) { | ||
checkEventAbsolutePosition(e, "MousePressed OK"); | ||
}; | ||
|
||
@Override | ||
public void mouseEntered(MouseEvent e) { | ||
System.out.println("mouse entered"); | ||
}; | ||
|
||
@Override | ||
public void mouseClicked(MouseEvent e) { | ||
checkEventAbsolutePosition(e, "MousePressed OK"); | ||
}; | ||
|
||
public void postMouseEventNewCtor(int MouseEventType) { | ||
MouseEvent mouseEvt = new MouseEvent(frame, | ||
MouseEventType, | ||
System.currentTimeMillis(), | ||
MouseEvent.BUTTON1_DOWN_MASK, | ||
mousePosition.x, mousePosition.y, | ||
mousePositionOnScreen.x, | ||
mousePositionOnScreen.y, | ||
1, | ||
false, | ||
MouseEvent.NOBUTTON | ||
); | ||
frame.dispatchEvent(mouseEvt); | ||
} | ||
|
||
public void postMouseEventOldCtor(int MouseEventType) { | ||
MouseEvent oldMouseEvt = new MouseEvent(frame, | ||
MouseEventType, | ||
System.currentTimeMillis(), | ||
MouseEvent.BUTTON1_DOWN_MASK, | ||
mousePosition.x, mousePosition.y, | ||
1, | ||
false, | ||
MouseEvent.NOBUTTON | ||
); | ||
frame.dispatchEvent(oldMouseEvt); | ||
} | ||
|
||
public void checkEventAbsolutePosition(MouseEvent evt, String message) { | ||
if (evt.getXOnScreen() != mousePositionOnScreen.x || | ||
evt.getYOnScreen() != mousePositionOnScreen.y || | ||
!evt.getLocationOnScreen().equals( mousePositionOnScreen)) { | ||
System.out.println("evt.location = "+evt.getLocationOnScreen()); | ||
System.out.println("mouse.location = "+mousePositionOnScreen); | ||
throw new RuntimeException("get(X|Y)OnScreen() or getPointOnScreen() work incorrectly"); | ||
} | ||
|
||
if (evt.getX() != mousePosition.x || | ||
evt.getY() != mousePosition.y || | ||
!evt.getPoint().equals( mousePosition)) { | ||
throw new RuntimeException("get(X|Y)() or getPoint() work incorrectly"); | ||
} | ||
System.out.println(message); | ||
} | ||
} |
76 changes: 76 additions & 0 deletions
76
test/jdk/java/awt/event/OtherEvents/UndecoratedShrink.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
/* | ||
* Copyright (c) 2001, 2023, 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. | ||
* | ||
* This code is distributed in the hope that it will be useful, but WITHOUT | ||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
* version 2 for more details (a copy is included in the LICENSE file that | ||
* accompanied this code). | ||
* | ||
* You should have received a copy of the GNU General Public License version | ||
* 2 along with this work; if not, write to the Free Software Foundation, | ||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | ||
* | ||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | ||
* or visit www.oracle.com if you need additional information or have any | ||
* questions. | ||
*/ | ||
|
||
import java.awt.EventQueue; | ||
import java.awt.Frame; | ||
import java.awt.Graphics; | ||
import java.awt.Robot; | ||
|
||
/* | ||
* @test | ||
* @bug 4418155 | ||
* @key headful | ||
* @summary Checks Undecorated Frame repaints when shrinking | ||
*/ | ||
|
||
public class UndecoratedShrink extends Frame { | ||
private static boolean passed = false; | ||
private static UndecoratedShrink frame; | ||
|
||
public static void main(String[] args) throws Exception { | ||
try { | ||
Robot robot = new Robot(); | ||
EventQueue.invokeAndWait(() -> { | ||
frame = new UndecoratedShrink(); | ||
frame.setUndecorated(true); | ||
frame.setSize(100, 100); | ||
frame.setVisible(true); | ||
}); | ||
robot.waitForIdle(); | ||
robot.delay(1000); | ||
|
||
EventQueue.invokeAndWait(() -> { | ||
frame.setSize(50, 50); | ||
frame.repaint(); | ||
}); | ||
robot.waitForIdle(); | ||
robot.delay(500); | ||
|
||
if (!passed) { | ||
throw new RuntimeException("Test Fails." + | ||
" Frame does not get repainted"); | ||
} | ||
} finally { | ||
EventQueue.invokeAndWait(() -> { | ||
if (frame != null) { | ||
frame.dispose(); | ||
} | ||
}); | ||
} | ||
} | ||
|
||
@Override | ||
public void paint(Graphics g) { | ||
passed = true; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
/* | ||
* Copyright (c) 1999, 2023, 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. | ||
* | ||
* This code is distributed in the hope that it will be useful, but WITHOUT | ||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
* version 2 for more details (a copy is included in the LICENSE file that | ||
* accompanied this code). | ||
* | ||
* You should have received a copy of the GNU General Public License version | ||
* 2 along with this work; if not, write to the Free Software Foundation, | ||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | ||
* | ||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | ||
* or visit www.oracle.com if you need additional information or have any | ||
* questions. | ||
*/ | ||
|
||
import javax.swing.JInternalFrame; | ||
|
||
/* | ||
* @test | ||
* @bug 4212562 | ||
* @summary To check if StackOverflow occurs if foreground is set to null. | ||
*/ | ||
|
||
public class bug4212562 { | ||
public static void main(String[] args) { | ||
try { | ||
JInternalFrame jif = new JInternalFrame(); | ||
jif.getContentPane().setForeground(null); | ||
jif.getForeground(); | ||
} catch (Exception e) { | ||
throw new RuntimeException("Following exception occurred" + | ||
" when getForeground() was called", e); | ||
} | ||
} | ||
} |
Oops, something went wrong.
fbd0088
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Review
Issues