1 /* 2 * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 /* 25 test 26 @bug 4118621 8149636 27 @summary Test the selection scrolling in TextField. 28 @run applet/manual=yesno ScrollSelectionTest.html 29 */ 30 31 import java.applet.Applet; 32 import java.awt.Dialog; 33 import java.awt.Frame; 34 import java.awt.TextField; 35 import java.awt.TextArea; 36 import java.awt.FlowLayout; 37 38 public class ScrollSelectionTest extends Applet 39 { 40 41 Frame frame = new Frame("ScrollSelectionTest frame"); 42 TextField tf = new TextField(40); 43 44 public void init() 45 { 46 tf.setText("abcdefghijklmnopqrstuvwxyz"); 47 frame.add(tf); 48 frame.setLayout(new FlowLayout()); 49 tf.select(0, 20); 50 51 String[] instructions = { 52 "INSTRUCTIONS: There are 2 Tests", 53 "Test1: Text visibility with Scroll", 54 "This is a test for a win32 specific problem", 55 "If you see all the letters from 'a' to 'z' and", 56 "letters from 'a' to 't' are selected then test passes.", 57 "You may have to activate the frame to see the selection", 58 "highlighted (e.g. by clicking on frame's title).", 59 ".", 60 "Test2: Flicker with selection scroll", 61 "Mouse press on the TextField text.", 62 "Move mouse towards left or right with selecting text.", 63 "Move mouse away outside the bounds of TextField.", 64 "No flicker should be observed.", 65 }; 66 Sysout.createDialogWithInstructions( instructions ); 67 68 }// init() 69 70 public void start () 71 { 72 setSize (300, 500); 73 setVisible(true); 74 75 frame.setVisible(true); 76 frame.setBounds (400, 0, 400, 300); 77 78 }// start() 79 80 }// class ScrollSelectionTest 81 82 /**************************************************** 83 Standard Test Machinery 84 DO NOT modify anything below -- it's a standard 85 chunk of code whose purpose is to make user 86 interaction uniform, and thereby make it simpler 87 to read and understand someone else's test. 88 ****************************************************/ 89 90 /** 91 This is part of the standard test machinery. 92 It creates a dialog (with the instructions), and is the interface 93 for sending text messages to the user. 94 To print the instructions, send an array of strings to Sysout.createDialog 95 WithInstructions method. Put one line of instructions per array entry. 96 To display a message for the tester to see, simply call Sysout.println 97 with the string to be displayed. 98 This mimics System.out.println but works within the test harness as well 99 as standalone. 100 */ 101 102 class Sysout 103 { 104 private static TestDialog dialog; 105 106 public static void createDialogWithInstructions( String[] instructions ) 107 { 108 dialog = new TestDialog( new Frame(), "Instructions" ); 109 dialog.printInstructions( instructions ); 110 dialog.show(); 111 println( "Any messages for the tester will display here." ); 112 } 113 114 public static void createDialog( ) 115 { 116 dialog = new TestDialog( new Frame(), "Instructions" ); 117 String[] defInstr = { "Instructions will appear here. ", "" } ; 118 dialog.printInstructions( defInstr ); 119 dialog.show(); 120 println( "Any messages for the tester will display here." ); 121 } 122 123 124 public static void printInstructions( String[] instructions ) 125 { 126 dialog.printInstructions( instructions ); 127 } 128 129 130 public static void println( String messageIn ) 131 { 132 dialog.displayMessage( messageIn ); 133 } 134 135 }// Sysout class 136 137 /** 138 This is part of the standard test machinery. It provides a place for the 139 test instructions to be displayed, and a place for interactive messages 140 to the user to be displayed. 141 To have the test instructions displayed, see Sysout. 142 To have a message to the user be displayed, see Sysout. 143 Do not call anything in this dialog directly. 144 */ 145 class TestDialog extends Dialog 146 { 147 148 TextArea instructionsText; 149 TextArea messageText; 150 int maxStringLength = 80; 151 152 //DO NOT call this directly, go through Sysout 153 public TestDialog( Frame frame, String name ) 154 { 155 super( frame, name ); 156 int scrollBoth = TextArea.SCROLLBARS_BOTH; 157 instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth ); 158 add( "North", instructionsText ); 159 160 messageText = new TextArea( "", 5, maxStringLength, scrollBoth ); 161 add("South", messageText); 162 163 pack(); 164 165 show(); 166 }// TestDialog() 167 168 //DO NOT call this directly, go through Sysout 169 public void printInstructions( String[] instructions ) 170 { 171 //Clear out any current instructions 172 instructionsText.setText( "" ); 173 174 //Go down array of instruction strings 175 176 String printStr, remainingStr; 177 for( int i=0; i < instructions.length; i++ ) 178 { 179 //chop up each into pieces maxSringLength long 180 remainingStr = instructions[ i ]; 181 while( remainingStr.length() > 0 ) 182 { 183 //if longer than max then chop off first max chars to print 184 if( remainingStr.length() >= maxStringLength ) 185 { 186 //Try to chop on a word boundary 187 int posOfSpace = remainingStr. 188 lastIndexOf( ' ', maxStringLength - 1 ); 189 190 if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1; 191 192 printStr = remainingStr.substring( 0, posOfSpace + 1 ); 193 remainingStr = remainingStr.substring( posOfSpace + 1 ); 194 } 195 //else just print 196 else 197 { 198 printStr = remainingStr; 199 remainingStr = ""; 200 } 201 202 instructionsText.append( printStr + "\n" ); 203 204 }// while 205 206 }// for 207 208 }//printInstructions() 209 210 //DO NOT call this directly, go through Sysout 211 public void displayMessage( String messageIn ) 212 { 213 messageText.append( messageIn + "\n" ); 214 } 215 216 }// TestDialog class