8055836: move awt tests from AWT_Modality to OpenJDK repository - part 9

Some modality tests for Print dialog were added

Reviewed-by: pchelko
This commit is contained in:
Alexander Stepanov 2014-11-18 16:32:04 +04:00
parent 9a4645749f
commit ff18bab0ed
3 changed files with 421 additions and 0 deletions

View File

@ -0,0 +1,44 @@
<!--
Copyright (c) 2007, 2014, 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.
-->
<html>
<head>
<title> PrintDialogsTest </title>
</head>
<body>
<applet code="PrintDialogsTest.class" width=250 height=350></applet>
Please select dialog modality type and parent; also select
the print auxiliary dialog to be displayed (Page Setup or Print dialog).
Then click "Start test" button.
When the windows will appear check if modal blocking for Dialog works as expected.
Then push "Open" button on the Dialog to show the auxiliary dialog and check
if it blocks the rest of the application. Then close it and check correctness
of modal blocking behavior for the Dialog again. To close all the test
windows please push "Finish" button.
To finish the overall test push "Pass" or "Fail" button depending on result.
</body>
</html>

View File

@ -0,0 +1,160 @@
/*
* Copyright (c) 2007, 2014, 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.
*/
/*
* @test
* @bug 8055836 8057694 8055752
* @summary Check if Print and Page Setup dialogs lock other windows;
* check also correctness of modal behavior for other dialogs.
*
* @run applet/manual=yesno PrintDialogsTest.html
*/
import java.applet.Applet;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class PrintDialogsTest extends Applet implements ActionListener {
private Button btnTest;
private Checkbox cbPage, cbPrint,
cbNullDlg, cbNullFrm, cbHiddDlg, cbHiddFrm, cbDlg, cbFrm,
cbModal, cbAppModal, cbTKModal, cbDocModal, cbModeless, cbNonModal;
private CheckboxGroup groupDialog, groupParent, groupModType;
public void actionPerformed(ActionEvent e) {
if (!btnTest.equals(e.getSource())) { return; }
boolean isPrintDlg = groupDialog.getSelectedCheckbox().equals(cbPrint);
Test.DialogParent p = null;
Checkbox cbParent = groupParent.getSelectedCheckbox();
if (cbParent.equals(cbNullDlg)) {
p = Test.DialogParent.NULL_DIALOG;
} else if (cbParent.equals(cbNullFrm)) {
p = Test.DialogParent.NULL_FRAME;
} else if (cbParent.equals(cbHiddDlg)) {
p = Test.DialogParent.HIDDEN_DIALOG;
} else if (cbParent.equals(cbHiddFrm)) {
p = Test.DialogParent.HIDDEN_FRAME;
} else if (cbParent.equals(cbDlg)) {
p = Test.DialogParent.DIALOG;
} else if (cbParent.equals(cbFrm)) {
p = Test.DialogParent.FRAME;
}
boolean modal = false;
Dialog.ModalityType type = null;
Checkbox cbModType = groupModType.getSelectedCheckbox();
if (cbModType.equals(cbModal)) {
modal = true;
} else if (cbModType.equals(cbNonModal)) {
modal = false;
} else if (cbModType.equals(cbAppModal)) {
type = Dialog.ModalityType.APPLICATION_MODAL;
} else if (cbModType.equals(cbDocModal)) {
type = Dialog.ModalityType.DOCUMENT_MODAL;
} else if (cbModType.equals(cbTKModal)) {
type = Dialog.ModalityType.TOOLKIT_MODAL;
} else if (cbModType.equals(cbModeless)) {
type = Dialog.ModalityType.MODELESS;
}
if (type == null) {
(new Test(isPrintDlg, modal, p)).start();
} else {
(new Test(isPrintDlg, type, p)).start();
}
}
private void createGUI() {
setLayout(new BorderLayout());
setSize(350, 200);
Panel panel = new Panel();
panel.setLayout(new GridLayout(18, 1));
btnTest = new Button("Start test");
btnTest.addActionListener(this);
panel.add(btnTest);
panel.add(new Label("Dialog parent:"));
groupParent = new CheckboxGroup();
cbNullDlg = new Checkbox("NULL Dialog" , groupParent, true );
cbNullFrm = new Checkbox("NULL Frame" , groupParent, false);
cbHiddDlg = new Checkbox("Hidden Dialog", groupParent, false);
cbHiddFrm = new Checkbox("Hidden Frame" , groupParent, false);
cbDlg = new Checkbox("Dialog" , groupParent, false);
cbFrm = new Checkbox("Frame" , groupParent, false);
panel.add(cbNullDlg);
panel.add(cbNullFrm);
panel.add(cbHiddDlg);
panel.add(cbHiddFrm);
panel.add(cbDlg);
panel.add(cbFrm);
panel.add(new Label("Dialog modality type:"));
groupModType = new CheckboxGroup();
cbModal = new Checkbox("Modal" , groupModType, true );
cbNonModal = new Checkbox("Non-modal" , groupModType, false);
cbAppModal = new Checkbox("Application modal", groupModType, false);
cbDocModal = new Checkbox("Document modal" , groupModType, false);
cbTKModal = new Checkbox("Toolkit modal" , groupModType, false);
cbModeless = new Checkbox("Modeless" , groupModType, false);
panel.add(cbModal);
panel.add(cbNonModal);
panel.add(cbAppModal);
panel.add(cbDocModal);
panel.add(cbTKModal);
panel.add(cbModeless);
add(panel);
panel.add(new Label("Print dialog type:"));
groupDialog = new CheckboxGroup();
cbPage = new Checkbox("Page Setup", groupDialog, true);
cbPrint = new Checkbox("Print", groupDialog, false);
panel.add(cbPage);
panel.add(cbPrint);
validate();
setVisible(true);
}
public void start() {
try {
EventQueue.invokeAndWait(this::createGUI);
} catch (Exception e) {}
}
}

View File

@ -0,0 +1,217 @@
/*
* Copyright (c) 2007, 2014, 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.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.print.*;
public class Test {
class CustomFrame extends Frame {
public CustomFrame() {
super();
setTitle("Frame");
setSize(150, 100);
Button dummy = new Button("Dummy");
add(dummy);
}
}
class CustomWindow extends Window {
private void GUI() {
setSize(150, 100);
Button dummy = new Button("Dummy");
add(dummy);
}
public CustomWindow(Dialog d) {
super(d);
GUI();
}
public CustomWindow(Frame f) {
super(f);
GUI();
}
}
private class CustomDialog extends Dialog implements ActionListener {
private Button open, close;
private void GUI() {
setTitle("Dialog");
setSize(150, 100);
Panel p = new Panel();
p.setLayout(new GridLayout(1, 2));
open = new Button("Open");
open.addActionListener(this);
p.add(open);
close = new Button("Finish");
close.addActionListener(this);
p.add(close);
add(p);
}
public CustomDialog(Dialog d) {
super(d);
GUI();
}
public CustomDialog(Frame f) {
super(f);
GUI();
}
@Override
public void actionPerformed(ActionEvent e) {
if (open.equals(e.getSource())) {
if (isPrintDialog) {
PrinterJob.getPrinterJob().printDialog();
} else {
PrinterJob.getPrinterJob().pageDialog(new PageFormat());
}
} else if (close.equals(e.getSource())) {
if (parentDialog != null) { parentDialog.dispose(); }
if ( parentFrame != null) { parentFrame.dispose(); }
if (parent != null) { parent.dispose(); }
if (dialog != null) { dialog.dispose(); }
if ( frame != null) { frame.dispose(); }
if (window != null) { window.dispose(); }
}
}
}
class ParentDialog extends Dialog {
public ParentDialog() {
super((Frame) null);
setTitle("Dialog");
setSize(150, 100);
Button dummy = new Button("Dummy");
add(dummy);
}
}
private CustomFrame frame;
private CustomWindow window;
private CustomDialog dialog;
private ParentDialog parent;
private boolean isPrintDialog;
private final Dialog.ModalityType modalityType;
private final boolean setModal;
public enum DialogParent
{NULL_FRAME, HIDDEN_FRAME, NULL_DIALOG, HIDDEN_DIALOG, FRAME, DIALOG};
private final DialogParent dialogParent;
private Dialog parentDialog;
private Frame parentFrame;
public Test(boolean isPrintDlg,
Dialog.ModalityType type,
DialogParent p){
isPrintDialog = isPrintDlg;
modalityType = type;
setModal = false;
dialogParent = p;
EventQueue.invokeLater( this::createGUI );
}
public Test(boolean isPrintDlg,
boolean modal,
DialogParent p) {
isPrintDialog = isPrintDlg;
modalityType = null;
setModal = modal;
dialogParent = p;
EventQueue.invokeLater( this::createGUI );
}
private void createGUI() {
Window p;
if (dialogParent == DialogParent.DIALOG) {
parent = new ParentDialog();
window = new CustomWindow(parent);
p = parent;
} else {
frame = new CustomFrame();
window = new CustomWindow(frame);
p = frame;
}
int x = 50, y = 50;
p.setLocation(x, y);
y += (50 + p.getHeight());
window.setLocation(x, y);
switch (dialogParent) {
case NULL_DIALOG:
dialog = new CustomDialog((Dialog) null);
break;
case NULL_FRAME:
dialog = new CustomDialog((Frame) null);
break;
case HIDDEN_DIALOG:
parentDialog = new Dialog((Frame) null);
dialog = new CustomDialog(parentDialog);
break;
case HIDDEN_FRAME:
parentFrame = new Frame();
dialog = new CustomDialog(parentFrame);
break;
case DIALOG:
dialog = new CustomDialog(parent);
case FRAME:
dialog = new CustomDialog(frame);
break;
}
y += (50 + dialog.getHeight());
dialog.setLocation(x, y);
if (modalityType == null) {
dialog.setModal(setModal);
} else {
dialog.setModalityType(modalityType);
}
}
public void start() {
EventQueue.invokeLater(() -> {
if (parent != null) { parent.setVisible(true); }
else if (frame != null) { frame.setVisible(true); }
});
EventQueue.invokeLater(() -> { window.setVisible(true); });
EventQueue.invokeLater(() -> { dialog.setVisible(true); });
}
}