提交 f675b70e 编写于 作者: M malenkov

6865565: Test failed: /test/closed/javax/swing/JInternalFrame/6325652/bug6325652.java

Reviewed-by: peterz
上级 366956e3
/*
* Copyright 2009 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/*
* @test
* @bug 6325652
* @summary Tests keyboard shortcuts
* @author Sergey Malenkov
* @library ..
*/
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.beans.PropertyVetoException;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JTextArea;
public class Test6325652 {
private static final int WIDTH = 300;
private static final int HEIGHT = 300;
public static void main(String[] args) throws Throwable {
SwingTest.start(Test6325652.class);
}
private static Robot robot;
private JInternalFrame internal;
public Test6325652(JFrame frame) {
JDesktopPane desktop = new JDesktopPane();
desktop.add(create(0));
desktop.add(this.internal = create(1));
frame.add(desktop);
}
public void select() throws PropertyVetoException {
this.internal.setSelected(true);
}
public static void stepFirst() throws AWTException {
robot = new Robot(); // initialize shared static field first time
click(KeyEvent.VK_CONTROL, KeyEvent.VK_F9); // iconify internal frame
}
public void stepFirstValidate() {
if (!this.internal.isIcon()) {
throw new Error("frame should be an icon");
}
}
public static void stepSecond() {
click(KeyEvent.VK_CONTROL, KeyEvent.VK_F6); // navigate to the icon
click(KeyEvent.VK_CONTROL, KeyEvent.VK_F5); // restore the icon
}
public void stepSecondValidate() {
if (this.internal.isIcon()) {
throw new Error("frame should not be an icon");
}
}
private static void click(int... keys) {
for (int key : keys) {
robot.keyPress(key);
}
for (int key : keys) {
robot.keyRelease(key);
}
}
private static JInternalFrame create(int index) {
String text = "test" + index; // NON-NLS: frame identification
index = index * 3 + 1;
JInternalFrame internal = new JInternalFrame(text, true, true, true, true);
internal.getContentPane().add(new JTextArea(text));
internal.setBounds(10 * index, 10 * index, WIDTH, HEIGHT);
internal.setVisible(true);
return internal;
}
}
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
* @bug 6505027 * @bug 6505027
* @summary Tests focus problem inside internal frame * @summary Tests focus problem inside internal frame
* @author Sergey Malenkov * @author Sergey Malenkov
* @library ..
*/ */
import java.awt.AWTException; import java.awt.AWTException;
...@@ -45,11 +46,10 @@ import javax.swing.JScrollPane; ...@@ -45,11 +46,10 @@ import javax.swing.JScrollPane;
import javax.swing.JTable; import javax.swing.JTable;
import javax.swing.JTextField; import javax.swing.JTextField;
import javax.swing.SwingUtilities; import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel; import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn; import javax.swing.table.TableColumn;
public class Test6505027 implements Runnable { public class Test6505027 {
private static final boolean INTERNAL = true; private static final boolean INTERNAL = true;
private static final boolean TERMINATE = true; private static final boolean TERMINATE = true;
...@@ -57,42 +57,18 @@ public class Test6505027 implements Runnable { ...@@ -57,42 +57,18 @@ public class Test6505027 implements Runnable {
private static final int WIDTH = 450; private static final int WIDTH = 450;
private static final int HEIGHT = 200; private static final int HEIGHT = 200;
private static final int OFFSET = 10; private static final int OFFSET = 10;
private static final long PAUSE = 2048L;
private static final String[] COLUMNS = { "Size", "Shape" }; // NON-NLS private static final String[] COLUMNS = { "Size", "Shape" }; // NON-NLS: column names
private static final String[] ITEMS = { "a", "b", "c", "d" }; // NON-NLS private static final String[] ITEMS = { "a", "b", "c", "d" }; // NON-NLS: combobox content
private static final String KEY = "terminateEditOnFocusLost"; // NON-NLS private static final String KEY = "terminateEditOnFocusLost"; // NON-NLS: property name
public static void main(String[] args) { public static void main(String[] args) throws Throwable {
SwingUtilities.invokeLater(new Test6505027()); SwingTest.start(Test6505027.class);
Component component = null;
while (component == null) {
try {
Thread.sleep(PAUSE);
}
catch (InterruptedException exception) {
// ignore interrupted exception
}
component = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
}
if (!component.getClass().equals(JComboBox.class)) {
throw new Error("unexpected focus owner: " + component);
} }
SwingUtilities.getWindowAncestor(component).dispose();
}
private JTable table;
private Point point;
public void run() { private final JTable table = new JTable(new DefaultTableModel(COLUMNS, 2));
if (this.table == null) {
JFrame main = new JFrame();
main.setSize(WIDTH + OFFSET * 3, HEIGHT + OFFSET * 5);
main.setLocationRelativeTo(null);
main.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
main.setVisible(true);
public Test6505027(JFrame main) {
Container container = main; Container container = main;
if (INTERNAL) { if (INTERNAL) {
JInternalFrame frame = new JInternalFrame(); JInternalFrame frame = new JInternalFrame();
...@@ -105,7 +81,6 @@ public class Test6505027 implements Runnable { ...@@ -105,7 +81,6 @@ public class Test6505027 implements Runnable {
container.add(desktop); container.add(desktop);
container = frame; container = frame;
} }
this.table = new JTable(new DefaultTableModel(COLUMNS, 2));
if (TERMINATE) { if (TERMINATE) {
this.table.putClientProperty(KEY, Boolean.TRUE); this.table.putClientProperty(KEY, Boolean.TRUE);
} }
...@@ -114,23 +89,21 @@ public class Test6505027 implements Runnable { ...@@ -114,23 +89,21 @@ public class Test6505027 implements Runnable {
container.add(BorderLayout.NORTH, new JTextField()); container.add(BorderLayout.NORTH, new JTextField());
container.add(BorderLayout.CENTER, new JScrollPane(this.table)); container.add(BorderLayout.CENTER, new JScrollPane(this.table));
SwingUtilities.invokeLater(this);
}
else if (this.point == null) {
this.point = this.table.getCellRect(1, 1, false).getLocation();
SwingUtilities.convertPointToScreen(this.point, this.table);
SwingUtilities.invokeLater(this);
} }
else {
try { public void press() throws AWTException {
Point point = this.table.getCellRect(1, 1, false).getLocation();
SwingUtilities.convertPointToScreen(point, this.table);
Robot robot = new Robot(); Robot robot = new Robot();
robot.mouseMove(this.point.x + 1, this.point.y + 1); robot.mouseMove(point.x + 1, point.y + 1);
robot.mousePress(InputEvent.BUTTON1_MASK); robot.mousePress(InputEvent.BUTTON1_MASK);
} }
catch (AWTException exception) {
throw new Error("unexpected exception", exception); public static void validate() {
} Component component = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
if (!component.getClass().equals(JComboBox.class)) {
throw new Error("unexpected focus owner: " + component);
} }
} }
} }
...@@ -26,83 +26,73 @@ ...@@ -26,83 +26,73 @@
* @bug 6802868 * @bug 6802868
* @summary JInternalFrame is not maximized when maximized parent frame * @summary JInternalFrame is not maximized when maximized parent frame
* @author Alexander Potochkin * @author Alexander Potochkin
* @library ..
*/ */
import sun.awt.SunToolkit;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Point; import java.awt.Point;
import java.awt.Robot;
import java.awt.Toolkit;
import java.beans.PropertyVetoException; import java.beans.PropertyVetoException;
import javax.swing.JDesktopPane; import javax.swing.JDesktopPane;
import javax.swing.JFrame; import javax.swing.JFrame;
import javax.swing.JInternalFrame; import javax.swing.JInternalFrame;
import javax.swing.SwingUtilities;
public class Test6802868 { public class Test6802868 {
static JInternalFrame jif;
static JFrame frame; public static void main(String[] args) throws Throwable {
static Dimension size; SwingTest.start(Test6802868.class);
static Point location; }
public static void main(String[] args) throws Exception { private final JFrame frame;
Robot robot = new Robot(); private final JInternalFrame internal;
robot.setAutoDelay(20); private Dimension size;
SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); private Point location;
SwingUtilities.invokeAndWait(new Runnable() { public Test6802868(JFrame frame) {
public void run() { JDesktopPane desktop = new JDesktopPane();
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.frame = frame;
this.frame.add(desktop);
JDesktopPane jdp = new JDesktopPane();
frame.getContentPane().add(jdp); this.internal = new JInternalFrame(getClass().getName(), true, true, true, true);
this.internal.setVisible(true);
jif = new JInternalFrame("Title", true, true, true, true);
jdp.add(jif); desktop.add(this.internal);
jif.setVisible(true);
frame.setSize(200, 200);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
try {
jif.setMaximum(true);
} catch (Exception e) {
e.printStackTrace();
} }
public void firstAction() throws PropertyVetoException {
this.internal.setMaximum(true);
}
public void firstTest() {
this.size = this.internal.getSize();
resizeFrame();
} }
});
toolkit.realSync(); public void firstValidation() {
SwingUtilities.invokeAndWait(new Runnable() { if (this.internal.getSize().equals(this.size)) {
public void run() { throw new Error("InternalFrame hasn't changed its size");
size = jif.getSize();
frame.setSize(300, 300);
} }
});
toolkit.realSync();
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
if (jif.getSize().equals(size)) {
throw new RuntimeException("InternalFrame hasn't changed its size");
} }
try {
jif.setIcon(true); public void secondAction() throws PropertyVetoException {
} catch (PropertyVetoException e) { this.internal.setIcon(true);
e.printStackTrace();
} }
location = jif.getDesktopIcon().getLocation();
frame.setSize(400, 400); public void secondTest() {
this.location = this.internal.getDesktopIcon().getLocation();
resizeFrame();
} }
});
toolkit.realSync(); public void secondValidation() {
SwingUtilities.invokeAndWait(new Runnable() { if (this.internal.getDesktopIcon().getLocation().equals(this.location)) {
public void run() { throw new Error("JDesktopIcon hasn't moved");
if (jif.getDesktopIcon().getLocation().equals(location)) {
throw new RuntimeException("JDesktopIcon hasn't moved");
} }
} }
});
private void resizeFrame() {
Dimension size = this.frame.getSize();
size.width += 10;
size.height += 10;
this.frame.setSize(size);
} }
} }
...@@ -27,10 +27,9 @@ ...@@ -27,10 +27,9 @@
* @summary Resizes right-oriented scroll pane * @summary Resizes right-oriented scroll pane
* @author Sergey Malenkov * @author Sergey Malenkov
* @library .. * @library ..
* @build SwingTest
* @run main Test6526631
*/ */
import java.awt.ComponentOrientation;
import java.awt.Dimension; import java.awt.Dimension;
import javax.swing.JFrame; import javax.swing.JFrame;
import javax.swing.JScrollBar; import javax.swing.JScrollBar;
...@@ -38,15 +37,13 @@ import javax.swing.JScrollPane; ...@@ -38,15 +37,13 @@ import javax.swing.JScrollPane;
import javax.swing.JTextArea; import javax.swing.JTextArea;
import javax.swing.JViewport; import javax.swing.JViewport;
import static java.awt.ComponentOrientation.RIGHT_TO_LEFT;
public class Test6526631 { public class Test6526631 {
private static final int COLS = 90; private static final int COLS = 90;
private static final int ROWS = 50; private static final int ROWS = 50;
private static final int OFFSET = 10; private static final int OFFSET = 10;
public static void main(String[] args) { public static void main(String[] args) throws Throwable {
SwingTest.start(Test6526631.class); SwingTest.start(Test6526631.class);
} }
...@@ -55,7 +52,7 @@ public class Test6526631 { ...@@ -55,7 +52,7 @@ public class Test6526631 {
public Test6526631(JFrame frame) { public Test6526631(JFrame frame) {
this.pane = new JScrollPane(new JTextArea(ROWS, COLS)); this.pane = new JScrollPane(new JTextArea(ROWS, COLS));
this.pane.setComponentOrientation(RIGHT_TO_LEFT); this.pane.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
this.frame = frame; this.frame = frame;
this.frame.add(this.pane); this.frame.add(this.pane);
} }
...@@ -79,24 +76,24 @@ public class Test6526631 { ...@@ -79,24 +76,24 @@ public class Test6526631 {
public void validateThird() { public void validateThird() {
JViewport viewport = this.pane.getViewport(); JViewport viewport = this.pane.getViewport();
JScrollBar scroller = this.pane.getHorizontalScrollBar(); JScrollBar scroller = this.pane.getHorizontalScrollBar();
if (!scroller.getComponentOrientation().equals(RIGHT_TO_LEFT)) { if (!scroller.getComponentOrientation().equals(ComponentOrientation.RIGHT_TO_LEFT)) {
throw new IllegalStateException("unexpected component orientation"); throw new Error("unexpected component orientation");
} }
int value = scroller.getValue(); int value = scroller.getValue();
if (value != 0) { if (value != 0) {
throw new IllegalStateException("unexpected scroll value"); throw new Error("unexpected scroll value");
} }
int extent = viewport.getExtentSize().width; int extent = viewport.getExtentSize().width;
if (extent != scroller.getVisibleAmount()) { if (extent != scroller.getVisibleAmount()) {
throw new IllegalStateException("unexpected visible amount"); throw new Error("unexpected visible amount");
} }
int size = viewport.getViewSize().width; int size = viewport.getViewSize().width;
if (size != scroller.getMaximum()) { if (size != scroller.getMaximum()) {
throw new IllegalStateException("unexpected maximum"); throw new Error("unexpected maximum");
} }
int pos = size - extent - value; int pos = size - extent - value;
if (pos != viewport.getViewPosition().x) { if (pos != viewport.getViewPosition().x) {
throw new IllegalStateException("unexpected position"); throw new Error("unexpected position");
} }
} }
} }
...@@ -21,7 +21,8 @@ ...@@ -21,7 +21,8 @@
* have any questions. * have any questions.
*/ */
import java.io.PrintWriter; import sun.awt.SunToolkit;
import java.awt.Toolkit;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.lang.reflect.Modifier; import java.lang.reflect.Modifier;
...@@ -30,12 +31,18 @@ import java.util.Iterator; ...@@ -30,12 +31,18 @@ import java.util.Iterator;
import java.util.Set; import java.util.Set;
import java.util.TreeSet; import java.util.TreeSet;
import javax.swing.JFrame; import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import static javax.swing.SwingUtilities.invokeLater;
/** /**
* SwingTestHelper is a utility class for writing regression tests * SwingTest is a utility class for writing regression tests
* that require interacting with the UI. * that require interacting with the UI.
* It uses reflection to invoke all public methods without parameters.
* All static methods are starting on the current thread.
* Other methods including constructor are starting on the EDT.
* Between each method invocation all pending events are processed.
* The methods are sorted by name and invoked in that order.
* Failure of the test is signaled by any method throwing an exception.
* If no methods throw an exception the test is assumed to have passed.
* *
* @author Sergey A. Malenkov * @author Sergey A. Malenkov
*/ */
...@@ -44,38 +51,26 @@ final class SwingTest implements Runnable { ...@@ -44,38 +51,26 @@ final class SwingTest implements Runnable {
private static final int WIDTH = 640; private static final int WIDTH = 640;
private static final int HEIGHT = 480; private static final int HEIGHT = 480;
public static void start(Class<?> type) { public static void start(Class<?> type) throws Throwable {
new SwingTest(type).start(); new SwingTest(type).start();
} }
private final PrintWriter writer = new PrintWriter(System.out, true); private final Class<?> type;
private final Iterator<Method> methods;
private Class<?> type;
private JFrame frame; private JFrame frame;
private Iterator<Method> methods;
private Object object; private Object object;
private Method method; private Method method;
private Throwable error; private Throwable error;
private SwingTest(Class<?> type) { private SwingTest(Class<?> type) {
this.type = type;
}
public void run() {
synchronized (this.writer) {
if (this.error != null) {
this.frame.dispose();
this.frame = null;
}
else if (this.object == null) {
invoke();
Set<Method> methods = new TreeSet<Method>(new Comparator<Method>() { Set<Method> methods = new TreeSet<Method>(new Comparator<Method>() {
public int compare(Method first, Method second) { public int compare(Method first, Method second) {
return first.getName().compareTo(second.getName()); return first.getName().compareTo(second.getName());
} }
}); });
for (Method method : this.type.getMethods()) { for (Method method : type.getMethods()) {
if (method.getDeclaringClass().equals(this.type)) { if (method.getDeclaringClass().equals(type)) {
if (method.getReturnType().equals(void.class)) { if (method.getReturnType().equals(void.class)) {
if (0 == method.getParameterTypes().length) { if (0 == method.getParameterTypes().length) {
methods.add(method); methods.add(method);
...@@ -83,60 +78,29 @@ final class SwingTest implements Runnable { ...@@ -83,60 +78,29 @@ final class SwingTest implements Runnable {
} }
} }
} }
this.type = type;
this.methods = methods.iterator(); this.methods = methods.iterator();
} }
else if (this.method != null) {
invoke();
}
else if (this.methods.hasNext()) {
this.method = this.methods.next();
}
else {
this.frame.dispose();
this.frame = null;
this.type = null;
}
this.writer.notifyAll();
}
}
private void start() {
synchronized (this.writer) {
while (this.type != null) {
if ((this.method != null) && Modifier.isStatic(this.method.getModifiers())) {
invoke();
}
else {
invokeLater(this);
try {
this.writer.wait();
}
catch (InterruptedException exception) {
exception.printStackTrace(this.writer);
}
}
if ((this.frame == null) && (this.error != null)) {
throw new Error("unexpected error", this.error);
}
}
}
}
private void invoke() { public void run() {
try { try {
if (this.method != null) { if (this.object == null) {
this.writer.println(this.method); System.out.println(this.type);
this.method.invoke(this.object);
this.method = null;
}
else {
this.writer.println(this.type);
this.frame = new JFrame(this.type.getSimpleName()); this.frame = new JFrame(this.type.getSimpleName());
this.frame.setSize(WIDTH, HEIGHT); this.frame.setSize(WIDTH, HEIGHT);
this.frame.setLocationRelativeTo(null); this.frame.setLocationRelativeTo(null);
this.object = this.type.getConstructor(JFrame.class).newInstance(this.frame); this.object = this.type.getConstructor(this.frame.getClass()).newInstance(this.frame);
this.frame.setVisible(true); this.frame.setVisible(true);
} }
else if (this.method != null) {
System.out.println(this.method);
this.method.invoke(this.object);
}
else {
System.out.println((this.error == null) ? "PASSED" : "FAILED"); // NON-NLS: debug
this.frame.dispose();
this.frame = null;
}
} }
catch (NoSuchMethodException exception) { catch (NoSuchMethodException exception) {
this.error = exception; this.error = exception;
...@@ -156,5 +120,29 @@ final class SwingTest implements Runnable { ...@@ -156,5 +120,29 @@ final class SwingTest implements Runnable {
catch (InvocationTargetException exception) { catch (InvocationTargetException exception) {
this.error = exception.getTargetException(); this.error = exception.getTargetException();
} }
System.out.flush();
this.method = this.methods.hasNext() && (this.error == null)
? this.methods.next()
: null;
}
private void start() throws Throwable {
do {
if ((this.method != null) && Modifier.isStatic(this.method.getModifiers())) {
run(); // invoke static method on the current thread
}
else {
SwingUtilities.invokeLater(this); // invoke on the event dispatch thread
}
Toolkit tk = Toolkit.getDefaultToolkit();
if (tk instanceof SunToolkit) {
SunToolkit stk = (SunToolkit) tk;
stk.realSync(); // wait until done
}
}
while (this.frame != null);
if (this.error != null) {
throw this.error;
}
} }
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册