1 /*
   2  * Copyright (c) 2013, 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 import javax.swing.*;
  25 import javax.swing.JLabel;
  26 import javax.swing.JTextArea;
  27 import java.awt.*;
  28 import java.awt.FileDialog;
  29 import java.awt.Label;
  30 import java.awt.event.*;
  31 import java.awt.event.KeyAdapter;
  32 import java.awt.event.KeyEvent;
  33 import java.io.FileWriter;
  34 import java.lang.*;
  35 import java.lang.Override;
  36 import java.lang.String;
  37 import java.lang.System;
  38 import java.lang.Throwable;
  39 import java.util.Hashtable;
  40 
  41 /*
  42 @test
  43 @bug 8010009
  44 @summary [macosx] Unable type into online word games on MacOSX
  45 @author petr.pchelko : area=awt.keyboard
  46 @run clean *
  47 @run build TestApplet
  48 @run applet/manual=yesno KeyReleasedInAppletTest.html
  49 */
  50 
  51 public class KeyReleasedInAppletTest extends JApplet {
  52     private static final String TEST_HTML_NAME = "TestApplet.html";
  53 
  54     public void init() {
  55         //Create instructions for the user here, as well as set up
  56         // the environment -- set the layout manager, add buttons,
  57         // etc.
  58         this.setLayout(new BorderLayout());
  59 
  60         try {
  61             String testFilePath = System.getProperty("test.classes");
  62             FileWriter testHTML = null;
  63             try {
  64                 testHTML = new FileWriter(testFilePath + "/" + TEST_HTML_NAME);
  65                 testHTML.write("<html>\n" +
  66                         "<head>\n" +
  67                         "<title>KeyReleasedInAppletTest </title>\n" +
  68                         "</head>\n" +
  69                         "<body>\n" +
  70                         "<h1>KeyReleasedInAppletTest<br>Bug ID:8010009 </h1>\n" +
  71                         "<p>Make sure the applet is focuced and type any character on the keyboard. <br>"+
  72                         "The applet should show keyPressed, keyTyped and keyReleased messages.</p>\n" +
  73                         "<APPLET CODE=\"TestApplet.class\" WIDTH=400 HEIGHT=200></APPLET>\n" +
  74                         "</body>");
  75             } finally {
  76                 if (testHTML != null) {
  77                     testHTML.close();
  78                 }
  79             }
  80 
  81             String[] instructions =
  82                     {
  83                             "(1) Install the tested JDK to be used by the Java Plugin.\n",
  84                             "(2) Open Java Preferences and set security level to minimal.\n",
  85                             "(3) Open the " + TEST_HTML_NAME + " in Firefox in firefox web browser\n" +
  86                                     " It is located at: " + testFilePath,
  87                             "(5) Continue the test according to the instructions in the applet.\n",
  88                     };
  89             Sysout.createDialogWithInstructions(instructions);
  90         } catch (Throwable e) {
  91             //Fail the test.
  92             throw new RuntimeException(e.getMessage());
  93         }
  94 
  95     }//End  init()
  96 
  97     public void start() {
  98     }// start()
  99 }
 100 
 101 /* Place other classes related to the test after this line */
 102 
 103 /****************************************************
 104  Standard Test Machinery
 105  DO NOT modify anything below -- it's a standard
 106  chunk of code whose purpose is to make user
 107  interaction uniform, and thereby make it simpler
 108  to read and understand someone else's test.
 109  ****************************************************/
 110 
 111 /**
 112  * This is part of the standard test machinery.
 113  * It creates a dialog (with the instructions), and is the interface
 114  * for sending text messages to the user.
 115  * To print the instructions, send an array of strings to Sysout.createDialog
 116  * WithInstructions method.  Put one line of instructions per array entry.
 117  * To display a message for the tester to see, simply call Sysout.println
 118  * with the string to be displayed.
 119  * This mimics System.out.println but works within the test harness as well
 120  * as standalone.
 121  */
 122 
 123 class Sysout {
 124     private static TestDialog dialog;
 125     private static boolean numbering = false;
 126     private static int messageNumber = 0;
 127 
 128     public static void createDialogWithInstructions(String[] instructions) {
 129         dialog = new TestDialog(new Frame(), "Instructions");
 130         dialog.printInstructions(instructions);
 131         dialog.setVisible(true);
 132         println("Any messages for the tester will display here.");
 133     }
 134 
 135     public static void createDialog() {
 136         dialog = new TestDialog(new Frame(), "Instructions");
 137         String[] defInstr = {"Instructions will appear here. ", ""};
 138         dialog.printInstructions(defInstr);
 139         dialog.setVisible(true);
 140         println("Any messages for the tester will display here.");
 141     }
 142 
 143     /* Enables message counting for the tester. */
 144     public static void enableNumbering(boolean enable) {
 145         numbering = enable;
 146     }
 147 
 148     public static void printInstructions(String[] instructions) {
 149         dialog.printInstructions(instructions);
 150     }
 151 
 152 
 153     public static void println(String messageIn) {
 154         if (numbering) {
 155             messageIn = "" + messageNumber + " " + messageIn;
 156             messageNumber++;
 157         }
 158         dialog.displayMessage(messageIn);
 159     }
 160 
 161 }// Sysout  class
 162 
 163 /**
 164  * This is part of the standard test machinery.  It provides a place for the
 165  * test instructions to be displayed, and a place for interactive messages
 166  * to the user to be displayed.
 167  * To have the test instructions displayed, see Sysout.
 168  * To have a message to the user be displayed, see Sysout.
 169  * Do not call anything in this dialog directly.
 170  */
 171 class TestDialog extends Dialog {
 172 
 173     TextArea instructionsText;
 174     TextArea messageText;
 175     int maxStringLength = 80;
 176 
 177     //DO NOT call this directly, go through Sysout
 178     public TestDialog(Frame frame, String name) {
 179         super(frame, name);
 180         int scrollBoth = TextArea.SCROLLBARS_BOTH;
 181         instructionsText = new TextArea("", 15, maxStringLength, scrollBoth);
 182         add("North", instructionsText);
 183 
 184         messageText = new TextArea("", 5, maxStringLength, scrollBoth);
 185         add("Center", messageText);
 186 
 187         pack();
 188 
 189         setVisible(true);
 190     }// TestDialog()
 191 
 192     //DO NOT call this directly, go through Sysout
 193     public void printInstructions(String[] instructions) {
 194         //Clear out any current instructions
 195         instructionsText.setText("");
 196 
 197         //Go down array of instruction strings
 198 
 199         String printStr, remainingStr;
 200         for (int i = 0; i < instructions.length; i++) {
 201             //chop up each into pieces maxSringLength long
 202             remainingStr = instructions[i];
 203             while (remainingStr.length() > 0) {
 204                 //if longer than max then chop off first max chars to print
 205                 if (remainingStr.length() >= maxStringLength) {
 206                     //Try to chop on a word boundary
 207                     int posOfSpace = remainingStr.
 208                             lastIndexOf(' ', maxStringLength - 1);
 209 
 210                     if (posOfSpace <= 0) posOfSpace = maxStringLength - 1;
 211 
 212                     printStr = remainingStr.substring(0, posOfSpace + 1);
 213                     remainingStr = remainingStr.substring(posOfSpace + 1);
 214                 }
 215                 //else just print
 216                 else {
 217                     printStr = remainingStr;
 218                     remainingStr = "";
 219                 }
 220 
 221                 instructionsText.append(printStr + "\n");
 222 
 223             }// while
 224 
 225         }// for
 226 
 227     }//printInstructions()
 228 
 229     //DO NOT call this directly, go through Sysout
 230     public void displayMessage(String messageIn) {
 231         messageText.append(messageIn + "\n");
 232         System.out.println(messageIn);
 233     }
 234 
 235 }// TestDialog  class
--- EOF ---