1 /*
2 * Copyright (c) 2006, 2007, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
35 import java.util.concurrent.atomic.AtomicBoolean;
36 import java.lang.reflect.InvocationTargetException;
37 import test.java.awt.regtesthelpers.Util;
38
39 public class ModalBlockedStealsFocusTest extends Applet {
40 Frame frame = new Frame("Blocked Frame");
41 Dialog dialog = new Dialog(frame, "Modal Dialog", Dialog.ModalityType.TOOLKIT_MODAL);
42 AtomicBoolean lostFocus = new AtomicBoolean(false);
43
44 public static void main(String[] args) {
45 ModalBlockedStealsFocusTest app = new ModalBlockedStealsFocusTest();
46 app.init();
47 app.start();
48 }
49
50 public void init() {
51 // Create instructions for the user here, as well as set up
52 // the environment -- set the layout manager, add buttons,
53 // etc.
54 this.setLayout (new BorderLayout ());
55 Sysout.createDialogWithInstructions(new String[]
56 {"This is an automatic test. Simply wait until it is done."
57 });
58 }
59
60 public void start() {
61 if ("sun.awt.motif.MToolkit".equals(Toolkit.getDefaultToolkit().getClass().getName())) {
62 Sysout.println("The test is not for MToolkit.");
63 return;
64 }
65
66 dialog.setBounds(800, 0, 200, 100);
67 frame.setBounds(800, 150, 200, 100);
68
69 dialog.addWindowFocusListener(new WindowAdapter() {
70 public void windowLostFocus(WindowEvent e) {
71 Sysout.println(e.toString());
72 synchronized (lostFocus) {
73 lostFocus.set(true);
74 lostFocus.notifyAll();
75 }
76 }
77 });
78
79 new Thread(new Runnable() {
80 public void run() {
81 dialog.setVisible(true);
82 }
83 }).start();
84
85 Util.waitTillShown(dialog);
86 try {
87 Robot robot = new Robot();
88 robot.waitForIdle();
89 }catch(Exception ex) {
90 ex.printStackTrace();
91 throw new RuntimeException("Unexpected failure");
92 }
93
94 // Test 1. Show a modal blocked frame, check that it doesn't steal focus.
95
96 frame.setVisible(true);
97
98 if (Util.waitForCondition(lostFocus, 2000L)) {
99 throw new TestFailedException("the modal blocked frame stole focus on its showing!");
100 }
101
102 // Test 2. Brought a modal blocked frame to front, check that it doesn't steal focus.
103
104 frame.toFront();
105
106 if (Util.waitForCondition(lostFocus, 2000L)) {
107 throw new TestFailedException("the modal blocked frame stole focus on its bringing to front!");
108 } else {
109 Sysout.println("Test passed");
110 }
111 }
112 }
113
114 class TestFailedException extends RuntimeException {
115 TestFailedException(String msg) {
116 super("Test failed: " + msg);
117 }
118 }
119
120 /****************************************************
121 Standard Test Machinery
122 DO NOT modify anything below -- it's a standard
123 chunk of code whose purpose is to make user
124 interaction uniform, and thereby make it simpler
125 to read and understand someone else's test.
126 ****************************************************/
127
128 /**
129 This is part of the standard test machinery.
130 It creates a dialog (with the instructions), and is the interface
131 for sending text messages to the user.
132 To print the instructions, send an array of strings to Sysout.createDialog
133 WithInstructions method. Put one line of instructions per array entry.
134 To display a message for the tester to see, simply call Sysout.println
135 with the string to be displayed.
136 This mimics System.out.println but works within the test harness as well
137 as standalone.
138 */
139
140 class Sysout
141 {
142 static TestDialog dialog;
143
144 public static void createDialogWithInstructions( String[] instructions )
145 {
146 dialog = new TestDialog( new Frame(), "Instructions" );
147 dialog.printInstructions( instructions );
148 dialog.setVisible(true);
149 println( "Any messages for the tester will display here." );
150 }
151
152 public static void createDialog( )
153 {
154 dialog = new TestDialog( new Frame(), "Instructions" );
155 String[] defInstr = { "Instructions will appear here. ", "" } ;
156 dialog.printInstructions( defInstr );
157 dialog.setVisible(true);
158 println( "Any messages for the tester will display here." );
159 }
160
161
162 public static void printInstructions( String[] instructions )
163 {
164 dialog.printInstructions( instructions );
165 }
166
167
168 public static void println( String messageIn )
169 {
170 dialog.displayMessage( messageIn );
171 }
172
173 }// Sysout class
174
175 /**
176 This is part of the standard test machinery. It provides a place for the
177 test instructions to be displayed, and a place for interactive messages
178 to the user to be displayed.
179 To have the test instructions displayed, see Sysout.
180 To have a message to the user be displayed, see Sysout.
181 Do not call anything in this dialog directly.
182 */
183 class TestDialog extends Dialog
184 {
185
186 TextArea instructionsText;
187 TextArea messageText;
188 int maxStringLength = 80;
189
190 //DO NOT call this directly, go through Sysout
191 public TestDialog( Frame frame, String name )
192 {
193 super( frame, name );
194 int scrollBoth = TextArea.SCROLLBARS_BOTH;
195 instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth );
196 add( "North", instructionsText );
197
198 messageText = new TextArea( "", 5, maxStringLength, scrollBoth );
199 add("Center", messageText);
200
201 pack();
202
203 setVisible(true);
204 }// TestDialog()
205
206 //DO NOT call this directly, go through Sysout
207 public void printInstructions( String[] instructions )
208 {
209 //Clear out any current instructions
210 instructionsText.setText( "" );
211
212 //Go down array of instruction strings
213
214 String printStr, remainingStr;
215 for( int i=0; i < instructions.length; i++ )
216 {
217 //chop up each into pieces maxSringLength long
218 remainingStr = instructions[ i ];
219 while( remainingStr.length() > 0 )
220 {
221 //if longer than max then chop off first max chars to print
222 if( remainingStr.length() >= maxStringLength )
223 {
224 //Try to chop on a word boundary
225 int posOfSpace = remainingStr.
226 lastIndexOf( ' ', maxStringLength - 1 );
227
228 if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
229
230 printStr = remainingStr.substring( 0, posOfSpace + 1 );
231 remainingStr = remainingStr.substring( posOfSpace + 1 );
232 }
233 //else just print
234 else
235 {
236 printStr = remainingStr;
237 remainingStr = "";
238 }
239
240 instructionsText.append( printStr + "\n" );
241
242 }// while
243
244 }// for
245
246 }//printInstructions()
247
248 //DO NOT call this directly, go through Sysout
249 public void displayMessage( String messageIn )
250 {
251 messageText.append( messageIn + "\n" );
252 System.out.println(messageIn);
253 }
254
255 }// TestDialog class
|
1 /*
2 * Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
35 import java.util.concurrent.atomic.AtomicBoolean;
36 import java.lang.reflect.InvocationTargetException;
37 import test.java.awt.regtesthelpers.Util;
38
39 public class ModalBlockedStealsFocusTest extends Applet {
40 Frame frame = new Frame("Blocked Frame");
41 Dialog dialog = new Dialog(frame, "Modal Dialog", Dialog.ModalityType.TOOLKIT_MODAL);
42 AtomicBoolean lostFocus = new AtomicBoolean(false);
43
44 public static void main(String[] args) {
45 ModalBlockedStealsFocusTest app = new ModalBlockedStealsFocusTest();
46 app.init();
47 app.start();
48 }
49
50 public void init() {
51 // Create instructions for the user here, as well as set up
52 // the environment -- set the layout manager, add buttons,
53 // etc.
54 this.setLayout (new BorderLayout ());
55 }
56
57 public void start() {
58 if ("sun.awt.motif.MToolkit".equals(Toolkit.getDefaultToolkit().getClass().getName())) {
59 System.out.println("The test is not for MToolkit.");
60 return;
61 }
62
63 dialog.setBounds(800, 0, 200, 100);
64 frame.setBounds(800, 150, 200, 100);
65
66 dialog.addWindowFocusListener(new WindowAdapter() {
67 public void windowLostFocus(WindowEvent e) {
68 System.out.println(e.toString());
69 synchronized (lostFocus) {
70 lostFocus.set(true);
71 lostFocus.notifyAll();
72 }
73 }
74 });
75
76 new Thread(new Runnable() {
77 public void run() {
78 dialog.setVisible(true);
79 }
80 }).start();
81
82 Util.waitTillShown(dialog);
83 try {
84 Robot robot = new Robot();
85 robot.waitForIdle();
86 }catch(Exception ex) {
87 ex.printStackTrace();
88 throw new RuntimeException("Unexpected failure");
89 }
90
91 // Test 1. Show a modal blocked frame, check that it doesn't steal focus.
92
93 frame.setVisible(true);
94
95 if (Util.waitForCondition(lostFocus, 2000L)) {
96 throw new TestFailedException("the modal blocked frame stole focus on its showing!");
97 }
98
99 // Test 2. Brought a modal blocked frame to front, check that it doesn't steal focus.
100
101 frame.toFront();
102
103 if (Util.waitForCondition(lostFocus, 2000L)) {
104 throw new TestFailedException("the modal blocked frame stole focus on its bringing to front!");
105 } else {
106 System.out.println("Test passed");
107 }
108 }
109 }
110
111 class TestFailedException extends RuntimeException {
112 TestFailedException(String msg) {
113 super("Test failed: " + msg);
114 }
115 }
|