8340366: Open source several AWT Dialog tests - Batch 3

Reviewed-by: prr, dnguyen
This commit is contained in:
Tejesh R 2024-10-10 15:50:19 +00:00
parent 2d8fcc4271
commit a7d2077fe2
6 changed files with 656 additions and 0 deletions

View File

@ -473,6 +473,8 @@ java/awt/KeyboardFocusmanager/ConsumeNextMnemonicKeyTypedTest/ConsumeNextMnemoni
java/awt/Window/GetScreenLocation/GetScreenLocationTest.java 8225787 linux-x64
java/awt/Dialog/MakeWindowAlwaysOnTop/MakeWindowAlwaysOnTop.java 8266243 macosx-aarch64
java/awt/Dialog/FileDialogUserFilterTest.java 8001142 generic-all
java/awt/dnd/BadSerializationTest/BadSerializationTest.java 8277817 linux-x64,windows-x64
java/awt/dnd/DragSourceMotionListenerTest.java 8225131 windows-all
java/awt/dnd/RejectDragTest.java 7124259 macosx-all

View File

@ -0,0 +1,114 @@
/*
* Copyright (c) 1998, 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.Component;
import java.awt.Dialog;
import java.awt.Event;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.Window;
import java.util.List;
/*
* @test
* @bug 4058370
* @summary Test to verify Modality of Dialog
* @library /java/awt/regtesthelpers
* @build PassFailJFrame
* @run main/manual DialogModalityTest
*/
public class DialogModalityTest {
public static void main(String[] args) throws Exception {
String INSTRUCTIONS = """
1. When the test is running, there will be a Frame, a Modal Dialog
and a Window that is Modal Dialog's parent.
2. Verify that it is impossible to bring up the menu in Frame before
closing the Modal Dialog.
""";
PassFailJFrame.builder()
.title("Test Instructions")
.instructions(INSTRUCTIONS)
.rows((int) INSTRUCTIONS.lines().count() + 2)
.columns(35)
.testUI(initialize())
.build()
.awaitAndCheck();
}
public static List<Window> initialize() {
Frame f = new Frame("Parent Frame");
DialogTest dlg = new DialogTest(f, "Modal Dialog");
f.add(new Button("push me"));
f.setSize(200, 200);
f.setLocation(210, 1);
dlg.setBounds(210, 203, 200, 200);
return List.of(f, dlg);
}
}
class DialogTest extends Dialog {
Button closeButton;
Frame parent;
public DialogTest(Frame parent, String title) {
this(parent, title, true);
}
public DialogTest(Frame parent, String title, boolean modal) {
super(parent, title, modal);
this.parent = parent;
setLayout(new BorderLayout());
Panel buttonPanel = new Panel();
closeButton = new Button("Close");
buttonPanel.add(closeButton);
add("Center", buttonPanel);
pack();
}
public boolean action(Event e, Object arg) {
if (e.target == closeButton) {
Dialog dialog = null;
Component c = (Component) e.target;
while (c != null && !(c instanceof Dialog)) {
c = c.getParent();
}
if (c != null) {
dialog = (Dialog) c;
}
if (dialog == null) {
return false;
}
dialog.setVisible(false);
dialog.dispose();
return true;
}
return false;
}
}

View File

@ -0,0 +1,105 @@
/*
* Copyright (c) 2001, 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.Button;
import java.awt.Dialog;
import java.awt.Frame;
import java.awt.GridLayout;
/*
* @test
* @bug 4172302
* @summary Test to make sure non-resizable Dialogs can be resized with the
* setSize() method.
* @library /java/awt/regtesthelpers
* @build PassFailJFrame
* @run main/manual DialogResizeTest2
*/
public class DialogResizeTest2 {
public static void main(String[] args) throws Exception {
String INSTRUCTIONS = """
This tests the programmatic resizability of non-resizable Dialogs
Even when a Dialog is set to be non-resizable, it should be
programmatically resizable using the setSize() method.
1. Initially the Dialog will be resizable. Try using the \\"Smaller\\"
and \\"Larger\\" buttons to verify that the Dialog resizes correctly
2. Then, click the \\"Toggle\\" button to make the Dialog non-resizable
3. Again, verify that clicking the \\"Larger\\" and \\"Smaller\\" buttons
causes the Dialog to get larger and smaller. If the Dialog does
not change size, or does not re-layout correctly, the test FAILS
""";
PassFailJFrame.builder()
.title("Test Instructions")
.instructions(INSTRUCTIONS)
.rows((int) INSTRUCTIONS.lines().count() + 2)
.columns(35)
.testUI(initialize())
.logArea(8)
.build()
.awaitAndCheck();
}
public static Frame initialize() {
Frame frame = new Frame("Parent Frame");
frame.add(new Button("Button"));
frame.setSize(100, 100);
new dlg(frame).setVisible(true);
return frame;
}
static class dlg extends Dialog {
public dlg(Frame f_) {
super(f_, "Dialog", false);
setSize(200, 200);
Button bLarger = new Button("Larger");
bLarger.addActionListener(e -> setSize(400, 400));
Button bSmaller = new Button("Smaller");
bSmaller.addActionListener(e -> setSize(200, 100));
Button bCheck = new Button("Resizable?");
bCheck.addActionListener(e -> {
if (isResizable()) {
PassFailJFrame.log("Dialog is resizable");
} else {
PassFailJFrame.log("Dialog is not resizable");
}
});
Button bToggle = new Button("Toggle");
bToggle.addActionListener(e -> {
if (isResizable()) {
setResizable(false);
PassFailJFrame.log("Dialog is now not resizable");
} else {
setResizable(true);
PassFailJFrame.log("Dialog is now resizable");
}
});
setLayout(new GridLayout(1, 4));
add(bSmaller);
add(bLarger);
add(bCheck);
add(bToggle);
}
}
}

View File

@ -0,0 +1,150 @@
/*
* Copyright (c) 2001, 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.Button;
import java.awt.Checkbox;
import java.awt.Component;
import java.awt.Container;
import java.awt.Event;
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;
import java.io.File;
import java.io.FilenameFilter;
/*
* @test
* @bug 4293697 4416433 4417139 4409600
* @summary Test to verify that user filter always gets called on changing the
* directory in FileDialog
* @library /java/awt/regtesthelpers
* @build PassFailJFrame
* @run main/manual FileDialogUserFilterTest
*/
public class FileDialogUserFilterTest {
public static void main(String[] args) throws Exception {
String INSTRUCTIONS = """
1. Enter a mask into the <filter> field, a directory into
the <directory> field (or leave the default values).
2. Then click the <Load> button, file dialog will appear.
Output of the user filter will be shown in the output
area. Enter several different directories to the file dialog
via double-clicking on the directory list. The output
area should show some filtering output on each directory
change. If any output was only given on dialog startup,
the test is FAILED.
3. Look at the list of files accepted by the filter.
If some files do not match the filter,
the test is FAILED.
4. Open dialog with an empty filter.
Enter some directories with a lot of files (like /usr/bin).
If dialog crashes the test is FAILED.
Enter the directory that contain files and other directories.
If the directories are shown in the files box along with files
then the test is FAILED.
5. Click in checkbox 'do not use filter', make it checked.
Open dialog, enter the directory with some files.
If no files is shown in the File list box (while you are sure
there are some files there) the test is FAILED
Otherwise it is PASSED."
""";
PassFailJFrame.builder()
.title("Test Instructions")
.instructions(INSTRUCTIONS)
.rows((int) INSTRUCTIONS.lines().count() + 2)
.columns(35)
.testUI(new DialogFilterTest())
.build()
.awaitAndCheck();
}
}
class DialogFilterTest extends Frame implements FilenameFilter {
FileDialog fd;
static TextField tfDirectory = new TextField();
static TextField tfFile = new TextField();
static TextField tfFilter = new TextField();
static Checkbox useFilterCheck = new Checkbox("do not use filter");
public DialogFilterTest() {
setTitle("File Dialog User Filter test");
add("North", new Button("Load"));
Panel p = new Panel();
p.setLayout(new GridBagLayout());
addRow(p, new Label("directory:", Label.RIGHT), tfDirectory);
addRow(p, new Label("file:", Label.RIGHT), tfFile);
addRow(p, new Label("filter:", Label.RIGHT), tfFilter);
addRow(p, new Label(""), useFilterCheck);
tfFilter.setText(".java");
tfDirectory.setText(".");
add("Center", p);
setSize(300, 200);
}
static void addRow(Container cont, Component c1, Component c2) {
GridBagLayout gbl = (GridBagLayout) cont.getLayout();
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;
cont.add(c1);
gbl.setConstraints(c1, c);
c.gridwidth = GridBagConstraints.REMAINDER;
c.weightx = 1.0;
cont.add(c2);
gbl.setConstraints(c2, c);
}
public boolean accept(File dir, String name) {
System.out.println("File " + dir + " String " + name);
if (fd.getMode() == FileDialog.LOAD) {
return name.lastIndexOf(tfFilter.getText()) > 0;
}
return true;
}
public boolean action(Event evt, Object what) {
boolean load = "Load".equals(what);
if (load || "Save".equals(what)) {
fd = new FileDialog(new Frame(), null,
load ? FileDialog.LOAD : FileDialog.SAVE);
fd.setDirectory(tfDirectory.getText());
fd.setFile(tfFile.getText());
if (!useFilterCheck.getState()) {
fd.setFilenameFilter(this);
}
fd.setVisible(true);
tfDirectory.setText(fd.getDirectory());
tfFile.setText(fd.getFile());
return true;
}
return false;
}
}

View File

@ -0,0 +1,138 @@
/*
* Copyright (c) 1997, 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.Color;
import java.awt.Dialog;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/*
* @test
* @bug 4048664 4065506 4122094 4171979
* @summary Test if Dialog can be successfully hidden, see that no other app
* comes to front, see if hide + dispose causes assertion failure
* @library /java/awt/regtesthelpers
* @build PassFailJFrame
* @run main/manual HideDialogTest
*/
public class HideDialogTest {
public static void main(String[] args) throws Exception {
String INSTRUCTIONS = """
1. A Frame should appear with a "test" button in it
2. Click on the "test" button. A Dialog will appear with a "dismiss" button
and a "dismiss-with-dispose" button
3. First, click on the "dismiss-with-dispose" button. Verify that
no assertion failure appears.
4. Now, click on the "dismiss" button. The Dialog should go away.
5. Repeat from (2) 10-20 times.
6. When the dialog goes away check that the frame window does not briefly
get obscured by another app or repaint it's entire area. There should be
no flicker at all in areas obscured by the dialog. (4065506 4122094)
If there is the test fails.
7. If the Dialog is successfully hidden each time, the test passed. If the
Dialog did not hide, the test failed (4048664).
NOTE: When the dialog does not go away (meaning the bug has manifested itself),
the "dismiss-with-dispose" button can be used to get rid of it.
""";
PassFailJFrame.builder()
.title("Test Instructions")
.instructions(INSTRUCTIONS)
.rows((int) INSTRUCTIONS.lines().count() + 2)
.columns(40)
.testUI(new MyFrame())
.build()
.awaitAndCheck();
}
}
class MyDialog extends Dialog {
public MyDialog(Frame f) {
super(f, "foobar", true);
setSize(200, 200);
setLayout(new BorderLayout());
Panel p = new Panel();
p.setLayout(new FlowLayout(FlowLayout.CENTER));
Button okButton;
okButton = new Button("dismiss");
p.add(okButton);
okButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Calling setVisible(false)");
setVisible(false);
}
});
Button newButton;
p.add(newButton = new Button("dismiss-with-dispose"));
newButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Calling setVisible(false) + dispose()");
setVisible(false);
dispose();
}
});
add("South", p);
pack();
}
}
class MyFrame extends Frame implements ActionListener {
public MyFrame() {
super();
setSize(600, 400);
setTitle("HideDialogTest");
setLayout(new BorderLayout());
Panel toolbar = new Panel();
toolbar.setLayout(new FlowLayout(FlowLayout.LEFT));
Button testButton = new Button("test");
testButton.addActionListener(this);
toolbar.add(testButton);
add("North", toolbar);
}
public void actionPerformed(ActionEvent e) {
String s = e.getActionCommand();
if (s.equals("test")) {
System.out.println("Begin test");
MyDialog d = new MyDialog(this);
d.setVisible(true);
System.out.println("End test");
}
}
public void paint(Graphics g) {
for (int i = 0; i < 10; i++) {
g.setColor(Color.red);
g.fillRect(0, 0, 2000, 2000);
g.setColor(Color.blue);
g.fillRect(0, 0, 2000, 2000);
}
}
}

View File

@ -0,0 +1,147 @@
/*
* 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.Checkbox;
import java.awt.Dialog;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
/*
* @test
* @bug 4078176
* @summary Test to verify Modal dialogs don't act modal if addNotify()
* is called before setModal(true).
* @library /java/awt/regtesthelpers
* @build PassFailJFrame
* @run main/manual ModalDialogTest
*/
public class ModalDialogTest implements ActionListener {
public boolean modal = true;
Button closeBtn = new Button("Close me");
Button createBtn = new Button("Create Dialog");
Button createNewBtn = new Button("Create Modal Dialog");
Button lastBtn = new Button("Show Last Dialog");
Dialog dialog;
Dialog newDialog;
Frame testFrame;
public static void main(String[] args) throws Exception {
String INSTRUCTIONS = """
1. Use 'Modal' checkbox to select which dialog you're
going to create - modal or non-modal.
(this checkbox affects only new created dialog but
not existing one)
2. Use 'Create Dialog' button to create a dialog.
If you have selected 'Modal' checkbox then dialog has to
be created modal - you can make sure of that clicking
on any other control (i.e. 'Modal' checkbox) - they
should not work.
3. Use 'Show Last Dialog' button to bring up last
created dialog - to make sure that if you show/hide
modal dialog several times it stays modal.
4. On the appearing dialog there are two buttons:
'Close Me' which closes the dialog,
and 'Create Modal Dialog' which creates one more
MODAL dialog just to make sure that
in situation with two modal dialogs all is fine.
5. If created modal dialogs are really modal
(which means that they blocks the calling app)
then test is PASSED, otherwise it's FAILED."
""";
ModalDialogTest test = new ModalDialogTest();
PassFailJFrame.builder()
.title("Test Instructions")
.instructions(INSTRUCTIONS)
.rows((int) INSTRUCTIONS.lines().count() + 2)
.columns(35)
.testUI(test.initialize())
.build()
.awaitAndCheck();
}
public Frame initialize() {
testFrame = new Frame("Parent Frame");
Frame frame = new Frame("Modal Dialog test");
Panel panel = new Panel();
panel.setLayout(new BorderLayout());
createBtn.addActionListener(this);
createNewBtn.addActionListener(this);
closeBtn.addActionListener(this);
lastBtn.addActionListener(this);
panel.add("Center", createBtn);
panel.add("South", lastBtn);
Checkbox cb = new Checkbox("Modal", modal);
cb.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
modal = ((Checkbox) e.getSource()).getState();
}
});
panel.add("North", cb);
panel.setSize(200, 100);
frame.add(panel);
frame.pack();
return frame;
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == createBtn) {
if (dialog != null) {
dialog.dispose();
}
dialog = new Dialog(testFrame, "Modal Dialog");
dialog.add("North", closeBtn);
dialog.add("South", createNewBtn);
createBtn.setEnabled(false);
dialog.pack();
dialog.setModal(modal);
dialog.setVisible(true);
} else if (e.getSource() == closeBtn && dialog != null) {
createBtn.setEnabled(true);
dialog.setVisible(false);
} else if (e.getSource() == lastBtn && dialog != null) {
dialog.setVisible(true);
} else if (e.getSource() == createNewBtn && newDialog == null) {
newDialog = new Dialog(testFrame, "New Modal Dialog");
Button clsBtn = new Button("Close Me");
clsBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
newDialog.dispose();
newDialog = null;
}
});
newDialog.add("North", clsBtn);
newDialog.pack();
newDialog.setModal(true);
newDialog.setVisible(true);
}
}
}