8328190: Convert AWTPanelSmoothWheel.html applet test to main

Reviewed-by: azvegint, abhiscxk, aivanov
This commit is contained in:
Harshitha Onkar 2024-03-22 17:31:10 +00:00
parent 23ebd9c3c6
commit c7bbf84929
3 changed files with 131 additions and 294 deletions

View File

@ -0,0 +1,131 @@
/*
* Copyright (c) 2009, 2024, 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.
*/
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.event.MouseWheelEvent;
import javax.swing.JOptionPane;
/*
* @test
* @bug 6730447
* @summary To verify the support for high resolution mouse wheel.
* AWT panel needs to support high-res mouse wheel rotation.
* @library /java/awt/regtesthelpers
* @build PassFailJFrame
* @run main/manual AWTPanelSmoothWheel
*/
public class AWTPanelSmoothWheel {
private static int wheelEventCount = 0;
private static int hiResWheelCount = 0;
private static final String WARNING_MSG = "WARNING !!!"
+ " You might NOT be using a hi-res mouse.";
private static final String INSTRUCTIONS = """
<html>
<body>
This test is relevant on platforms with high-resolution mouse wheel
or a trackpad can be used too.
Please press PASS if this is not the case.<br> <br>
Place the mouse cursor above the green panel and rotate the mouse wheel,
the test will print mouse wheel event messages in the format
<b> [Event#, WheelRotation, PreciseWheelRotation]</b> into the logging
panel below the instruction window.<br> <br>
A hi-res mouse/trackpad is one which produces MouseWheelEvents having:
<pre><b> Math.abs(preciseWheelRotation) &lt; 1. </b></pre><br>
Check if the test works OK when the mouse-wheel/trackpad is scrolled
very slowly.<br> <br>
This is a semi-automated test, if you are using a hi-res mouse/trackpad
and it satisfies the hi-res MouseWheelEvents as described below,
the test should automatically pass.<br> <br>
When preciseWheelRotation adds up, wheelRotation becomes non-zero
(can be negative when mouse wheel is scrolled down). <br>
You should see many events where the absolute value of
preciseWheelRotation &lt; 1 &amp; wheelRotation = 0 followed by
an event where wheelRotation != 0 in the logs.<br> <br>
<hr>
<b> NOTE: </b>
<ul>
<li> If you don't see events with preciseWheelRotation &lt; 1,
then the mouse doesn't support high-resolution scrolling. </li>
<li> A warning is shown if you are not using a hi-res mouse. </li>
<li> MouseWheelEvent logs are displayed in the log area
for user reference. </li>
<li> When mouse is scrolled up, preciseWheelRotation & wheelRotation
are positive and they are negative when scrolled down. </li>
</ul>
</body>
</html>
""";
public static void main(String[] args) throws Exception {
PassFailJFrame.builder()
.title("Test Instructions")
.instructions(INSTRUCTIONS)
.rows(30)
.columns(54)
.testTimeOut(10)
.logArea(10)
.testUI(AWTPanelSmoothWheel::createUI)
.build()
.awaitAndCheck();
}
private static Frame createUI() {
Frame frame = new Frame("Test Wheel Rotation");
Panel panel = new Panel();
panel.setBackground(Color.GREEN);
panel.addMouseWheelListener(e -> {
if (e.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL) {
PassFailJFrame.log("WheelEvent#" + (++wheelEventCount)
+ " --- Wheel Rotation: " + e.getWheelRotation()
+ " --- Precise Wheel Rotation: "
+ String.format("%.2f", e.getPreciseWheelRotation()));
if (Math.abs(e.getPreciseWheelRotation()) < 1) {
hiResWheelCount++;
}
if (wheelEventCount >= 5 && hiResWheelCount == 0) {
PassFailJFrame.log(WARNING_MSG);
JOptionPane.showMessageDialog(frame, WARNING_MSG,
"Warning", JOptionPane.WARNING_MESSAGE);
}
if (e.getWheelRotation() != 0 && hiResWheelCount > 0) {
PassFailJFrame.log("The test passes: hiResWheelCount = "
+ hiResWheelCount);
PassFailJFrame.forcePass();
}
}
});
frame.setSize(400, 200);
frame.setLayout(new BorderLayout());
frame.add(panel, BorderLayout.CENTER);
return frame;
}
}

View File

@ -1,43 +0,0 @@
<!--
Copyright (c) 2009, 2013, 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.
-->
<html>
<!--
@test
@bug 6730447
@summary Support for high resolution mouse wheel is still incomplete. AWT panel needs to be supported
@author dmitry.cherepanov@...: area=awt.mouse
@run applet/manual=yesno AWTPanelSmoothWheel.html
-->
<head>
<title> AWTPanelSmoothWheel </title>
</head>
<body>
<h1> AWTPanelSmoothWheel <br>Bug ID: 6730447</h1>
<p> See the dialog box (usually in upper left corner) for instructions</p>
<APPLET CODE="AWTPanelSmoothWheel.class" WIDTH=200 HEIGHT=200></APPLET>
</body>
</html>

View File

@ -1,251 +0,0 @@
/*
* Copyright (c) 2009, 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 6730447
@summary Support for high resolution mouse wheel is still incomplete. AWT panel needs to be supported
@author dmitry.cherepanov@...: area=awt.mouse
@run applet/manual=yesno AWTPanelSmoothWheel.html
*/
/**
* AWTPanelSmoothWheel.java
*
* summary:
*/
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
//Manual tests should run as applet tests if possible because they
// get their environments cleaned up, including AWT threads, any
// test created threads, and any system resources used by the test
// such as file descriptors. (This is normally not a problem as
// main tests usually run in a separate VM, however on some platforms
// such as the Mac, separate VMs are not possible and non-applet
// tests will cause problems). Also, you don't have to worry about
// synchronisation stuff in Applet tests the way you do in main
// tests...
public class AWTPanelSmoothWheel extends Applet
{
//Declare things used in the test, like buttons and labels here
public void init()
{
//Create instructions for the user here, as well as set up
// the environment -- set the layout manager, add buttons,
// etc.
this.setLayout (new BorderLayout ());
String[] instructions =
{
" the test is relevant for windows platforms and ",
" mouses with high-resolution wheel, please just press pass if it's not the case ",
" place the mouse cursor above the green panel and rotate the mouse wheel " ,
" the test will print all mouse wheel messages into the logging panel, ",
" please make sure that some of the messages have non-zero 'wheelRotation' value ",
" in this case the test passes, otherwise it fails, ",
" please make sure the test works OK if the mouse wheel is rotated very slow "
};
Sysout.createDialogWithInstructions( instructions );
}//End init()
public void start ()
{
Panel panel = new Panel();
panel.setBackground(Color.green);
panel.addMouseWheelListener(new MouseWheelListener() {
public void mouseWheelMoved(MouseWheelEvent e) {
Sysout.println(e.toString());
}
});
//Get things going. Request focus, set size, et cetera
setSize (200,200);
setLayout(new BorderLayout());
add(panel, BorderLayout.CENTER);
setVisible(true);
validate();
//What would normally go into main() will probably go here.
//Use System.out.println for diagnostic messages that you want
// to read after the test is done.
//Use Sysout.println for messages you want the tester to read.
}// start()
//The rest of this class is the actions which perform the test...
//Use Sysout.println to communicate with the user NOT System.out!!
//Sysout.println ("Something Happened!");
}// class ManualYesNoTest
/* Place other classes related to the test after this line */
/****************************************************
Standard Test Machinery
DO NOT modify anything below -- it's a standard
chunk of code whose purpose is to make user
interaction uniform, and thereby make it simpler
to read and understand someone else's test.
****************************************************/
/**
This is part of the standard test machinery.
It creates a dialog (with the instructions), and is the interface
for sending text messages to the user.
To print the instructions, send an array of strings to Sysout.createDialog
WithInstructions method. Put one line of instructions per array entry.
To display a message for the tester to see, simply call Sysout.println
with the string to be displayed.
This mimics System.out.println but works within the test harness as well
as standalone.
*/
class Sysout
{
private static TestDialog dialog;
public static void createDialogWithInstructions( String[] instructions )
{
dialog = new TestDialog( new Frame(), "Instructions" );
dialog.printInstructions( instructions );
dialog.setVisible(true);
println( "Any messages for the tester will display here." );
}
public static void createDialog( )
{
dialog = new TestDialog( new Frame(), "Instructions" );
String[] defInstr = { "Instructions will appear here. ", "" } ;
dialog.printInstructions( defInstr );
dialog.setVisible(true);
println( "Any messages for the tester will display here." );
}
public static void printInstructions( String[] instructions )
{
dialog.printInstructions( instructions );
}
public static void println( String messageIn )
{
dialog.displayMessage( messageIn );
}
}// Sysout class
/**
This is part of the standard test machinery. It provides a place for the
test instructions to be displayed, and a place for interactive messages
to the user to be displayed.
To have the test instructions displayed, see Sysout.
To have a message to the user be displayed, see Sysout.
Do not call anything in this dialog directly.
*/
class TestDialog extends Dialog
{
TextArea instructionsText;
TextArea messageText;
int maxStringLength = 80;
//DO NOT call this directly, go through Sysout
public TestDialog( Frame frame, String name )
{
super( frame, name );
int scrollBoth = TextArea.SCROLLBARS_BOTH;
instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth );
add( "North", instructionsText );
messageText = new TextArea( "", 5, maxStringLength, scrollBoth );
add("Center", messageText);
pack();
setVisible(true);
}// TestDialog()
//DO NOT call this directly, go through Sysout
public void printInstructions( String[] instructions )
{
//Clear out any current instructions
instructionsText.setText( "" );
//Go down array of instruction strings
String printStr, remainingStr;
for( int i=0; i < instructions.length; i++ )
{
//chop up each into pieces maxSringLength long
remainingStr = instructions[ i ];
while( remainingStr.length() > 0 )
{
//if longer than max then chop off first max chars to print
if( remainingStr.length() >= maxStringLength )
{
//Try to chop on a word boundary
int posOfSpace = remainingStr.
lastIndexOf( ' ', maxStringLength - 1 );
if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
printStr = remainingStr.substring( 0, posOfSpace + 1 );
remainingStr = remainingStr.substring( posOfSpace + 1 );
}
//else just print
else
{
printStr = remainingStr;
remainingStr = "";
}
instructionsText.append( printStr + "\n" );
}// while
}// for
}//printInstructions()
//DO NOT call this directly, go through Sysout
public void displayMessage( String messageIn )
{
messageText.append( messageIn + "\n" );
System.out.println(messageIn);
}
}// TestDialog class