mirror of
https://github.com/JetBrains/JetBrainsRuntime.git
synced 2025-12-06 09:29:38 +01:00
JRE-186 added regression test (Modal dialogs (Messages) shouldn't popup IDEA when another application is active)
(cherry picked from commit 236bd38d1b)
This commit is contained in:
committed by
alexey.ushakov@jetbrains.com
parent
74024e8ffd
commit
d1110c4e23
192
test/jdk/jb/javax/swing/JDialog/JDialog186.java
Normal file
192
test/jdk/jb/javax/swing/JDialog/JDialog186.java
Normal file
@@ -0,0 +1,192 @@
|
||||
/*
|
||||
* Copyright 2000-2017 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import java.awt.Point;
|
||||
import java.awt.Robot;
|
||||
import java.awt.event.WindowEvent;
|
||||
import java.awt.event.WindowFocusListener;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.IOException;
|
||||
import javax.swing.JDialog;
|
||||
import javax.swing.JEditorPane;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JTextArea;
|
||||
import javax.swing.KeyStroke;
|
||||
import javax.swing.SwingUtilities;
|
||||
import javax.swing.WindowConstants;
|
||||
|
||||
/* @test
|
||||
* @summary regression test on JRE-186 Modal dialogs (Messages) shouldn't popup IDEA when another application is active
|
||||
* @run main/othervm/timeout=360 JDialog186
|
||||
*/
|
||||
|
||||
public class JDialog186 {
|
||||
|
||||
private static JFrame frame = new JFrame("JDialog186");
|
||||
private static JDialog dialog;
|
||||
private static Process process;
|
||||
static final Object lock = new Object();
|
||||
|
||||
private static Runnable modalDialogThread = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
dialog = new JDialog(frame, true);
|
||||
dialog.setTitle("Modal input");
|
||||
dialog.getContentPane().add(new JTextArea());
|
||||
dialog.setLocation(new Point(20, 100));
|
||||
dialog.setSize(350, 100);
|
||||
dialog.setVisible(true);
|
||||
}
|
||||
};
|
||||
|
||||
private static MainWindowFocusListener focusListener = new MainWindowFocusListener();
|
||||
private static String javaExecutable = System.getProperty("java.home") + File.separatorChar + "bin" + File.separatorChar + "java";
|
||||
|
||||
|
||||
static class MainWindowFocusListener implements WindowFocusListener {
|
||||
@Override
|
||||
public void windowGainedFocus(WindowEvent windowEvent) {
|
||||
synchronized (lock) {
|
||||
lock.notifyAll();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void windowLostFocus(WindowEvent windowEvent) {
|
||||
frame.removeWindowFocusListener(focusListener);
|
||||
try {
|
||||
Thread.sleep(1000);
|
||||
} catch (InterruptedException ignored) {
|
||||
|
||||
}
|
||||
synchronized (lock) {
|
||||
lock.notifyAll();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void checkAuxProcess() {
|
||||
new Thread(() -> {
|
||||
try {
|
||||
process.waitFor();
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
process.getErrorStream();
|
||||
String line;
|
||||
BufferedReader input = new BufferedReader(new InputStreamReader(process.getErrorStream()));
|
||||
try {
|
||||
while ((line = input.readLine()) != null) {
|
||||
System.out.println(line);
|
||||
}
|
||||
input.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
if (process.exitValue() == 1) {
|
||||
System.err.println("Error: Could not launch auxiliary application");
|
||||
System.exit(1);
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
frame.setSize(400, 400);
|
||||
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
|
||||
|
||||
try {
|
||||
frame.addWindowFocusListener(focusListener);
|
||||
frame.setVisible(true);
|
||||
synchronized (lock) {
|
||||
while (!frame.isFocused()) {
|
||||
try {
|
||||
lock.wait();
|
||||
} catch (InterruptedException ignored) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("launching helper");
|
||||
process = Runtime.getRuntime().exec(new String[]{javaExecutable, "-classpath",
|
||||
System.getProperty("java.class.path"), "JDialog186Aux"});
|
||||
checkAuxProcess();
|
||||
|
||||
synchronized (lock) {
|
||||
while (frame.isFocused()) {
|
||||
try {
|
||||
lock.wait();
|
||||
} catch (InterruptedException ignored) {
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
throw new RuntimeException();
|
||||
}
|
||||
|
||||
SwingUtilities.invokeLater(modalDialogThread);
|
||||
process.waitFor();
|
||||
dialog.dispose();
|
||||
frame.dispose();
|
||||
|
||||
if (process.exitValue() == 19) throw new RuntimeException("Modal Dialog expects TextArea to be empty");
|
||||
}
|
||||
}
|
||||
|
||||
class JDialog186Aux {
|
||||
|
||||
private static final char[] expectedText = ",-./0123456789;=ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
|
||||
|
||||
private static JDialog186.MainWindowFocusListener focusListener = new JDialog186.MainWindowFocusListener();
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
Robot robot = new Robot();
|
||||
robot.setAutoDelay(100);
|
||||
|
||||
JFrame frame = new JFrame("JDialog186Aux");
|
||||
frame.addWindowFocusListener(focusListener);
|
||||
JEditorPane editorPane = new JEditorPane();
|
||||
|
||||
frame.getContentPane().add(editorPane);
|
||||
frame.setLocation(new Point(400, 0));
|
||||
frame.setSize(350, 100);
|
||||
frame.addWindowFocusListener(focusListener);
|
||||
frame.setVisible(true);
|
||||
|
||||
synchronized (JDialog186.lock) {
|
||||
while (!frame.isFocused()) {
|
||||
try {
|
||||
JDialog186.lock.wait();
|
||||
} catch (InterruptedException ignored) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
int keyCode;
|
||||
for (char c : expectedText) {
|
||||
keyCode = KeyStroke.getKeyStroke((c), 0).getKeyCode();
|
||||
robot.keyPress(keyCode);
|
||||
robot.keyRelease(keyCode);
|
||||
}
|
||||
|
||||
frame.dispose();
|
||||
|
||||
if (!editorPane.getText().equals(new String(expectedText).toLowerCase())) System.exit(19);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user