7121765: closed/javax/swing/JTextArea/4697612/bug4697612.java fails on MacOS on Aqua L&F
Reviewed-by: rupashka
This commit is contained in:
parent
a6f9704a91
commit
30f7f59109
208
jdk/test/javax/swing/JTextArea/4697612/bug4697612.java
Normal file
208
jdk/test/javax/swing/JTextArea/4697612/bug4697612.java
Normal file
@ -0,0 +1,208 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 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 4697612 6244705
|
||||
* @author Peter Zhelezniakov
|
||||
* @library ../../regtesthelpers
|
||||
* @build Util
|
||||
* @run main bug4697612
|
||||
*/
|
||||
import java.io.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
import javax.swing.*;
|
||||
|
||||
import javax.swing.text.BadLocationException;
|
||||
import sun.awt.SunToolkit;
|
||||
|
||||
public class bug4697612 {
|
||||
|
||||
static final int FRAME_WIDTH = 300;
|
||||
static final int FRAME_HEIGHT = 300;
|
||||
static final int FONT_HEIGHT = 16;
|
||||
private static volatile int frameHeight;
|
||||
private static volatile int fontHeight;
|
||||
private static JFrame frame;
|
||||
private static JTextArea text;
|
||||
private static JScrollPane scroller;
|
||||
|
||||
public static void main(String[] args) throws Throwable {
|
||||
SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
|
||||
Robot robot = new Robot();
|
||||
robot.setAutoDelay(100);
|
||||
|
||||
SwingUtilities.invokeAndWait(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
createAndShowGUI();
|
||||
}
|
||||
});
|
||||
|
||||
toolkit.realSync();
|
||||
|
||||
SwingUtilities.invokeAndWait(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
text.requestFocus();
|
||||
}
|
||||
});
|
||||
|
||||
toolkit.realSync();
|
||||
|
||||
// 4697612: pressing PgDn + PgUp should not alter caret position
|
||||
Util.hitKeys(robot, KeyEvent.VK_HOME);
|
||||
Util.hitKeys(robot, KeyEvent.VK_PAGE_DOWN);
|
||||
|
||||
|
||||
int pos0 = getTextCaretPosition();
|
||||
int caretHeight = getTextCaretHeight();
|
||||
fontHeight = FONT_HEIGHT;
|
||||
|
||||
// iterate two times, for different (even and odd) font height
|
||||
for (int i = 0; i < 2; i++) {
|
||||
|
||||
SwingUtilities.invokeAndWait(new Runnable() {
|
||||
|
||||
public void run() {
|
||||
text.setFont(text.getFont().deriveFont(fontHeight));
|
||||
}
|
||||
});
|
||||
|
||||
frameHeight = FRAME_HEIGHT;
|
||||
|
||||
for (int j = 0; j < caretHeight; j++) {
|
||||
SwingUtilities.invokeAndWait(new Runnable() {
|
||||
|
||||
public void run() {
|
||||
frame.setSize(FRAME_WIDTH, frameHeight);
|
||||
}
|
||||
});
|
||||
|
||||
toolkit.realSync();
|
||||
|
||||
Util.hitKeys(robot, KeyEvent.VK_PAGE_DOWN);
|
||||
Util.hitKeys(robot, KeyEvent.VK_PAGE_UP);
|
||||
toolkit.realSync();
|
||||
|
||||
int pos = getTextCaretPosition();
|
||||
if (pos0 != pos) {
|
||||
throw new RuntimeException("Failed 4697612: PgDn & PgUp keys scroll by different amounts");
|
||||
}
|
||||
frameHeight++;
|
||||
}
|
||||
fontHeight++;
|
||||
}
|
||||
|
||||
|
||||
// 6244705: pressing PgDn at the very bottom should not scroll
|
||||
LookAndFeel laf = UIManager.getLookAndFeel();
|
||||
if (laf.getID().equals("Aqua")) {
|
||||
Util.hitKeys(robot, KeyEvent.VK_END);
|
||||
} else {
|
||||
Util.hitKeys(robot, KeyEvent.VK_CONTROL, KeyEvent.VK_END);
|
||||
}
|
||||
|
||||
toolkit.realSync();
|
||||
|
||||
pos0 = getScrollerViewPosition();
|
||||
Util.hitKeys(robot, KeyEvent.VK_PAGE_DOWN);
|
||||
toolkit.realSync();
|
||||
|
||||
int pos = getScrollerViewPosition();
|
||||
|
||||
if (pos0 != pos) {
|
||||
throw new RuntimeException("Failed 6244705: PgDn at the bottom causes scrolling");
|
||||
}
|
||||
}
|
||||
|
||||
private static int getTextCaretPosition() throws Exception {
|
||||
final int[] result = new int[1];
|
||||
SwingUtilities.invokeAndWait(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
result[0] = text.getCaretPosition();
|
||||
}
|
||||
});
|
||||
|
||||
return result[0];
|
||||
}
|
||||
|
||||
private static int getTextCaretHeight() throws Exception {
|
||||
final int[] result = new int[1];
|
||||
SwingUtilities.invokeAndWait(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
int pos0 = text.getCaretPosition();
|
||||
Rectangle dotBounds = text.modelToView(pos0);
|
||||
result[0] = dotBounds.height;
|
||||
} catch (BadLocationException ex) {
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return result[0];
|
||||
}
|
||||
|
||||
private static int getScrollerViewPosition() throws Exception {
|
||||
final int[] result = new int[1];
|
||||
SwingUtilities.invokeAndWait(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
result[0] = scroller.getViewport().getViewPosition().y;
|
||||
}
|
||||
});
|
||||
|
||||
return result[0];
|
||||
}
|
||||
|
||||
private static void createAndShowGUI() {
|
||||
frame = new JFrame();
|
||||
frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
|
||||
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
|
||||
text = new JTextArea();
|
||||
try {
|
||||
InputStream is =
|
||||
bug4697612.class.getResourceAsStream("bug4697612.txt");
|
||||
text.read(new InputStreamReader(is), null);
|
||||
} catch (IOException e) {
|
||||
throw new Error(e);
|
||||
}
|
||||
|
||||
scroller = new JScrollPane(text);
|
||||
|
||||
frame.getContentPane().add(scroller);
|
||||
|
||||
frame.pack();
|
||||
frame.setVisible(true);
|
||||
}
|
||||
}
|
223
jdk/test/javax/swing/JTextArea/4697612/bug4697612.txt
Normal file
223
jdk/test/javax/swing/JTextArea/4697612/bug4697612.txt
Normal file
@ -0,0 +1,223 @@
|
||||
README
|
||||
|
||||
Java(TM) 2 SDK, Standard Edition
|
||||
Version 1.4.2 Beta
|
||||
|
||||
For a more extensive HTML version of this file, see README.html.
|
||||
|
||||
Contents
|
||||
|
||||
* Introduction
|
||||
* Release Notes
|
||||
* Bug Reports and Feedback
|
||||
* Java 2 SDK Documentation
|
||||
* Redistribution
|
||||
* Web Pages
|
||||
|
||||
|
||||
Introduction
|
||||
|
||||
Thank you for downloading this release of the Java(TM) 2 SDK,
|
||||
Standard Edition. The Java 2 SDK is a development environment for
|
||||
building applications, applets, and components that can be
|
||||
deployed on the Java platform.
|
||||
|
||||
The Java 2 SDK software includes tools useful for developing and
|
||||
testing programs written in the Java programming language and
|
||||
running on the Java platform. These tools are designed to be used
|
||||
from the command line. Except for appletviewer, these tools do not
|
||||
provide a graphical user interface.
|
||||
|
||||
|
||||
Release Notes
|
||||
|
||||
See the Release Notes on the Java Software web site for additional
|
||||
information pertaining to this release.
|
||||
|
||||
http://java.sun.com/j2se/1.4.2/relnotes.html
|
||||
|
||||
The on-line release notes will be updated as needed, so you should
|
||||
check it occasionally for the latest information.
|
||||
|
||||
|
||||
Bug Reports and Feedback
|
||||
|
||||
The Bug Parade Web Page on the Java Developer Connection(SM) web
|
||||
site lets you search for and examine existing bug reports, submit
|
||||
your own bug reports, and tell us which bug fixes matter most to you.
|
||||
|
||||
http://java.sun.com/jdc/bugParade/
|
||||
|
||||
To directly submit a bug or request a feature, fill out this form:
|
||||
|
||||
http://java.sun.com/cgi-bin/bugreport.cgi
|
||||
|
||||
You can also send comments directly to Java Software engineering
|
||||
team email addresses.
|
||||
|
||||
http://java.sun.com/mail/
|
||||
|
||||
|
||||
Java 2 SDK Documentation
|
||||
|
||||
The on-line Java 2 SDK Documentation contains API specifications,
|
||||
feature descriptions, developer guides, tool reference pages, demos,
|
||||
and links to related information. It is located at
|
||||
|
||||
http://java.sun.com/j2se/1.4.2/docs/
|
||||
|
||||
The Java 2 SDK documentation is also available in a download bundle
|
||||
which you can install locally on your machine. See the
|
||||
Java 2 SDK download page:
|
||||
|
||||
http://java.sun.com/j2se/1.4.2/download.html
|
||||
|
||||
|
||||
Redistribution
|
||||
|
||||
The term "vendors" used here refers to licensees, developers,
|
||||
and independent software vendors (ISVs) who license and
|
||||
distribute the Java 2 Runtime Environment with their programs.
|
||||
Vendors must follow the terms of the Java 2 SDK, Standard
|
||||
Edition, Binary Code License agreement.
|
||||
Required vs. Optional Files
|
||||
|
||||
The files that make up the Java 2 SDK, Standard Edition, are
|
||||
divided into two categories: required and optional. Optional
|
||||
files may be excluded from redistributions of the Java 2 SDK
|
||||
at the vendor's discretion. The following section contains a
|
||||
list of the files and directories that may optionally be
|
||||
omitted from redistributions of the Java 2 SDK. All files not
|
||||
in these lists of optional files must be included in
|
||||
redistributions of the Java 2 SDK.
|
||||
|
||||
Optional Files and Directories
|
||||
|
||||
The following files may be optionally excluded from
|
||||
redistributions:
|
||||
|
||||
jre/lib/charsets.jar
|
||||
Character conversion classes
|
||||
jre/lib/ext/
|
||||
sunjce_provider.jar - the SunJCE provider for Java
|
||||
Cryptography APIs
|
||||
localedata.jar - contains many of the resources
|
||||
needed for non US English locales
|
||||
ldapsec.jar - contains security features supported
|
||||
by the LDAP service provider
|
||||
dnsns.jar - for the InetAddress wrapper of JNDI DNS
|
||||
provider
|
||||
bin/rmid and jre/bin/rmid
|
||||
Java RMI Activation System Daemon
|
||||
bin/rmiregistry and jre/bin/rmiregistry
|
||||
Java Remote Object Registry
|
||||
bin/tnameserv and jre/bin/tnameserv
|
||||
Java IDL Name Server
|
||||
bin/keytool and jre/bin/keytool
|
||||
Key and Certificate Management Tool
|
||||
bin/kinit and jre/bin/kinit
|
||||
Used to obtain and cache Kerberos ticket-granting tickets
|
||||
bin/klist and jre/bin/klist
|
||||
Kerberos display entries in credentials cache and keytab
|
||||
bin/ktab and jre/bin/ktab
|
||||
Kerberos key table manager
|
||||
bin/policytool and jre/bin/policytool
|
||||
Policy File Creation and Management Tool
|
||||
bin/orbd and jre/bin/orbd
|
||||
Object Request Broker Daemon
|
||||
bin/servertool and jre/bin/servertool
|
||||
Java IDL Server Tool
|
||||
src.zip
|
||||
Archive of source files
|
||||
|
||||
In addition, the Java Web Start product may be excluded from
|
||||
redistributions. The Java Web Start product is contained in a
|
||||
file named javaws-1_2-solaris-sparc-i.zip,
|
||||
javaws-1_2-solaris-i586-i.zip,
|
||||
javaws-1_2-linux-i586-i.zip, or
|
||||
javaws-1_2-windows-i586-i.exe, depending on the platform.
|
||||
|
||||
|
||||
Unlimited Strength Java Cryptography Extension
|
||||
|
||||
Due to import control restrictions for some countries, the
|
||||
Java Cryptography Extension (JCE) policy files shipped with
|
||||
the Java 2 SDK, Standard Edition and the Java 2 Runtime
|
||||
Environment allow strong but limited cryptography to be
|
||||
used. These files are located at
|
||||
|
||||
<java-home>/lib/security/local_policy.jar
|
||||
<java-home>/lib/security/US_export_policy.jar
|
||||
|
||||
where <java-home> is the jre directory of the Java 2
|
||||
SDK or the top-level directory of the Java 2 Runtime
|
||||
Environment.
|
||||
|
||||
An unlimited strength version of these files indicating
|
||||
no restrictions on cryptographic strengths is available
|
||||
on the Java 2 SDK web site for those living in eligible
|
||||
countries. Those living in eligible countries may download
|
||||
the unlimited strength version and replace the strong
|
||||
cryptography jar files with the unlimited strength files.
|
||||
|
||||
|
||||
Endorsed Standards Override Mechanism
|
||||
|
||||
An endorsed standard is a Java API defined through a standards
|
||||
process other than the Java Community Process(SM) (JCP(SM)).
|
||||
Because endorsed standards are defined outside the JCP, it is
|
||||
anticipated that such standards will be revised between
|
||||
releases of the Java 2 Platform. In order to take advantage of
|
||||
new revisions to endorsed standards, developers and software
|
||||
vendors may use the Endorsed Standards Override Mechanism to
|
||||
provide newer versions of an endorsed standard than those
|
||||
included in the Java 2 Platform as released by Sun Microsystems.
|
||||
|
||||
For more information on the Endorsed Standards Override
|
||||
Mechanism, including the list of platform packages that it may
|
||||
be used to override, see
|
||||
|
||||
http://java.sun.com/j2se/1.4.2/docs/guide/standards/
|
||||
|
||||
Classes in the packages listed on that web page may be replaced
|
||||
only by classes implementing a more recent version of the API
|
||||
as defined by the appropriate standards body.
|
||||
|
||||
In addition to the packages listed in the document at the above
|
||||
URL, which are part of the Java 2 Platform, Standard Edition
|
||||
(J2SE(TM)) specification, redistributors of Sun's J2SE
|
||||
Reference Implementation are allowed to override classes whose
|
||||
sole purpose is to implement the functionality provided by
|
||||
public APIs defined in these Endorsed Standards packages.
|
||||
Redistributors may also override classes in the org.w3c.dom.*
|
||||
packages, or other classes whose sole purpose is to implement
|
||||
these APIs.
|
||||
|
||||
|
||||
Sun Java Web Pages
|
||||
|
||||
For additional information, refer to these Sun Microsystems pages
|
||||
on the World Wide Web:
|
||||
|
||||
http://java.sun.com/
|
||||
The Java Software web site, with the latest information on
|
||||
Java technology, product information, news, and features.
|
||||
http://java.sun.com/docs
|
||||
Java Platform Documentation provides access to white papers,
|
||||
the Java Tutorial and other documents.
|
||||
http://java.sun.com/jdc
|
||||
The Java Developer Connection(SM) web site. (Free registration
|
||||
required.) Additional technical information, news, and
|
||||
features; user forums; support information, and much more.
|
||||
http://java.sun.com/products/
|
||||
Java Technology Products & API
|
||||
|
||||
|
||||
------------------------------------------------------------------------
|
||||
The Java 2 SDK, Standard Edition, is a product of Sun Microsystems(TM),
|
||||
Inc. This product includes code licensed from RSA Security.
|
||||
|
||||
Copyright 2003 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||
California 95054, U.S.A. All rights reserved.
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user