提交 dc0d8538 编写于 作者: A alexsch

7121765: closed/javax/swing/JTextArea/4697612/bug4697612.java fails on MacOS on Aqua L&F

Reviewed-by: rupashka
上级 5b7d6341
/*
* 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);
}
}
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.
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册