From bea9acc55a7b0463a1b0b4dcb557f8ea17d8fe8c Mon Sep 17 00:00:00 2001
From: Tejesh R
Date: Wed, 10 Apr 2024 07:11:02 +0000
Subject: [PATCH] 8328482: Convert and Open source few manual applet test to
main based
Reviewed-by: abhiscxk, honkar, prr
---
test/jdk/ProblemList.txt | 1 +
.../java/awt/Frame/FrameMaximizedTest.java | 62 ++++
.../jdk/java/awt/Frame/FrameMinimizeTest.java | 59 ++++
.../awt/Frame/MegaIconTest/MegaIconTest.java | 273 ++++++++++++++++++
.../java/awt/Frame/MegaIconTest/dukeWave.gif | Bin 0 -> 1661 bytes
.../java/awt/Frame/MegaIconTest/duke_404.gif | Bin 0 -> 5529 bytes
.../jdk/java/awt/Frame/MegaIconTest/fight.gif | Bin 0 -> 3737 bytes
.../jdk/java/awt/Frame/SizeMinimizedTest.java | 140 +++++++++
8 files changed, 535 insertions(+)
create mode 100644 test/jdk/java/awt/Frame/FrameMaximizedTest.java
create mode 100644 test/jdk/java/awt/Frame/FrameMinimizeTest.java
create mode 100644 test/jdk/java/awt/Frame/MegaIconTest/MegaIconTest.java
create mode 100644 test/jdk/java/awt/Frame/MegaIconTest/dukeWave.gif
create mode 100644 test/jdk/java/awt/Frame/MegaIconTest/duke_404.gif
create mode 100644 test/jdk/java/awt/Frame/MegaIconTest/fight.gif
create mode 100644 test/jdk/java/awt/Frame/SizeMinimizedTest.java
diff --git a/test/jdk/ProblemList.txt b/test/jdk/ProblemList.txt
index 8344d2a977e..4ffc4bde90c 100644
--- a/test/jdk/ProblemList.txt
+++ b/test/jdk/ProblemList.txt
@@ -797,3 +797,4 @@ java/awt/event/MouseEvent/SpuriousExitEnter/SpuriousExitEnter.java 8254841 macos
java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest1.java 8256289 windows-x64
java/awt/FullScreen/TranslucentWindow/TranslucentWindow.java 8258103 linux-all
java/awt/Focus/FrameMinimizeTest/FrameMinimizeTest.java 8016266 linux-x64
+java/awt/Frame/SizeMinimizedTest.java 8305915 linux-x64
diff --git a/test/jdk/java/awt/Frame/FrameMaximizedTest.java b/test/jdk/java/awt/Frame/FrameMaximizedTest.java
new file mode 100644
index 00000000000..368132937fb
--- /dev/null
+++ b/test/jdk/java/awt/Frame/FrameMaximizedTest.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 1999, 2024, 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.Frame;
+import java.awt.Label;
+
+/*
+ * @test
+ * @bug 4106068
+ * @summary Test to verify maximized window is not too big
+ * @library /java/awt/regtesthelpers
+ * @build PassFailJFrame
+ * @run main/manual FrameMaximizedTest
+ */
+
+public class FrameMaximizedTest {
+ public static void main (String[] args) throws Exception {
+ String INSTRUCTIONS = """
+ Maximize the frame window. Check that the right and bottom edges of the
+ window are not off the edge of the screen. If they are not, the test
+ is successful and the bug is fixed.
+ """;
+
+ PassFailJFrame.builder()
+ .title("Test Instructions")
+ .instructions(INSTRUCTIONS)
+ .rows(4)
+ .columns(40)
+ .testUI(new TestFrame())
+ .build()
+ .awaitAndCheck();
+ }
+}
+
+class TestFrame extends Frame {
+ public TestFrame() {
+ setTitle("FrameMaximizedTest");
+ setSize(500, 300);
+ add("North", new Label("Maximize me and check if my " +
+ "bottom and right edge are on screen."));
+ }
+}
diff --git a/test/jdk/java/awt/Frame/FrameMinimizeTest.java b/test/jdk/java/awt/Frame/FrameMinimizeTest.java
new file mode 100644
index 00000000000..cd3459a7841
--- /dev/null
+++ b/test/jdk/java/awt/Frame/FrameMinimizeTest.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 1999, 2024, 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.Frame;
+
+/*
+ * @test
+ * @bug 4172782
+ * @summary Test if non-resizable frame is minimizable
+ * @library /java/awt/regtesthelpers
+ * @build PassFailJFrame
+ * @run main/manual FrameMinimizeTest
+ */
+
+public class FrameMinimizeTest {
+ public static void main(String[] args) throws Exception {
+ String INSTRUCTIONS = """
+ When the blank FrameMinimizeTest frame is shown, verify that
+ 1. It is not resizable;
+ 2. It is minimizable.
+ """;
+
+ PassFailJFrame.builder()
+ .title("Test Instructions")
+ .instructions(INSTRUCTIONS)
+ .rows(4)
+ .columns(35)
+ .testUI(FrameMinimizeTest::initialize)
+ .build()
+ .awaitAndCheck();
+ }
+
+ public static Frame initialize() {
+ Frame f = new Frame("FrameMinimizeTest");
+ f.setSize(200, 200);
+ f.setResizable(false);
+ return f;
+ }
+}
diff --git a/test/jdk/java/awt/Frame/MegaIconTest/MegaIconTest.java b/test/jdk/java/awt/Frame/MegaIconTest/MegaIconTest.java
new file mode 100644
index 00000000000..3132d49df56
--- /dev/null
+++ b/test/jdk/java/awt/Frame/MegaIconTest/MegaIconTest.java
@@ -0,0 +1,273 @@
+/*
+ * Copyright (c) 1999, 2024, 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.BorderLayout;
+import java.awt.Button;
+import java.awt.Canvas;
+import java.awt.Color;
+import java.awt.Dialog;
+import java.awt.Dimension;
+import java.awt.Frame;
+import java.awt.Graphics;
+import java.awt.GridLayout;
+import java.awt.Image;
+import java.awt.Label;
+import java.awt.MediaTracker;
+import java.awt.Panel;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.awt.image.ImageProducer;
+import java.net.URL;
+
+/*
+ * @test
+ * @bug 4175560
+ * @summary Test use of user-defined icons
+ * @library /java/awt/regtesthelpers
+ * @build PassFailJFrame
+ * @run main/manual MegaIconTest
+ */
+
+public class MegaIconTest {
+ public static void main(String[] args) throws Exception {
+ String INSTRUCTIONS = """
+ Each of the buttons in the main window represents a test
+ of certain icon functionality - background transparency/opacity
+ of the icon, scaling etc.
+ Clicking on each button brings up a window displaying the graphic
+ that should appear in the corresponding icon.
+ Click on each button, minimize the resulting window, and check that
+ the icon is displayed as the test name indicates.
+ On Win32, icons should also be displayed correctly in the title bar.
+ If all the test pass, then this test passes, else fail.
+ """;
+
+ PassFailJFrame.builder()
+ .title("Test Instructions")
+ .instructions(INSTRUCTIONS)
+ .rows(10)
+ .columns(35)
+ .testUI(MegaIconTest::initialize)
+ .build()
+ .awaitAndCheck();
+ }
+
+ public static Frame initialize() {
+ //Create the iconTestFrames and add to IconTestButtons
+ IconTestButtons itb = new IconTestButtons(new IconTestFrame[]{
+ new IconTestFrame("Opaque, Scaled Icon Test",
+ "duke_404.gif"),
+
+ new IconTestFrame("Transparent Icon",
+ "dukeWave.gif"),
+
+ new IconTestFrameBG("Transparent, Scaled Icon with bg",
+ "fight.gif", Color.red),
+
+ new IconTestFrameDlg("Transparent icon w/ Dialog",
+ "dukeWave.gif")
+ });
+ itb.pack();
+ return itb;
+ }
+}
+
+class IconTestButtons extends Frame {
+ public IconTestButtons(IconTestFrame[] iconTests) {
+ IconTestFrame tempTest;
+ Button newBtn;
+ Panel newPnl;
+ DoneLabel newLbl;
+
+ setTitle("MegaIconTest");
+
+ setLayout(new GridLayout(iconTests.length, 1));
+
+ //For each icon test frame
+ //Get name, add button with name and action to
+ //display the window, and add label "done" after
+
+ for (int i = 0; i < iconTests.length; i++) {
+ tempTest = iconTests[i];
+ newBtn = new Button(tempTest.getTestName());
+ newLbl = new DoneLabel();
+ newBtn.addActionListener(new IconTestActionListener(tempTest,
+ newLbl));
+ newPnl = new Panel();
+ newPnl.add(newBtn);
+ newPnl.add(newLbl);
+ add(newPnl);
+ }
+ }
+
+ protected class DoneLabel extends Label {
+ public DoneLabel() {
+ super("Done");
+ setVisible(false);
+ }
+ }
+
+ protected class IconTestActionListener implements ActionListener {
+ IconTestFrame f;
+ DoneLabel l;
+
+ public IconTestActionListener(IconTestFrame frame, DoneLabel label) {
+ this.f = frame;
+ this.l = label;
+ }
+
+ public void actionPerformed(ActionEvent e) {
+ f.pack();
+ f.setVisible(true);
+ l.setVisible(true);
+ IconTestButtons.this.pack();
+ }
+ }
+}
+
+class IconTestFrame extends Frame {
+ private String testName;
+ int width, height;
+ Image iconImage;
+ MediaTracker tracker;
+
+ public IconTestFrame(String testName, String iconFileName) {
+ super(testName);
+ this.testName = testName;
+ tracker = new MediaTracker(this);
+
+ //Set icon image
+ URL url = MegaIconTest.class.getResource(iconFileName);
+ Toolkit tk = Toolkit.getDefaultToolkit();
+ if (tk == null) {
+ System.out.println("Toolkit is null!");
+ }
+ if (url == null) {
+ System.out.println("Can't load icon is null!");
+ return;
+ }
+ try {
+ iconImage = tk.createImage((ImageProducer) url.getContent());
+ } catch (java.io.IOException e) {
+ System.out.println("Unable to load icon image from url: " + url);
+ }
+ tracker.addImage(iconImage, 0);
+ try {
+ tracker.waitForAll();
+ } catch (java.lang.InterruptedException e) {
+ System.err.println(e);
+ }
+ width = iconImage.getWidth(this);
+ height = iconImage.getHeight(this);
+ setIconImage(iconImage);
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ setVisible(false);
+ }
+ });
+
+ setLayout(new BorderLayout());
+ setBackground(Color.YELLOW);
+
+ //Add the icon graphic and instructions to the Frame
+ add(new IconCanvas(), "Center");
+ pack();
+ }
+
+ class IconCanvas extends Canvas {
+ public void paint(Graphics g) {
+ if (IconTestFrame.this.iconImage == null) {
+ throw new NullPointerException();
+ }
+ g.drawImage(IconTestFrame.this.iconImage, 0, 0, this);
+ }
+
+ public Dimension getPreferredSize() {
+ return new Dimension(IconTestFrame.this.width,
+ IconTestFrame.this.height);
+ }
+
+ public Dimension getMinimumSize() {
+ return getPreferredSize();
+ }
+
+ public Dimension getMaximumSize() {
+ return getPreferredSize();
+ }
+ }
+
+ public String getTestName() {
+ return testName;
+ }
+}
+
+class IconTestFrameBG extends IconTestFrame {
+ public IconTestFrameBG(String testName, String iconFileName, Color bg) {
+ super(testName, iconFileName);
+ setBackground(bg);
+ Panel p = new Panel();
+ p.setLayout(new GridLayout(3, 1));
+ p.add(new Label("The background of this window has been set."));
+ p.add(new Label("Unless the default icon background is the same color,"));
+ p.add(new Label("the icon background should NOT be this color."));
+ add(p, "North");
+ pack();
+ }
+}
+
+class IconTestFrameDlg extends IconTestFrame implements ActionListener {
+ Dialog dlg;
+ Button dlgBtn;
+
+ public IconTestFrameDlg(String testName, String iconFilename) {
+ super(testName, iconFilename);
+ Panel p = new Panel();
+ p.setLayout(new GridLayout(4, 1));
+ p.add(new Label("Click on the button below to display a child dialog."));
+ p.add(new Label("On Win32, the Dialog's titlebar icon should match"));
+ p.add(new Label("the titlebar icon of this window."));
+ p.add(new Label("Minimizing this Frame should yield only one icon."));
+ add(p, "North");
+
+ dlg = new Dialog(this);
+ dlg.setSize(200, 200);
+ dlg.add(new Label("Dialog stuff."));
+ dlg.addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ setVisible(false);
+ }
+ });
+
+ dlgBtn = new Button("Display Dialog");
+ dlgBtn.addActionListener(this);
+ add(dlgBtn, "South");
+ }
+
+ public void actionPerformed(ActionEvent e) {
+ dlg.setVisible(true);
+ }
+}
diff --git a/test/jdk/java/awt/Frame/MegaIconTest/dukeWave.gif b/test/jdk/java/awt/Frame/MegaIconTest/dukeWave.gif
new file mode 100644
index 0000000000000000000000000000000000000000..52ada7979ef573053a282c44b707759e7e47d24c
GIT binary patch
literal 1661
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
literal 0
HcmV?d00001
diff --git a/test/jdk/java/awt/Frame/MegaIconTest/fight.gif b/test/jdk/java/awt/Frame/MegaIconTest/fight.gif
new file mode 100644
index 0000000000000000000000000000000000000000..6be1b4972d0de57286ce645cee8f01633e9686a6
GIT binary patch
literal 3737
zcmc)M`(G0I{s-^@5eJoR04c;9;~ledyd-p6K{O<75k-wUrD3i{c`zy~Y6C?y#lplc
zE@xBH%^QW5)o!N(Q;xRfu}stI>w4*8m+fj>dpn--{1e~jygr|Ke?IS-$NVz$c+BdA
zcosV=AIJti%>uKiPoF;hZ~FA?&784kZ-$>e`}77~JwuJ5$Fs3H!(;tpWA?FORA>LN
z@oN8Y|C~m9ztL{*@3*52SM55pU1Pp#@4t$Y89V2gJI%wLjcEEiMH(}@Mm6@EjcDv<
zfwIxuILByjG+u2qpy_O6%Nm&yW2147;i}QlX*3v&x=y3cY()2AfsuxWYlPSaW1|73
zGaGb`294REX*4Jd23TM~TM(i{Z$g_WO`}d@)M<1&rBO#ibZ84i!_>@CYLrHe(x6f5
zG)lBqXcPtwSEPYp4MfvGkOo9FAXAA_7?cW~QlU_CMM@f|gg_;TDA5)`Q=nuTg-ods
zi4<&s0%0qdOa+W6Xovzr11dnKOren}WOJk%nN%s0Dr6Fo43WwZrVOOX08lEGNl_Ao
zR3ejtutXx0phW0ZQVEwU0caw0C6bCz0;xzK5eWn$5EcQjKp;U&0g5XUa0LPc5kNEn
zK;sHTTrL^`7sVEE*<3Dya6y<0(%5VPo6TjT5H1^Gv(X)ZhMo}w4T3P)2opgd7=dUA
z1R(M7T_Z&151>6pS!oCKG^QCJg^?z%&@9(O{4U0}u^H(2_O>qCqe^(EtcSOB4t}
zXbpf6fDRhE0#N`Oz-qMu{~zGra2Nm>0Yc{NS=`-&wP*-Tr8Ud+W_Z^DnPAvf!3-D>q?DY>i+)pVYGU==rTF
z+moJ0)LnArMx1dhj>#R^(`=|rD8`%DFPwcVj7tp@OMNx-%;#%u;C5d5&9ur_R_7=;
z$Dfuq_tjhmjwR#gTW)ESTt;zzV};JymeTl=)VdhVOL6YRzVhrr8izO_<~U{%ySrl;
zuO@8y43#i8)a0ts#h(=Jnb1Yv{amYrwbV6B7u{n`0S=${)MNXzrJD}V+gtbeXyQJ-
zjWCpbeswP6pC^(7gHrXJ>J7X50=`K;Oxg&IGN!VRul6M*JCJyK+py<}+jBHA2uo
zHnlX96FkII-+rgU3xrxVF>t!x_qm}q!4KR<)J@y-|eD#Y(CxVD_9ipD1{BJuJMp&b8nG6
z_;L
zVQ=3rcXAY}ihZMk$74LtW`9`Y;u3aZlcD7v)S#dEh4!us8wG@y!51+E)jI30USzvU
zUKD~wFdn%mv)dZjWE&
zO~+g;NhDLYEN!9}!{0s*{_`!JdW6z3lFiW96B&vdiHVIp&!Mvq+~%LU_wCFx0V5u|
z731AdRFplrCXTwf9Qn2S#q&4W`}l!$zDH)vbq~k}J&tvC8=u7SFXRW@d~qs$71fkF
z@Kw4cM(cyqln8OLg+7OXu2*5^yx+J*^mRWAmSz?2PU;bRE!V2?CNSY~CN4Z#?aY@u
zBn7u&dwU(BSqVio@6S3-<8Kw6ya^1TXL{sQ`Uq*s8b@p|;dB%JS6mU{M5;afWvzg;
zvr5hNl$M#>t*$dYOAZEL=BfH{VE!=uObt&o(iC&ww@5c%#lXQMxAR*vTOHnU9gpw0
znZgRFNxK?AIjPd-H3&=N`7mMo%mVr~240e>Ivh!l!P_%0CVp;r^d2F3JBo^(1UQ_H
z#VHqcYcjSWlytf6`}~34DbGN*%T8{{TI*$|A^wZNrY>?!vHD98OE}gW54#NnzE$M_
zoRK3D4^&I(dl`PK;IjG)=_C#HD8qZ&alQ&6T-x?ZT)?D<*&z+%0^m1vIezI`c-E4g
z>PKb-tFZI|?5gHTTwSUM5cYn#I(HG4@o+OQMz~VUGdZu`Y6~G#>M&krh_vwN3GSeZ
zPKyMIw5Cb7t@VkyO^iiNoPT47>NCr@)RPusId6hw7dsrNvIMSa-Cd;P-*ZU5N3lr4
zLbJc^-PhL%2v?b_R6@T0Cj<2^2mabj+U|6)c`Rhes_(j6Qky-mi%ug2Ws-HuW
zA7YOP14wb(4^%8$_zxcSM!;gztKRCv!S{EGK9qm_uA<5Gz5Up|xO?BskF&kPmXn8l
zYYK<%X(z;f#;L#hX4>NV@9$-hPg*tmBie6T+U`pvM7JlP$vO3r3KznvaM?NHv`8?o
zj^E=!$U1H{Wb|RY=Qd5(b>#(;ok#xcc1dA|nyfF6fC~mCmsds;AEi
zLI5#b_(c$-#l~Kr33|3xR9$xs41M8p^u1)SUqxrH_qFoMpb=np|JsQse;xgBYT*p$
zpDg6{$q3)UAJO+_vHsQ;jpfe90@s-H>j_|ZsxHOYwLst&9=?NDj(stX&(Fm#&;oVI
z^%m=UJ#P&eh;h&$D7My{K3N^0XSXd9Pvu6@um7_siE5%oNM2AwyZQq-G?@a0e3
zyszIRv`#BHzsg;cHq`HpQ{lp<%PWyYhXr2XZQMTV%c~mrzz~Stc#uq3(7#tLy!@f9
z*j7qnysubNW()2==`0P-TItE!e5p0AwF;XFED>Ggx2POr2i+HM$fn=FuKn_RiZy`I_5|S&lZ)?L$cPwD0_?fvxzoD(utb
zJyj|0T>)F)mPu)FB<`}6o>ZN1BuKq{1<6qsdM~Z=!lk_V94+;MrF7*580=`{7FONC
z5zehiZ|iWL?_5R5*?DEE_Rn;hFX!L%&j{B4`oO!*>Cwe|I(>Vs`|{-uMTk)DTFt=F
zY-4NEv(!|RMVt4lN`)IxJ9|IVTyKz9r0+iyU&W1&;@LEp9T>5Pv_Bt#J4(4KMs$b&
zs~Fz`N9y>azg_D-Mad{AN_=FB6lG!nw@eon`fr6DxZ%~1S-ve*UCX`t)byM}nCHK9
zC3w?5=(S8A`EVtrM9A~Mr5)p6#^6&5Zp=bD#h2aw_zK3u*hs!t$zs(=R?alevZ8Ha!?^1zRl(pFYD02M{^NW!o|MiqN@p
z9Q>}%aTUdNsLqM}-ix6kS=x7oJ`v?a(THKbgP)+~WEZDo%y}VEo0%&NQ)7x8|89w>
zO~(+&F=n1acO>lE?l&X^SB9sZ`Xma4A*!6xw+qUd??V+j+Qwb4)PY;voIR;uc^be`
zYtDycu{jxdTfmy^3hXNsyNV(Af#4;d1tofKu-*j>V(cq()C!3m_0C^#l0OzCl>p+d
z9?b$%L?{xw^)6tV)jL<~!BRO`t#`g+aS{w-J;HrBddy<2t5S$5WBF0_q!C}YqOKg0
zJha1~-xVKR#t3N^8=Y5=Dx?Pz-MFTc@53l#U+znv9F8tE!GFEi)a-dwwiF;du8)ukEHI
U)zYBCAN*CnNe(bc7!0udzewrFYybcN
literal 0
HcmV?d00001
diff --git a/test/jdk/java/awt/Frame/SizeMinimizedTest.java b/test/jdk/java/awt/Frame/SizeMinimizedTest.java
new file mode 100644
index 00000000000..2520cf42892
--- /dev/null
+++ b/test/jdk/java/awt/Frame/SizeMinimizedTest.java
@@ -0,0 +1,140 @@
+/*
+ * Copyright (c) 1999, 2024, 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.Dimension;
+import java.awt.EventQueue;
+import java.awt.Frame;
+import java.awt.Point;
+import java.awt.Robot;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+/*
+ * @test
+ * @key headful
+ * @bug 4065534
+ * @summary Frame.setSize() doesn't change size if window is in an iconified state
+ * @run main SizeMinimizedTest
+ */
+
+public class SizeMinimizedTest {
+ private static Frame frame;
+ private static final int INITIAL_SIZE = 100;
+ private static final int INITIAL_X = 150;
+ private static final int INITIAL_Y = 50;
+ private static final int RESET_SIZE = 200;
+ private static final int OFFSET = 10;
+ private static int iterationCnt = 0;
+ private static Dimension expectedSize;
+ private static Dimension frameSize;
+ private static Point expectedLoc;
+ private static Point frameLoc;
+
+ public static void main(String[] args) throws Exception {
+ Robot robot = new Robot();
+ try {
+ EventQueue.invokeAndWait(() -> {
+ createUI();
+ });
+ robot.waitForIdle();
+ robot.delay(1000);
+
+ EventQueue.invokeAndWait(() -> {
+ frame.setState(Frame.ICONIFIED);
+ });
+ robot.waitForIdle();
+ robot.delay(100);
+
+ EventQueue.invokeAndWait(() -> {
+ frame.setSize(RESET_SIZE, RESET_SIZE);
+ });
+ robot.waitForIdle();
+ robot.delay(100);
+
+ for (int i = 0; i < 5; i++) {
+ EventQueue.invokeAndWait(() -> {
+ Point pt = frame.getLocation();
+ frame.setLocation(pt.x + OFFSET, pt.y);
+ });
+ iterationCnt++;
+ robot.waitForIdle();
+ robot.delay(100);
+ }
+ EventQueue.invokeAndWait(() -> {
+ frame.setState(Frame.NORMAL);
+ });
+ robot.waitForIdle();
+ robot.delay(100);
+
+ System.out.println("Test Passed!");
+ } finally {
+ EventQueue.invokeAndWait(() -> {
+ if (frame != null) {
+ frame.dispose();
+ }
+ });
+ }
+ }
+
+ public static void createUI() {
+ frame = new Frame("Frame size test");
+ frame.setSize(INITIAL_SIZE, INITIAL_SIZE);
+ frame.setLocation(INITIAL_X, INITIAL_Y);
+
+ frame.addWindowListener(new WindowAdapter() {
+ @Override
+ public void windowOpened(WindowEvent e) {
+ System.out.println("Initial Frame Size: " + frame.getSize());
+ System.out.println("Initial Frame Location: " +
+ frame.getLocationOnScreen());
+ }
+ });
+
+ frame.addWindowStateListener(new WindowAdapter() {
+ @Override
+ public void windowStateChanged(WindowEvent e) {
+ if (e.getNewState() == Frame.NORMAL) {
+ System.out.println("Frame Size: " + frame.getSize());
+ System.out.println("Frame Location: " +
+ frame.getLocationOnScreen());
+ expectedSize = new Dimension(RESET_SIZE, RESET_SIZE);
+ frameSize = frame.getSize();
+
+ if (!expectedSize.equals(frameSize)) {
+ throw new RuntimeException("Test Failed due to size mismatch.");
+ }
+
+ expectedLoc = new Point(INITIAL_X + OFFSET * iterationCnt,
+ INITIAL_Y);
+ frameLoc = frame.getLocationOnScreen();
+
+ if (!expectedLoc.equals(frameLoc)) {
+ throw new RuntimeException("Test Failed due to " +
+ "location mismatch.");
+ }
+ }
+ }
+ });
+ frame.setVisible(true);
+ }
+}