8340366: Open source several AWT Dialog tests - Batch 3
Reviewed-by: prr, dnguyen
This commit is contained in:
parent
2d8fcc4271
commit
a7d2077fe2
@ -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
|
||||
|
114
test/jdk/java/awt/Dialog/DialogModalityTest.java
Normal file
114
test/jdk/java/awt/Dialog/DialogModalityTest.java
Normal 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;
|
||||
}
|
||||
}
|
105
test/jdk/java/awt/Dialog/DialogResizeTest2.java
Normal file
105
test/jdk/java/awt/Dialog/DialogResizeTest2.java
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
150
test/jdk/java/awt/Dialog/FileDialogUserFilterTest.java
Normal file
150
test/jdk/java/awt/Dialog/FileDialogUserFilterTest.java
Normal 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;
|
||||
}
|
||||
}
|
138
test/jdk/java/awt/Dialog/HideDialogTest.java
Normal file
138
test/jdk/java/awt/Dialog/HideDialogTest.java
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
147
test/jdk/java/awt/Dialog/ModalDialogTest.java
Normal file
147
test/jdk/java/awt/Dialog/ModalDialogTest.java
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user