6686273: Some AWT reg. tests should be moved to open repository (for CRs 6444769, 6480547, and 6560348)
Summary: Some AWT reg. tests are moved to open repository (for CRs 6444769, 6480547, and 6560348)
Reviewed-by: ant
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Insets/WindowWithWarningTest/WindowWithWarningTest.html Sun Apr 13 23:41:40 2008 +0400
@@ -0,0 +1,20 @@
+<html>
+<!--
+ @test
+ @bug 6391770
+ @summary Content of the Window should be laid out in the area left after WarningWindow was added.
+ @author Yuri Nesterenko
+ @run applet WindowWithWarningTest.html
+-->
+
+ <head>
+ <title>WindowWithWarningTest</title>
+ </head>
+ <pre>
+ This test will run automatically.
+ </pre>
+ <body>
+ <applet code="WindowWithWarningTest.class" width=350 height=300></applet>
+ </body>
+</html>
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Insets/WindowWithWarningTest/WindowWithWarningTest.java Sun Apr 13 23:41:40 2008 +0400
@@ -0,0 +1,315 @@
+/*
+ * Copyright 2006-2008 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+
+/*
+ test
+ @bug 6391770
+ @summary Content of the Window should be laid out in the area left after WarningWindow was added.
+ @author yuri nesterenko: area=
+ @run applet WindowWithWarningTest.html
+*/
+
+// Note there is no @ in front of test above. This is so that the
+// harness will not mistake this file as a test file. It should
+// only see the html file as a test file. (the harness runs all
+// valid test files, so it would run this test twice if this file
+// were valid as well as the html file.)
+// Also, note the area= after Your Name in the author tag. Here, you
+// should put which functional area the test falls in. See the
+// AWT-core home page -> test areas and/or -> AWT team for a list of
+// areas.
+// Note also the 'AutomaticAppletTest.html' in the run tag. This should
+// be changed to the name of the test.
+
+
+/**
+ * WindowWithWarningTest.java
+ *
+ * summary:
+ */
+
+import java.applet.Applet;
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+
+//Automated 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 they way you do in main
+// tests...
+
+
+public class WindowWithWarningTest extends Applet
+{
+ //Declare things used in the test, like buttons and labels here
+ boolean buttonClicked = false;
+ public static final int MAX_COUNT = 100;
+
+ 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 =
+ {
+ "This is an AUTOMATIC test",
+ "simply wait until it is done"
+ };
+ //Sysout.createDialog( );
+ //Sysout.printInstructions( instructions );
+
+ }//End init()
+ public void start ()
+ {
+ //Get things going. Request focus, set size, et cetera
+ System.setSecurityManager( new SecurityManager() {
+ // deny AWTPermission("showWindowWithoutWarningBanner")
+ public boolean checkTopLevelWindow(Object window) {
+ return false;
+ }
+ });
+ JFrame frame = new JFrame("Window Test");
+ frame.setBounds(50, 50, 200, 200);
+ frame.show();
+
+ JWindow window = new JWindow( frame );
+ JButton jbutton1 = new JButton( "First" );
+ jbutton1.addMouseListener( new MouseAdapter() {
+ public void mousePressed( MouseEvent me ) {
+ buttonClicked = true;
+ }
+ });
+ JButton jbutton2 = new JButton( "Second" );
+ window.setLocation( 300, 300 );
+
+ window.add("North", jbutton1);
+ window.add("South", jbutton2);
+
+ window.pack();
+ window.show();
+ //wait for frame to show:
+ getLocation( frame );
+ window.toFront();
+
+ Dimension size0 = window.getSize();
+ Dimension size1 = null;
+ try {
+ Robot robot = new Robot();
+
+ robot.delay(500);
+ window.pack();
+ robot.delay(500);
+ window.pack();
+ // size1 must be the same as size0
+ size1 = window.getSize();
+ robot.delay(500);
+ Point pt = jbutton1.getLocationOnScreen();
+ robot.mouseMove((int) jbutton1.getLocationOnScreen().x + jbutton1.getWidth() / 2,
+ (int) jbutton1.getLocationOnScreen().y + jbutton1.getHeight() / 2);
+ robot.delay(500);
+ robot.mousePress(MouseEvent.BUTTON1_MASK);
+ robot.delay(100);
+ robot.mouseRelease(MouseEvent.BUTTON1_MASK);
+ robot.delay(2000);
+ }catch(Exception e) {
+ throw new RuntimeException( "Exception "+e );
+ }
+ if( !size0.equals(size1) ) {
+ throw new RuntimeException( "Wrong Window size after multiple pack()s");
+ }
+ if( !buttonClicked ) {
+ throw new RuntimeException( "Button was not clicked");
+ }
+ window.dispose();
+ frame.dispose();
+
+ System.out.println("Test Passed.");
+ }// start()
+ public static Point getLocation( Component co ) throws RuntimeException {
+ Point pt = null;
+ boolean bFound = false;
+ int count = 0;
+ while( !bFound ) {
+ try {
+ pt = co.getLocationOnScreen();
+ bFound = true;
+ }catch( Exception ex ) {
+ bFound = false;
+ count++;
+ }
+ if( !bFound && count > MAX_COUNT ) {
+ throw new RuntimeException("don't see a component to get location");
+ }
+ }
+ return pt;
+ }
+
+
+}// class AutomaticAppletTest
+
+
+/****************************************************
+ 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();
+
+ show();
+ }// 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/TextField/ScrollSelectionTest/ScrollSelectionTest.html Sun Apr 13 23:41:40 2008 +0400
@@ -0,0 +1,20 @@
+<html>
+<!--
+ @test
+ @bug 4118621
+ @summary tests that selected text isn't scrolled if there is enough room.
+ @author prs: area=TextField
+ @run applet/manual=yesno ScrollSelectionTest.html
+ -->
+<head>
+<title> ScrollSelectionTest </title>
+</head>
+<body>
+
+<h1>ScrollSelectionTest<br>4118621: </h1>
+
+<p> See the dialog box (usually in upper left corner) for instructions</p>
+
+<APPLET CODE="ScrollSelectionTest.class" WIDTH=300 HEIGHT=300></APPLET>
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/TextField/ScrollSelectionTest/ScrollSelectionTest.java Sun Apr 13 23:41:40 2008 +0400
@@ -0,0 +1,213 @@
+/*
+ * Copyright 1999-2008 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ test
+ @bug 4118621
+ @summary tests that selected text isn't scrolled when there is enough room.
+ @author prs: area=TextField
+ @run applet/manual=yesno ScrollSelectionTest.html
+*/
+
+/**
+ * ScrollSelectionTest.java
+ *
+ * summary: tests that selected text isn't scrolled when there is enough room.
+ */
+
+import java.applet.Applet;
+import java.awt.Dialog;
+import java.awt.Frame;
+import java.awt.TextField;
+import java.awt.TextArea;
+
+public class ScrollSelectionTest extends Applet
+ {
+
+ Frame frame = new Frame("ScrollSelectionTest frame");
+ TextField tf = new TextField(40);
+
+ public void init()
+ {
+ tf.setText("abcdefghijklmnopqrstuvwxyz");
+ frame.add(tf);
+ tf.select(0, 20);
+
+ String[] instructions =
+ {
+ "INSTRUCTIONS:",
+ "This is a test for a win32 specific problem",
+ "If you see all the letters from 'a' to 'z' and",
+ "letters from 'a' to 't' are selected then test passes"
+ };
+ Sysout.createDialogWithInstructions( instructions );
+
+ }// init()
+
+ public void start ()
+ {
+ setSize (300,300);
+ setVisible(true);
+
+ frame.setVisible(true);
+ frame.setBounds (400, 0, 300, 300);
+
+ }// start()
+
+ }// class ScrollSelectionTest
+
+/****************************************************
+ 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.show();
+ 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.show();
+ 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("South", messageText);
+
+ pack();
+
+ show();
+ }// 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" );
+ }
+
+ }// TestDialog class
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/xembed/server/JavaClient.java Sun Apr 13 23:41:40 2008 +0400
@@ -0,0 +1,126 @@
+/*
+ * Copyright 2004-2008 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+import java.awt.*;
+import sun.awt.*;
+import java.awt.event.*;
+import java.lang.reflect.*;
+import java.awt.dnd.*;
+import java.awt.datatransfer.*;
+
+public class JavaClient {
+ ClientContainer cont;
+ public static void main(String[] args) {
+ if (System.getProperty("os.name").toLowerCase().startsWith("win")) {
+ return;
+ }
+
+ // Enable testing extensions in XEmbed server
+ System.setProperty("sun.awt.xembed.testing", "true");
+
+ boolean xtoolkit = "sun.awt.X11.XToolkit".equals(Toolkit.getDefaultToolkit().getClass().getName());
+ final EmbeddedFrame ef = createEmbeddedFrame(xtoolkit, Long.parseLong(args[0]));
+ ef.setBackground(new Color(100, 100, 200));
+ ef.setLayout(new BorderLayout());
+ ef.add(new ClientContainer(ef), BorderLayout.CENTER);
+ ef.pack();
+ ef.registerListeners();
+ ef.setVisible(true);
+ }
+ private static EmbeddedFrame createEmbeddedFrame(boolean xtoolkit, long window) {
+ try {
+ Class cl = (xtoolkit?Class.forName("sun.awt.X11.XEmbeddedFrame"):Class.forName("sun.awt.motif.MEmbeddedFrame"));
+ Constructor cons = cl.getConstructor(new Class[]{Long.TYPE, Boolean.TYPE});
+ return (EmbeddedFrame)cons.newInstance(new Object[] {window, true});
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("Can't create embedded frame");
+ }
+ }
+}
+
+class ClientContainer extends Container {
+ Window parent;
+ int width, height;
+ public ClientContainer(Window w) {
+ parent = w;
+ width = 500;
+ height = 50;
+ final TextField tf = new TextField(30);
+
+ DragSource ds = new DragSource();
+ final DragSourceListener dsl = new DragSourceAdapter() {
+ public void dragDropEnd(DragSourceDropEvent dsde) {
+ }
+ };
+ final DragGestureListener dgl = new DragGestureListener() {
+ public void dragGestureRecognized(DragGestureEvent dge) {
+ dge.startDrag(null, new StringSelection(tf.getText()), dsl);
+ }
+ };
+ ds.createDefaultDragGestureRecognizer(tf, DnDConstants.ACTION_COPY, dgl);
+
+ final DropTargetListener dtl = new DropTargetAdapter() {
+ public void drop(DropTargetDropEvent dtde) {
+ dtde.acceptDrop(DnDConstants.ACTION_COPY);
+ try {
+ tf.setText(tf.getText() + (String)dtde.getTransferable().getTransferData(DataFlavor.stringFlavor));
+ } catch (Exception e) {
+ }
+ }
+ };
+ final DropTarget dt = new DropTarget(tf, dtl);
+
+ setLayout(new FlowLayout());
+ add(tf);
+ Button close = new Button("Close");
+ close.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ parent.dispose();
+ }
+ });
+ Button inc = new Button("Increase size");
+ inc.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ changeSize(10);
+ }
+ });
+ Button dec = new Button("Decrease size");
+ dec.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ changeSize(-10);
+ }
+ });
+ add(close);
+ add(inc);
+ add(dec);
+ }
+ void changeSize(int step) {
+ width += step;
+ height += step;
+ parent.pack();
+ }
+ public Dimension getPreferredSize() {
+ return new Dimension(width, height);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/xembed/server/RunTestXEmbed.java Sun Apr 13 23:41:40 2008 +0400
@@ -0,0 +1,176 @@
+/*
+ * Copyright 2004-2008 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/**
+ * @test
+ * @bug 4931668
+ * @summary Tests XEmbed server/client functionality
+ * @author Denis Mikhalkin: area=awt.xembed
+ * @compile JavaClient.java TesterClient.java TestXEmbedServer.java
+ * @run main/timeout=6000 RunTestXEmbed
+ */
+
+import java.awt.Rectangle;
+import java.lang.reflect.Method;
+import java.util.logging.*;
+import java.util.*;
+import java.io.*;
+
+public class RunTestXEmbed extends TestXEmbedServer {
+ private static final Logger log = Logger.getLogger("test.xembed");
+ private Method test;
+ private boolean passed = false;
+ public RunTestXEmbed(Method test) {
+ super(false);
+ this.test = test;
+ }
+
+ public Process startClient(Rectangle bounds[], long window) {
+ try {
+ String java_home = System.getProperty("java.home");
+ StringBuilder buf = new StringBuilder();
+ for (int i = 0; i < bounds.length; i++) {
+ buf.append(" " + bounds[i].x);
+ buf.append(" " + bounds[i].y);
+ buf.append(" " + bounds[i].width);
+ buf.append(" " + bounds[i].height);
+ }
+ Map envs = System.getenv();
+ String enva[] = new String[envs.size()];
+ int ind = 0;
+ Iterator iter = envs.entrySet().iterator();
+ while (iter.hasNext()) {
+ Map.Entry entry = (Map.Entry)iter.next();
+ if (!"AWT_TOOLKIT".equals(entry.getKey())) {
+ enva[ind++] = entry.getKey() + "=" + entry.getValue();
+ } else {
+ enva[ind++] = "AWT_TOOLKIT=sun.awt.X11.XToolkit";
+ }
+ }
+ Process proc = Runtime.getRuntime().exec(java_home +
+ "/bin/java -Dawt.toolkit=sun.awt.X11.XToolkit TesterClient "
+ + test.getName() + " " + window + buf,
+ enva);
+ System.err.println("Test for " + test.getName() + " has started.");
+ log.fine("Test for " + test.getName() + " has started.");
+ new InputReader(proc.getInputStream());
+ new InputReader(proc.getErrorStream());
+ try {
+ passed = (proc.waitFor() == 0);
+ } catch (InterruptedException ie) {
+ }
+ log.fine("Test for " + test.getName() + " has finished.");
+ File logFile = new File("java3.txt");
+ if (logFile.exists()) {
+ logFile.renameTo(new File(test.getName() + ".txt"));
+ }
+ return proc;
+ } catch (IOException ex1) {
+ ex1.printStackTrace();
+ }
+ return null;
+ }
+
+ public static void main(String[] args) throws Throwable {
+ if (System.getProperty("os.name").toLowerCase().startsWith("win")) {
+ return;
+ }
+
+ // Enabled XEmbed
+ System.setProperty("sun.awt.xembedserver", "true");
+
+ if (args.length == 1) {
+ Class cl = Class.forName("sun.awt.X11.XEmbedServerTester");
+ Method meth = cl.getMethod(args[0], new Class[0]);
+ System.err.println("Performing single test " + args[0]);
+ boolean res = performTest(meth);
+ if (!res) {
+ System.err.println("Test " + args[0] + " has failed");
+ } else {
+ System.err.println("Test " + args[0] + " has passed");
+ }
+ } else {
+ Class cl = Class.forName("sun.awt.X11.XEmbedServerTester");
+ Method[] meths = cl.getMethods();
+ LinkedList failed = new LinkedList();
+ for (int i = 0; i < meths.length; i++) {
+ Method meth = meths[i];
+ if (meth.getReturnType() == Void.TYPE && meth.getName().startsWith("test") && meth.getParameterTypes().length == 0) {
+ System.err.println("Performing " + meth.getName());
+ boolean res = performTest(meth);
+ if (!res) {
+ failed.add(meth);
+ }
+ }
+ }
+ log.info("Testing finished.");
+ if (failed.size() != 0) {
+ System.err.println("Some tests have failed:");
+ Iterator iter = failed.iterator();
+ while(iter.hasNext()) {
+ Method meth = (Method)iter.next();
+ System.err.println(meth.getName());
+ }
+ throw new RuntimeException("TestFAILED: some of the testcases are failed");
+ } else {
+ System.err.println("All PASSED");
+ }
+ }
+ }
+
+ private static boolean performTest(Method meth) {
+ RunTestXEmbed test = new RunTestXEmbed(meth);
+ test.addClient();
+ test.dispose();
+ return test.isPassed();
+ }
+
+ public boolean isPassed() {
+ return passed;
+ }
+}
+
+class InputReader extends Thread {
+ private InputStream stream;
+ public InputReader(InputStream stream) {
+ this.stream = stream;
+ start();
+ }
+ public void run() {
+ while (!interrupted()) {
+ try {
+ int inp = stream.read();
+ if (inp != -1) {
+ System.out.write(inp);
+ } else {
+ try {
+ Thread.sleep(100);
+ } catch (Exception iie) {
+ }
+ }
+ } catch (IOException ie) {
+ break;
+ }
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/xembed/server/TestXEmbedServer.java Sun Apr 13 23:41:40 2008 +0400
@@ -0,0 +1,228 @@
+/*
+ * Copyright 2004-2008 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+import java.io.*;
+import java.util.logging.*;
+import sun.awt.WindowIDProvider;
+import java.awt.dnd.*;
+import java.awt.datatransfer.*;
+
+public abstract class TestXEmbedServer {
+ private static final Logger log = Logger.getLogger("test.xembed");
+ Frame f;
+ Canvas client;
+ Button toFocus;
+ Button b_modal;
+ JButton b_close;
+ JDialog modal_d;
+ JFrame dummy;
+ Container clientCont;
+ boolean passed;
+
+ public boolean isPassed() {
+ return passed;
+ }
+
+ public TestXEmbedServer(boolean manual) {
+
+ // Enable testing extensions in XEmbed server
+ System.setProperty("sun.awt.xembed.testing", "true");
+
+ f = new Frame("Main frame");
+ f.addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ synchronized(TestXEmbedServer.this) {
+ TestXEmbedServer.this.notifyAll();
+ }
+ dummy.dispose();
+ f.dispose();
+ }
+ });
+
+ f.setLayout(new BorderLayout());
+
+ Container bcont = new Container();
+
+ toFocus = new Button("Click to focus server");
+ final TextField tf = new TextField(20);
+ tf.setName("0");
+ DragSource ds = new DragSource();
+ final DragSourceListener dsl = new DragSourceAdapter() {
+ public void dragDropEnd(DragSourceDropEvent dsde) {
+ }
+ };
+ final DragGestureListener dgl = new DragGestureListener() {
+ public void dragGestureRecognized(DragGestureEvent dge) {
+ dge.startDrag(null, new StringSelection(tf.getText()), dsl);
+ }
+ };
+ ds.createDefaultDragGestureRecognizer(tf, DnDConstants.ACTION_COPY, dgl);
+
+ final DropTargetListener dtl = new DropTargetAdapter() {
+ public void drop(DropTargetDropEvent dtde) {
+ dtde.acceptDrop(DnDConstants.ACTION_COPY);
+ try {
+ tf.setText(tf.getText() + (String)dtde.getTransferable().getTransferData(DataFlavor.stringFlavor));
+ } catch (Exception e) {
+ }
+ }
+ };
+ final DropTarget dt = new DropTarget(tf, dtl);
+
+ Button b_add = new Button("Add client");
+ b_add.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ addClient();
+ }
+ });
+ Button b_remove = new Button("Remove client");
+ b_remove.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ if (clientCont.getComponentCount() != 0) {
+ clientCont.remove(clientCont.getComponentCount()-1);
+ }
+ }
+ });
+ b_close = new JButton("Close modal dialog");
+ b_close.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ modal_d.dispose();
+ }
+ });
+ b_modal = new Button("Show modal dialog");
+ b_modal.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ modal_d = new JDialog(f, "Modal dialog", true);
+ modal_d.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
+ modal_d.setBounds(0, 100, 200, 50);
+ modal_d.getContentPane().add(b_close);
+ modal_d.validate();
+ modal_d.show();
+ }
+ });
+
+ bcont.add(tf);
+ bcont.add(toFocus);
+ bcont.add(b_add);
+ bcont.add(b_remove);
+ bcont.add(b_modal);
+ if (manual) {
+ Button pass = new Button("Pass");
+ pass.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ passed = true;
+ synchronized(TestXEmbedServer.this) {
+ TestXEmbedServer.this.notifyAll();
+ }
+ }
+ });
+ bcont.add(pass);
+ Button fail = new Button("Fail");
+ fail.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ passed = false;
+ synchronized(TestXEmbedServer.this) {
+ TestXEmbedServer.this.notifyAll();
+ }
+ }
+ });
+ bcont.add(fail);
+ }
+ b_modal.setName("2");
+ bcont.setLayout(new FlowLayout());
+ f.add(bcont, BorderLayout.NORTH);
+
+ clientCont = Box.createVerticalBox();
+ f.add(clientCont, BorderLayout.CENTER);
+
+ dummy = new JFrame("Dummy");
+ dummy.getContentPane().add(new JButton("Button"));
+ dummy.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
+ dummy.setBounds(0, 0, 100, 100);
+ dummy.setVisible(true);
+
+ f.setBounds(300, 0, 800, 300);
+ f.setVisible(true);
+ }
+
+ public abstract Process startClient(Rectangle bounds[], long window);
+
+ public void addClient() {
+ client = new Canvas() {
+ public void paint(Graphics g) {
+ super.paint(g);
+ }
+ };
+ client.setBackground(new Color(30, 220, 40));
+ clientCont.add(client);
+ clientCont.validate();
+ WindowIDProvider pid = (WindowIDProvider)client.getPeer();
+ log.fine("Added XEmbed server(Canvas) with X window ID " + pid.getWindow());
+ Rectangle toFocusBounds = toFocus.getBounds();
+ toFocusBounds.setLocation(toFocus.getLocationOnScreen());
+ f.validate();
+
+ // KDE doesn't accept clicks on title as activation - click below title
+ Rectangle fbounds = f.getBounds();
+ fbounds.y += f.getInsets().top;
+ fbounds.height -= f.getInsets().top;
+
+ Process proc = startClient(new Rectangle[] {fbounds, dummy.getBounds(), toFocusBounds,
+ new Rectangle(b_modal.getLocationOnScreen(), b_modal.getSize()),
+ new Rectangle(10, 130, 20, 20)}, pid.getWindow());
+ new ClientWatcher(client, proc, clientCont).start();
+ }
+
+ public void dispose() {
+ f.dispose();
+ f = null;
+ dummy.dispose();
+ dummy = null;
+ if (modal_d != null) {
+ modal_d.dispose();
+ modal_d = null;
+ }
+ }
+}
+
+class ClientWatcher extends Thread {
+ private Process clientProcess;
+ private Canvas client;
+ private Container parent;
+ public ClientWatcher(Canvas client, Process proc, Container parent) {
+ this.client = client;
+ this.clientProcess = proc;
+ this.parent = parent;
+ }
+
+ public void run() {
+ try {
+ clientProcess.waitFor();
+ } catch (InterruptedException ie) {
+ }
+ parent.remove(client);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/xembed/server/TestXEmbedServerJava.java Sun Apr 13 23:41:40 2008 +0400
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2004-2008 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/**
+ * @test
+ * @bug 4931668
+ * @summary Tests XEmbed server/client functionality
+ * @author denis mikhalkin: area=awt.xembed
+ * @compile JavaClient.java TesterClient.java TestXEmbedServer.java
+ * @run main/manual TestXEmbedServerJava
+ */
+
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+import java.io.*;
+
+public class TestXEmbedServerJava extends TestXEmbedServer {
+ public static void main(String[] args) {
+ if (System.getProperty("os.name").toLowerCase().startsWith("win")) {
+ return;
+ }
+
+ // Enabled XEmbed
+ System.setProperty("sun.awt.xembedserver", "true");
+
+ String instruction =
+ "This is a manual test for XEmbed server functionality. \n" +
+ "You may start XEmbed client by pressing 'Add client' button.\n" +
+ "Check that focus transfer with mouse works, that focus traversal with Tab/Shift-Tab works.\n" +
+ "Check that XEmbed server client's growing and shrinking.\n" +
+ "Check that Drag&Drop works in all combinations.\n" +
+ "Check the keyboard input works in both text fields.\n";
+ Frame f = new Frame("Instructions");
+ f.setLayout(new BorderLayout());
+ f.add(new TextArea(instruction), BorderLayout.CENTER);
+ f.pack();
+ f.setLocation(0, 400);
+ f.setVisible(true);
+
+ TestXEmbedServerJava lock = new TestXEmbedServerJava();
+ try {
+ synchronized(lock) {
+ lock.wait();
+ }
+ } catch (InterruptedException e) {
+ }
+ if (!lock.isPassed()) {
+ throw new RuntimeException("Test failed");
+ }
+ }
+
+ public TestXEmbedServerJava() {
+ super(true);
+ }
+
+ public Process startClient(Rectangle[] bounds, long window) {
+ try {
+ String java_home = System.getProperty("java.home");
+ return Runtime.getRuntime().exec(java_home + "/bin/java JavaClient " + window);
+ } catch (IOException ex1) {
+ ex1.printStackTrace();
+ }
+ return null;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/xembed/server/TesterClient.java Sun Apr 13 23:41:40 2008 +0400
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2004-2008 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+import java.lang.reflect.*;
+import java.awt.Rectangle;
+import java.util.logging.*;
+
+public class TesterClient {
+ private static final Logger log = Logger.getLogger("test.xembed.TesterClient");
+ private static Method test;
+ private static boolean passed = false;
+ public static void main(String[] args) throws Throwable {
+ // First parameter is the name of the test, second is the window, the rest are rectangles
+ Class cl = Class.forName("sun.awt.X11.XEmbedServerTester");
+ test = cl.getMethod(args[0], new Class[0]);
+ long window = Long.parseLong(args[1]);
+ Rectangle r[] = new Rectangle[(args.length-2)/4];
+ for (int i = 0; i < r.length; i++) {
+ r[i] = new Rectangle(Integer.parseInt(args[2+i*4]), Integer.parseInt(args[2+i*4+1]),
+ Integer.parseInt(args[2+i*4+2]), Integer.parseInt(args[2+i*4+3]));
+ }
+ startClient(r, window);
+ }
+
+ public static void startClient(Rectangle bounds[], long window) throws Throwable {
+ Method m_getTester = Class.forName("sun.awt.X11.XEmbedServerTester").
+ getMethod("getTester", new Class[] {bounds.getClass(), Long.TYPE});
+ final Object tester = m_getTester.invoke(null, new Object[] {bounds, window});
+ try {
+ log.info("Starting test " + test.getName());
+ test.invoke(tester, (Object[])null);
+ log.info("Test " + test.getName() + " PASSED.");
+ passed = true;
+ } catch (Exception e) {
+ log.log(Level.WARNING, "Test " + test.getName() + " FAILED.", e);
+ }
+ System.exit(passed?0:1);
+ }
+}