From a7d2077fe20d73f49a003c15469c2aa9bda1b30f Mon Sep 17 00:00:00 2001
From: Tejesh R
Date: Thu, 10 Oct 2024 15:50:19 +0000
Subject: [PATCH] 8340366: Open source several AWT Dialog tests - Batch 3
Reviewed-by: prr, dnguyen
---
test/jdk/ProblemList.txt | 2 +
.../java/awt/Dialog/DialogModalityTest.java | 114 +++++++++++++
.../java/awt/Dialog/DialogResizeTest2.java | 105 ++++++++++++
.../awt/Dialog/FileDialogUserFilterTest.java | 150 ++++++++++++++++++
test/jdk/java/awt/Dialog/HideDialogTest.java | 138 ++++++++++++++++
test/jdk/java/awt/Dialog/ModalDialogTest.java | 147 +++++++++++++++++
6 files changed, 656 insertions(+)
create mode 100644 test/jdk/java/awt/Dialog/DialogModalityTest.java
create mode 100644 test/jdk/java/awt/Dialog/DialogResizeTest2.java
create mode 100644 test/jdk/java/awt/Dialog/FileDialogUserFilterTest.java
create mode 100644 test/jdk/java/awt/Dialog/HideDialogTest.java
create mode 100644 test/jdk/java/awt/Dialog/ModalDialogTest.java
diff --git a/test/jdk/ProblemList.txt b/test/jdk/ProblemList.txt
index 8f6b0c74664..fb20eb1f63d 100644
--- a/test/jdk/ProblemList.txt
+++ b/test/jdk/ProblemList.txt
@@ -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
diff --git a/test/jdk/java/awt/Dialog/DialogModalityTest.java b/test/jdk/java/awt/Dialog/DialogModalityTest.java
new file mode 100644
index 00000000000..d8ac9e4620b
--- /dev/null
+++ b/test/jdk/java/awt/Dialog/DialogModalityTest.java
@@ -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 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;
+ }
+}
diff --git a/test/jdk/java/awt/Dialog/DialogResizeTest2.java b/test/jdk/java/awt/Dialog/DialogResizeTest2.java
new file mode 100644
index 00000000000..3124719637a
--- /dev/null
+++ b/test/jdk/java/awt/Dialog/DialogResizeTest2.java
@@ -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);
+ }
+ }
+}
diff --git a/test/jdk/java/awt/Dialog/FileDialogUserFilterTest.java b/test/jdk/java/awt/Dialog/FileDialogUserFilterTest.java
new file mode 100644
index 00000000000..80ff9ed0bde
--- /dev/null
+++ b/test/jdk/java/awt/Dialog/FileDialogUserFilterTest.java
@@ -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 field, a directory into
+ the field (or leave the default values).
+ 2. Then click the 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;
+ }
+}
diff --git a/test/jdk/java/awt/Dialog/HideDialogTest.java b/test/jdk/java/awt/Dialog/HideDialogTest.java
new file mode 100644
index 00000000000..78d0344a6cf
--- /dev/null
+++ b/test/jdk/java/awt/Dialog/HideDialogTest.java
@@ -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);
+ }
+ }
+}
diff --git a/test/jdk/java/awt/Dialog/ModalDialogTest.java b/test/jdk/java/awt/Dialog/ModalDialogTest.java
new file mode 100644
index 00000000000..aceacc9209a
--- /dev/null
+++ b/test/jdk/java/awt/Dialog/ModalDialogTest.java
@@ -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);
+ }
+ }
+}