changeset 544:2c3a063c1aff

Added clipboard reproducers (PR708)
author Jiri Vanek <jvanek@redhat.com>
date Fri, 26 Oct 2012 12:15:18 +0200
parents c52fcd37dbd8
children d17bbf43ee22
files ChangeLog tests/reproducers/signed/ClipboardContentSigned/resources/ClipboardContentSignedCopy1.jnlp tests/reproducers/signed/ClipboardContentSigned/resources/ClipboardContentSignedCopy2.jnlp tests/reproducers/signed/ClipboardContentSigned/resources/ClipboardContentSignedPaste1.jnlp tests/reproducers/signed/ClipboardContentSigned/resources/ClipboardContentSignedPaste2.jnlp tests/reproducers/signed/ClipboardContentSigned/srcs/ClipboardContentSigned.java tests/reproducers/signed/ClipboardContentSigned/testcases/ClipboardContentSignedTests.java tests/reproducers/simple/ClipboardContent/resources/ClipboardContentCopy1.jnlp tests/reproducers/simple/ClipboardContent/resources/ClipboardContentCopy2.jnlp tests/reproducers/simple/ClipboardContent/resources/ClipboardContentPaste1.jnlp tests/reproducers/simple/ClipboardContent/resources/ClipboardContentPaste2.jnlp tests/reproducers/simple/ClipboardContent/srcs/ClipboardContent.java tests/reproducers/simple/ClipboardContent/testcases/ClipboardContentTests.java tests/test-extensions/net/sourceforge/jnlp/tools/AsyncJavaws.java tests/test-extensions/net/sourceforge/jnlp/tools/ClipboardHelpers.java tests/test-extensions/net/sourceforge/jnlp/tools/WaitingForStringProcess.java
diffstat 16 files changed, 1373 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Tue Oct 23 09:56:26 2012 +0200
+++ b/ChangeLog	Fri Oct 26 12:15:18 2012 +0200
@@ -1,3 +1,43 @@
+2012-10-26  Jiri Vanek <jvanek@redhat.com>
+
+	Added clipboard reproducers (PR708)
+	* tests/reproducers/signed/ClipboardContentSigned/resources/ClipboardContentSignedCopy1.jnlp:
+	Jnlp to invoke manual copying to clipboard on signed app, please note
+	the delayed death of application
+	* tests/reproducers/signed/ClipboardContentSigned/resources/ClipboardContentSignedCopy2.jnlp:
+	Jnlp to invoke jtextfield like copying  signed app, please note the
+	delayed death of application
+	* tests/reproducers/signed/ClipboardContentSigned/resources/ClipboardContentSignedPaste1.jnlp:
+	Jnlp to invoke manual pasting on signed application
+	* tests/reproducers/signed/ClipboardContentSigned/resources/ClipboardContentSignedPaste2.jnlp:
+	Jnlp to invoke jtextfield like pasting on signed application
+	* tests/reproducers/signed/ClipboardContentSigned/srcs/ClipboardContentSigned.java:
+	Application which is trying to access clipboard by various ways.
+	* tests/reproducers/signed/ClipboardContentSigned/testcases/ClipboardContentSignedTests.java:
+	Automated tests for four above jnlps.
+	* tests/reproducers/simple/ClipboardContent/resources/ClipboardContentCopy1.jnlp:
+	Jnlp to invoke manual copying to clipboard on unsigned app, please note
+	the delayed death of application
+	* tests/reproducers/simple/ClipboardContent/resources/ClipboardContentCopy2.jnlp:
+	Jnlp to invoke jtextfield like copying  unsigned app, please note the
+	delayed death of application
+	* tests/reproducers/simple/ClipboardContent/resources/ClipboardContentPaste1.jnlp:
+	Jnlp to invoke manual pasting on unsigned application
+	* tests/reproducers/simple/ClipboardContent/resources/ClipboardContentPaste2.jnlp:
+	Jnlp to invoke jtextfield like pasting on unsigned application
+	* tests/reproducers/simple/ClipboardContent/srcs/ClipboardContent.java:
+	Application which is trying to access clipboard by various ways.
+	* tests/reproducers/simple/ClipboardContent/testcases/ClipboardContentTests.java:
+	Automated tests for first and third of above four jnlps. The tests of
+	second and fourth is disabled due to necessary manual interaction 
+	* tests/test-extensions/net/sourceforge/jnlp/tools/WaitingForStringProcess.java:
+	Utility class for process waiting for some string for another string
+	* tests/test-extensions/net/sourceforge/jnlp/tools/ClipboardHelpers.java
+	Utility class for copying/pasting text to/from clipboard
+	* tests/test-extensions/net/sourceforge/jnlp/tools/AsyncJavaws.java
+	Utility class for launching javaws in separate thread.
+
+
 2012-10-23  Jiri Vanek <jvanek@redhat.com>
 
 	KnownToFail texts are now bold in html report
@@ -217,8 +257,8 @@
 
 2012-09-26  Jana Fabrikova  <jfabriko@redhat.com>
 
-        * tests/test-extensions/net/sourceforge/jnlp/closinglisteners/StringMatchClosingListener.java:
-        Added forgotten package name.
+	* tests/test-extensions/net/sourceforge/jnlp/closinglisteners/StringMatchClosingListener.java:
+	Added forgotten package name.
 
 2012-09-25  Jiri Vanek <jvanek@redhat.com>
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/reproducers/signed/ClipboardContentSigned/resources/ClipboardContentSignedCopy1.jnlp	Fri Oct 26 12:15:18 2012 +0200
@@ -0,0 +1,58 @@
+<!--
+
+This file is part of IcedTea.
+
+IcedTea is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+IcedTea 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 for more details.
+
+You should have received a copy of the GNU General Public License
+along with IcedTea; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version.
+
+ -->
+<?xml version="1.0" encoding="utf-8"?>
+<jnlp spec="1.0" href="ClipboardContentSignedCopy1.jnlp" codebase=".">
+    <information>
+        <title>ClipboardContentSignedCopy1</title>
+        <vendor>IcedTea</vendor>
+        <homepage href="http://icedtea.classpath.org/wiki/IcedTea-Web#Testing_IcedTea-Web"/>
+        <description>ClipboardContentSignedCopy1</description>
+        <offline/>
+    </information>
+    <resources>
+        <j2se version="1.4+"/>
+        <jar href="ClipboardContentSigned.jar"/>
+    </resources>
+    <application-desc main-class="ClipboardContentSigned">
+        <argument>copy1</argument>
+        <argument>10</argument>
+    </application-desc>
+    <security>
+        <all-permissions/>
+    </security>
+</jnlp>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/reproducers/signed/ClipboardContentSigned/resources/ClipboardContentSignedCopy2.jnlp	Fri Oct 26 12:15:18 2012 +0200
@@ -0,0 +1,58 @@
+<!--
+
+This file is part of IcedTea.
+
+IcedTea is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+IcedTea 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 for more details.
+
+You should have received a copy of the GNU General Public License
+along with IcedTea; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version.
+
+ -->
+<?xml version="1.0" encoding="utf-8"?>
+<jnlp spec="1.0" href="ClipboardContentSignedCopy2.jnlp" codebase=".">
+    <information>
+        <title>ClipboardContentSignedCopy2</title>
+        <vendor>IcedTea</vendor>
+        <homepage href="http://icedtea.classpath.org/wiki/IcedTea-Web#Testing_IcedTea-Web"/>
+        <description>ClipboardContentSignedCopy2</description>
+        <offline/>
+    </information>
+    <resources>
+        <j2se version="1.4+"/>
+        <jar href="ClipboardContentSigned.jar"/>
+    </resources>
+    <application-desc main-class="ClipboardContentSigned">
+        <argument>copy2</argument>
+        <argument>10</argument>
+    </application-desc>
+    <security>
+        <all-permissions/>
+    </security>
+</jnlp>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/reproducers/signed/ClipboardContentSigned/resources/ClipboardContentSignedPaste1.jnlp	Fri Oct 26 12:15:18 2012 +0200
@@ -0,0 +1,57 @@
+<!--
+
+This file is part of IcedTea.
+
+IcedTea is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+IcedTea 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 for more details.
+
+You should have received a copy of the GNU General Public License
+along with IcedTea; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version.
+
+ -->
+<?xml version="1.0" encoding="utf-8"?>
+<jnlp spec="1.0" href="ClipboardContentSignedPaste1.jnlp" codebase=".">
+    <information>
+        <title>ClipboardContentSignedPaste1</title>
+        <vendor>IcedTea</vendor>
+        <homepage href="http://icedtea.classpath.org/wiki/IcedTea-Web#Testing_IcedTea-Web"/>
+        <description>ClipboardContentSignedPaste1</description>
+        <offline/>
+    </information>
+    <resources>
+        <j2se version="1.4+"/>
+        <jar href="ClipboardContentSigned.jar"/>
+    </resources>
+    <application-desc main-class="ClipboardContentSigned">
+        <argument>paste1</argument>
+    </application-desc>
+    <security>
+        <all-permissions/>
+    </security>
+</jnlp>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/reproducers/signed/ClipboardContentSigned/resources/ClipboardContentSignedPaste2.jnlp	Fri Oct 26 12:15:18 2012 +0200
@@ -0,0 +1,57 @@
+<!--
+
+This file is part of IcedTea.
+
+IcedTea is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+IcedTea 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 for more details.
+
+You should have received a copy of the GNU General Public License
+along with IcedTea; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version.
+
+ -->
+<?xml version="1.0" encoding="utf-8"?>
+<jnlp spec="1.0" href="ClipboardContentSignedPaste2.jnlp" codebase=".">
+    <information>
+        <title>ClipboardContentSignedPaste2</title>
+        <vendor>IcedTea</vendor>
+        <homepage href="http://icedtea.classpath.org/wiki/IcedTea-Web#Testing_IcedTea-Web"/>
+        <description>ClipboardContentSignedPaste2</description>
+        <offline/>
+    </information>
+    <resources>
+        <j2se version="1.4+"/>
+        <jar href="ClipboardContentSigned.jar"/>
+    </resources>
+    <application-desc main-class="ClipboardContentSigned">
+        <argument>paste2</argument>
+    </application-desc>
+    <security>
+        <all-permissions/>
+    </security>
+</jnlp>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/reproducers/signed/ClipboardContentSigned/srcs/ClipboardContentSigned.java	Fri Oct 26 12:15:18 2012 +0200
@@ -0,0 +1,183 @@
+/* ClipboardContentSigned.java
+Copyright (C) 2012 Red Hat, Inc.
+
+This file is part of IcedTea.
+
+IcedTea is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License as published by
+the Free Software Foundation, version 2.
+
+IcedTea 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 for more details.
+
+You should have received a copy of the GNU General Public License
+along with IcedTea; see the file COPYING.  If not, write to
+the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version.
+ */
+
+import java.awt.Toolkit;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.util.concurrent.TimeUnit;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import javax.swing.SwingUtilities;
+import javax.swing.text.JTextComponent;
+
+public class ClipboardContentSigned extends JPanel {
+
+    private static final String contentC = "COPY#$REPRODUCER";
+    private static final String contentP = "PASTE#$REPRODUCER";
+
+    private static class LocalFrame extends JFrame {
+
+        JTextField t;
+
+        public LocalFrame(String str) {
+            super();
+            t = new JTextField(str);
+            this.add(t);
+            this.setSize(100, 100);
+            this.pack();
+            t.selectAll();
+            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        }
+
+        public void run() throws InterruptedException {
+            SwingUtilities.invokeLater(new Runnable() {
+
+                @Override
+                public void run() {
+                    setVisible(true);
+
+                }
+            });
+            while (!this.isVisible()) {
+                Thread.sleep(100);
+            }
+        }
+
+        public JTextField getT() {
+            return t;
+        }
+    }
+
+    public void putToClipboard1(String str) {
+        Toolkit toolkit = Toolkit.getDefaultToolkit();
+        Clipboard clipboard = toolkit.getSystemClipboard();
+        StringSelection strSel = new StringSelection(str);
+        clipboard.setContents(strSel, null);
+        printFlavors();
+    }
+
+    public void putToClipboard2(final String str) throws InterruptedException, NoSuchMethodException, IllegalAccessException, UnsupportedFlavorException, IllegalArgumentException, InvocationTargetException, IOException {
+        final LocalFrame lf = new LocalFrame(str);
+        lf.run();
+        ((JTextComponent) (lf.getT())).copy();
+        printFlavors();
+        lf.dispose();
+    }
+
+    public String pasteFromClipboard2() throws InterruptedException, NoSuchMethodException, IllegalAccessException, UnsupportedFlavorException, IllegalArgumentException, InvocationTargetException, IOException {
+        final LocalFrame lf = new LocalFrame("xxx");
+        lf.run();
+        ((JTextComponent) (lf.getT())).paste();
+        printFlavors();
+        String s = lf.getT().getText();
+        lf.dispose();
+        return s;
+    }
+
+    private void printFlavors() {
+//just for debugging
+//        Toolkit toolkit = Toolkit.getDefaultToolkit();
+//        Clipboard clipboard = toolkit.getSystemClipboard();
+//        Transferable clipData = clipboard.getContents(clipboard);
+//        DataFlavor[] cd = clipData.getTransferDataFlavors();
+//        for (DataFlavor dataFlavor : cd) {
+//            System.out.println(dataFlavor.getMimeType());
+//        }
+    }
+
+    public String pasteFromClipboard1() throws UnsupportedFlavorException, IOException {
+        Toolkit toolkit = Toolkit.getDefaultToolkit();
+        Clipboard clipboard = toolkit.getSystemClipboard();
+        Transferable clipData = clipboard.getContents(clipboard);
+        printFlavors();
+        String s = (String) (clipData.getTransferData(
+                DataFlavor.stringFlavor));
+        return s;
+    }
+
+    public static void main(String[] args) throws Exception {
+        ClipboardContentSigned cl = new ClipboardContentSigned();
+        if (args.length == 0) {
+            throw new IllegalArgumentException("at least copy1|2 or paste1|2 must be as argument (+mandatory number giving use timeout in seconds before termination)");
+        } else if (args.length == 1) {
+            cl.proceed(args[0]);
+        } else {
+            cl.proceed(args[0], args[1]);
+        }
+
+    }
+
+    public void proceed(String arg) throws Exception {
+        proceed(arg, 0);
+    }
+
+    public void proceed(String arg, String keepAliveFor) throws Exception {
+        proceed(arg, Long.valueOf(keepAliveFor));
+    }
+
+    public void proceed(String arg, long timeOut) throws Exception {
+        if (arg.equals("copy1")) {
+            System.out.println(this.getClass().getName() + " copying1 to clipboard " + contentC);
+            putToClipboard1(contentC);
+            System.out.println(this.getClass().getName() + " copied1 to clipboard " + pasteFromClipboard1());
+        } else if (arg.equals("paste1")) {
+            System.out.println(this.getClass().getName() + " pasting1 from clipboard ");
+            String nwContent = pasteFromClipboard1();
+            System.out.println(this.getClass().getName() + " pasted1 from clipboard " + nwContent);
+        } else if (arg.equals("copy2")) {
+            System.out.println(this.getClass().getName() + " copying2 to clipboard " + contentC);
+            putToClipboard2(contentC);
+            System.out.println(this.getClass().getName() + " copied2 to clipboard " + pasteFromClipboard2());
+        } else if (arg.equals("paste2")) {
+            System.out.println(this.getClass().getName() + " pasting2 from clipboard ");
+            String nwContent = pasteFromClipboard2();
+            System.out.println(this.getClass().getName() + " pasted2 from clipboard " + nwContent);
+        } else {
+            throw new IllegalArgumentException("supported copy1|2 paste1|2");
+        }
+        long start = System.nanoTime();
+        while (TimeUnit.NANOSECONDS.toSeconds(System.nanoTime() - start) < timeOut) {
+            Thread.sleep(500);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/reproducers/signed/ClipboardContentSigned/testcases/ClipboardContentSignedTests.java	Fri Oct 26 12:15:18 2012 +0200
@@ -0,0 +1,126 @@
+/* ClipboardContentSignedTests.java
+ Copyright (C) 2012 Red Hat, Inc.
+
+ This file is part of IcedTea.
+
+ IcedTea is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, version 2.
+
+ IcedTea 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 for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with IcedTea; see the file COPYING.  If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version.
+ */
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import net.sourceforge.jnlp.ContentReaderListener;
+import net.sourceforge.jnlp.ProcessResult;
+import net.sourceforge.jnlp.ServerAccess;
+import net.sourceforge.jnlp.annotations.Bug;
+import net.sourceforge.jnlp.annotations.NeedsDisplay;
+import net.sourceforge.jnlp.tools.AsyncJavaws;
+import static net.sourceforge.jnlp.tools.ClipboardHelpers.pasteFromClipboard;
+import static net.sourceforge.jnlp.tools.ClipboardHelpers.putToClipboard;
+import net.sourceforge.jnlp.tools.WaitingForStringProcess;
+import org.junit.Assert;
+import org.junit.Test;
+
+@Bug(id = "PR708")
+public class ClipboardContentSignedTests {
+
+    private static final String XCEPTION = "xception";
+    private static final String contentC = "COPY#$REPRODUCER";
+    private static final String contentP = "PASTE#$REPRODUCER";
+    private static final String emptyContent = "empty content";
+    private static ServerAccess server = new ServerAccess();
+    private static final List<String> javawsTrustArg = Collections.unmodifiableList(Arrays.asList(new String[]{"-Xtrustall"}));
+
+    @Test
+    public void assertClipboardIsWorking() throws Exception {
+        putToClipboard(emptyContent);
+        Assert.assertEquals("Clipboard must contain new value, did not", emptyContent, pasteFromClipboard());
+        putToClipboard(contentC);
+        Assert.assertEquals("Clipboard must contain new value, did not", contentC, pasteFromClipboard());
+    }
+
+    @Test
+    @Bug(id = "PR708")
+    public void ClipboardContentSignedTestCopy1() throws Exception {
+        putToClipboard(emptyContent);
+        Assert.assertEquals("Clipboard must contain new value, did not", emptyContent, pasteFromClipboard());
+        WaitingForStringProcess wfsp = new WaitingForStringProcess(server, "/ClipboardContentSignedCopy1.jnlp", javawsTrustArg, true, "copied");
+        wfsp.run();
+        String ss = pasteFromClipboard();
+        Assert.assertEquals("Clipboard must contain new value, did not", contentC, ss);
+        //Assert.assertFalse("ClipboardContentSignedCopy stderr should not contain " + XCEPTION + " but did ", wfsp.getErr().contains(XCEPTION));
+    }
+
+    @Test
+    @Bug(id = "PR708")
+    @NeedsDisplay
+    public void ClipboardContentSignedTestCopy2() throws Exception {
+        putToClipboard(emptyContent);
+        Assert.assertEquals("Clipboard must contain new value, did not", emptyContent, pasteFromClipboard());
+        WaitingForStringProcess wfsp = new WaitingForStringProcess(server, "/ClipboardContentSignedCopy2.jnlp", javawsTrustArg, false, "copied");
+        wfsp.run();
+        String ss = pasteFromClipboard();
+        Assert.assertEquals("Clipboard must contain new value, did not", contentC, ss);
+        //Assert.assertFalse("ClipboardContentSignedCopy stderr should not contain " + XCEPTION + " but did ", wfsp.getErr().contains(XCEPTION));
+
+    }
+
+    @Test
+    @Bug(id = "PR708")
+    public void ClipboardContentSignedTestPaste1() throws Exception {
+        //necessery errasing
+        putToClipboard(emptyContent);
+        Assert.assertEquals("Clipboard must contain new value, did not", emptyContent, pasteFromClipboard());
+        //now put the tested data
+        putToClipboard(contentP);
+        Assert.assertEquals("Clipboard must contain new value, did not", contentP, pasteFromClipboard());
+        ProcessResult pr = server.executeJavawsHeadless(javawsTrustArg, "/ClipboardContentSignedPaste1.jnlp");
+        Assert.assertTrue("ClipboardContentSignedTestPaste stdout should contain " + contentP + " but didn't", pr.stdout.contains(contentP));
+        //Assert.assertFalse("ClipboardContentSignedTestPaste stderr should not contain " + XCEPTION + " but did ", pr.stderr.contains(XCEPTION));
+    }
+
+    @Test
+    @Bug(id = "PR708")
+    @NeedsDisplay
+    public void ClipboardContentSignedTestPaste2() throws Exception {
+        //necessery errasing
+        putToClipboard(emptyContent);
+        Assert.assertEquals("Clipboard must contain new value, did not", emptyContent, pasteFromClipboard());
+        //now put the tested data
+        putToClipboard(contentP);
+        Assert.assertEquals("Clipboard must contain new value, did not", contentP, pasteFromClipboard());
+        Assert.assertEquals("Clipboard must contain new value, did not", contentP, pasteFromClipboard());
+        ProcessResult pr = server.executeJavaws(javawsTrustArg, "/ClipboardContentSignedPaste2.jnlp");
+        Assert.assertTrue("ClipboardContentSignedTestPaste stdout should contain " + contentP + " but didn't", pr.stdout.contains(contentP));
+        //Assert.assertFalse("ClipboardContentSignedTestPaste stderr should not contain " + XCEPTION + " but did ", pr.stderr.contains(XCEPTION));
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/reproducers/simple/ClipboardContent/resources/ClipboardContentCopy1.jnlp	Fri Oct 26 12:15:18 2012 +0200
@@ -0,0 +1,58 @@
+<!--
+
+This file is part of IcedTea.
+
+IcedTea is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+IcedTea 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 for more details.
+
+You should have received a copy of the GNU General Public License
+along with IcedTea; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version.
+
+ -->
+<?xml version="1.0" encoding="utf-8"?>
+<jnlp spec="1.0" href="ClipboardContentCopy1.jnlp" codebase=".">
+    <information>
+        <title>ClipboardContentCopy1</title>
+        <vendor>IcedTea</vendor>
+        <homepage href="http://icedtea.classpath.org/wiki/IcedTea-Web#Testing_IcedTea-Web"/>
+        <description>ClipboardContentCopy1</description>
+        <offline/>
+    </information>
+    <resources>
+        <j2se version="1.4+"/>
+        <jar href="ClipboardContent.jar"/>
+    </resources>
+    <application-desc main-class="ClipboardContent">
+        <argument>copy1</argument>
+        <argument>10</argument>
+    </application-desc>
+    <security>
+        <all-permissions/>
+    </security>
+</jnlp>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/reproducers/simple/ClipboardContent/resources/ClipboardContentCopy2.jnlp	Fri Oct 26 12:15:18 2012 +0200
@@ -0,0 +1,58 @@
+<!--
+
+This file is part of IcedTea.
+
+IcedTea is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+IcedTea 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 for more details.
+
+You should have received a copy of the GNU General Public License
+along with IcedTea; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version.
+
+ -->
+<?xml version="1.0" encoding="utf-8"?>
+<jnlp spec="1.0" href="ClipboardContentCopy2.jnlp" codebase=".">
+    <information>
+        <title>ClipboardContentCopy2</title>
+        <vendor>IcedTea</vendor>
+        <homepage href="http://icedtea.classpath.org/wiki/IcedTea-Web#Testing_IcedTea-Web"/>
+        <description>ClipboardContentCopy2</description>
+        <offline/>
+    </information>
+    <resources>
+        <j2se version="1.4+"/>
+        <jar href="ClipboardContent.jar"/>
+    </resources>
+    <application-desc main-class="ClipboardContent">
+        <argument>copy2</argument>
+        <argument>10</argument>
+    </application-desc>
+    <security>
+        <all-permissions/>
+    </security>
+</jnlp>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/reproducers/simple/ClipboardContent/resources/ClipboardContentPaste1.jnlp	Fri Oct 26 12:15:18 2012 +0200
@@ -0,0 +1,57 @@
+<!--
+
+This file is part of IcedTea.
+
+IcedTea is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+IcedTea 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 for more details.
+
+You should have received a copy of the GNU General Public License
+along with IcedTea; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version.
+
+ -->
+<?xml version="1.0" encoding="utf-8"?>
+<jnlp spec="1.0" href="ClipboardContentPaste1.jnlp" codebase=".">
+    <information>
+        <title>ClipboardContentPaste1</title>
+        <vendor>IcedTea</vendor>
+        <homepage href="http://icedtea.classpath.org/wiki/IcedTea-Web#Testing_IcedTea-Web"/>
+        <description>ClipboardContentPaste1</description>
+        <offline/>
+    </information>
+    <resources>
+        <j2se version="1.4+"/>
+        <jar href="ClipboardContent.jar"/>
+    </resources>
+    <application-desc main-class="ClipboardContent">
+        <argument>paste1</argument>
+    </application-desc>
+    <security>
+        <all-permissions/>
+    </security>
+</jnlp>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/reproducers/simple/ClipboardContent/resources/ClipboardContentPaste2.jnlp	Fri Oct 26 12:15:18 2012 +0200
@@ -0,0 +1,57 @@
+<!--
+
+This file is part of IcedTea.
+
+IcedTea is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+IcedTea 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 for more details.
+
+You should have received a copy of the GNU General Public License
+along with IcedTea; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version.
+
+ -->
+<?xml version="1.0" encoding="utf-8"?>
+<jnlp spec="1.0" href="ClipboardContentPaste2.jnlp" codebase=".">
+    <information>
+        <title>ClipboardContentPaste2</title>
+        <vendor>IcedTea</vendor>
+        <homepage href="http://icedtea.classpath.org/wiki/IcedTea-Web#Testing_IcedTea-Web"/>
+        <description>ClipboardContentPaste2</description>
+        <offline/>
+    </information>
+    <resources>
+        <j2se version="1.4+"/>
+        <jar href="ClipboardContent.jar"/>
+    </resources>
+    <application-desc main-class="ClipboardContent">
+        <argument>paste2</argument>
+    </application-desc>
+    <security>
+        <all-permissions/>
+    </security>
+</jnlp>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/reproducers/simple/ClipboardContent/srcs/ClipboardContent.java	Fri Oct 26 12:15:18 2012 +0200
@@ -0,0 +1,183 @@
+/* ClipboardContent.java
+Copyright (C) 2012 Red Hat, Inc.
+
+This file is part of IcedTea.
+
+IcedTea is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License as published by
+the Free Software Foundation, version 2.
+
+IcedTea 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 for more details.
+
+You should have received a copy of the GNU General Public License
+along with IcedTea; see the file COPYING.  If not, write to
+the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version.
+ */
+
+import java.awt.Toolkit;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.util.concurrent.TimeUnit;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import javax.swing.SwingUtilities;
+import javax.swing.text.JTextComponent;
+
+public class ClipboardContent extends JPanel {
+
+    private static final String contentC = "COPY#$REPRODUCER";
+    private static final String contentP = "PASTE#$REPRODUCER";
+
+    private static class LocalFrame extends JFrame {
+
+        JTextField t;
+
+        public LocalFrame(String str) {
+            super();
+            t = new JTextField(str);
+            this.add(t);
+            this.setSize(100, 100);
+            this.pack();
+            t.selectAll();
+            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        }
+
+        public void run() throws InterruptedException {
+            SwingUtilities.invokeLater(new Runnable() {
+
+                @Override
+                public void run() {
+                    setVisible(true);
+
+                }
+            });
+            while (!this.isVisible()) {
+                Thread.sleep(100);
+            }
+        }
+
+        public JTextField getT() {
+            return t;
+        }
+    }
+
+    public void putToClipboard1(String str) {
+        Toolkit toolkit = Toolkit.getDefaultToolkit();
+        Clipboard clipboard = toolkit.getSystemClipboard();
+        StringSelection strSel = new StringSelection(str);
+        clipboard.setContents(strSel, null);
+        printFlavors();
+    }
+
+    public void putToClipboard2(final String str) throws InterruptedException, NoSuchMethodException, IllegalAccessException, UnsupportedFlavorException, IllegalArgumentException, InvocationTargetException, IOException {
+        final LocalFrame lf = new LocalFrame(str);
+        lf.run();
+        ((JTextComponent) (lf.getT())).copy();
+        printFlavors();
+        lf.dispose();
+    }
+
+    public String pasteFromClipboard2() throws InterruptedException, NoSuchMethodException, IllegalAccessException, UnsupportedFlavorException, IllegalArgumentException, InvocationTargetException, IOException {
+        final LocalFrame lf = new LocalFrame("xxx");
+        lf.run();
+        ((JTextComponent) (lf.getT())).paste();
+        printFlavors();
+        String s = lf.getT().getText();
+        lf.dispose();
+        return s;
+    }
+
+    private void printFlavors() {
+//just for debugging
+//        Toolkit toolkit = Toolkit.getDefaultToolkit();
+//        Clipboard clipboard = toolkit.getSystemClipboard();
+//        Transferable clipData = clipboard.getContents(clipboard);
+//        DataFlavor[] cd = clipData.getTransferDataFlavors();
+//        for (DataFlavor dataFlavor : cd) {
+//            System.out.println(dataFlavor.getMimeType());
+//        }
+    }
+
+    public String pasteFromClipboard1() throws UnsupportedFlavorException, IOException {
+        Toolkit toolkit = Toolkit.getDefaultToolkit();
+        Clipboard clipboard = toolkit.getSystemClipboard();
+        Transferable clipData = clipboard.getContents(clipboard);
+        printFlavors();
+        String s = (String) (clipData.getTransferData(
+                DataFlavor.stringFlavor));
+        return s;
+    }
+
+    public static void main(String[] args) throws Exception {
+        ClipboardContent cl = new ClipboardContent();
+        if (args.length == 0) {
+            throw new IllegalArgumentException("at least copy1|2 or paste1|2 must be as argument (+mandatory number giving use timeout in seconds before termination)");
+        } else if (args.length == 1) {
+            cl.proceed(args[0]);
+        } else {
+            cl.proceed(args[0], args[1]);
+        }
+
+    }
+
+    public void proceed(String arg) throws Exception {
+        proceed(arg, 0);
+    }
+
+    public void proceed(String arg, String keepAliveFor) throws Exception {
+        proceed(arg, Long.valueOf(keepAliveFor));
+    }
+
+    public void proceed(String arg, long timeOut) throws Exception {
+        if (arg.equals("copy1")) {
+            System.out.println(this.getClass().getName() + " copying1 to clipboard " + contentC);
+            putToClipboard1(contentC);
+            System.out.println(this.getClass().getName() + " copied1 to clipboard " + pasteFromClipboard1());
+        } else if (arg.equals("paste1")) {
+            System.out.println(this.getClass().getName() + " pasting1 from clipboard ");
+            String nwContent = pasteFromClipboard1();
+            System.out.println(this.getClass().getName() + " pasted1 from clipboard " + nwContent);
+        } else if (arg.equals("copy2")) {
+            System.out.println(this.getClass().getName() + " copying2 to clipboard " + contentC);
+            putToClipboard2(contentC);
+            System.out.println(this.getClass().getName() + " copied2 to clipboard " + pasteFromClipboard2());
+        } else if (arg.equals("paste2")) {
+            System.out.println(this.getClass().getName() + " pasting2 from clipboard ");
+            String nwContent = pasteFromClipboard2();
+            System.out.println(this.getClass().getName() + " pasted2 from clipboard " + nwContent);
+        } else {
+            throw new IllegalArgumentException("supported copy1|2 paste1|2");
+        }
+        long start = System.nanoTime();
+        while (TimeUnit.NANOSECONDS.toSeconds(System.nanoTime() - start) < timeOut) {
+            Thread.sleep(500);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/reproducers/simple/ClipboardContent/testcases/ClipboardContentTests.java	Fri Oct 26 12:15:18 2012 +0200
@@ -0,0 +1,136 @@
+/* ClipboardContentTests.java
+Copyright (C) 2012 Red Hat, Inc.
+
+This file is part of IcedTea.
+
+IcedTea is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License as published by
+the Free Software Foundation, version 2.
+
+IcedTea 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 for more details.
+
+You should have received a copy of the GNU General Public License
+along with IcedTea; see the file COPYING.  If not, write to
+the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version.
+ */
+
+import net.sourceforge.jnlp.tools.WaitingForStringProcess;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import net.sourceforge.jnlp.ContentReaderListener;
+import net.sourceforge.jnlp.ProcessResult;
+import net.sourceforge.jnlp.ServerAccess;
+import net.sourceforge.jnlp.annotations.Bug;
+import net.sourceforge.jnlp.annotations.NeedsDisplay;
+import net.sourceforge.jnlp.tools.AsyncJavaws;
+import static net.sourceforge.jnlp.tools.ClipboardHelpers.pasteFromClipboard;
+import static net.sourceforge.jnlp.tools.ClipboardHelpers.putToClipboard;
+import org.junit.Assert;
+import org.junit.Test;
+
+
+
+@Bug(id="PR708")
+public class ClipboardContentTests {
+    
+    private static final String XCEPTION = "xception";
+    private static final String contentC = "COPY#$REPRODUCER";
+    private static final String contentP = "PASTE#$REPRODUCER";
+    private static final String emptyContent = "empty content";
+    private static ServerAccess server = new ServerAccess();
+    private static final List<String> javawsTrustArg = Collections.unmodifiableList(Arrays.asList(new String[]{"-Xtrustall"}));
+
+
+    @Test
+    public void assertClipboardIsWorking() throws Exception {
+        putToClipboard(emptyContent);
+        Assert.assertEquals(emptyContent, pasteFromClipboard());
+        putToClipboard(contentC);
+        Assert.assertEquals(contentC, pasteFromClipboard());
+    }
+
+    @Test
+    @Bug(id = "PR708")
+    public void ClipboardContentTestCopy1() throws Exception {
+        putToClipboard(emptyContent);
+        Assert.assertEquals("Clipboard must contain new value, did not", emptyContent, pasteFromClipboard());
+        WaitingForStringProcess wfsp = new WaitingForStringProcess(server, "/ClipboardContentCopy1.jnlp", javawsTrustArg, true, "copied");
+        wfsp.run();
+        String ss = pasteFromClipboard();
+        Assert.assertEquals("Clipboard content must not be changed - was", emptyContent, ss);
+        Assert.assertNotNull("Result had to be delivered, was not", wfsp.getAj().getResult());
+        Assert.assertTrue("ClipboardContentSignedCopy stderr should contain " + XCEPTION + " but did not ", wfsp.getAj().getResult().stderr.contains(XCEPTION));
+    }
+
+    //@Test needs awt robot to close dialog
+    @Bug(id = "PR708")
+    @NeedsDisplay
+    public void ClipboardContentTestCopy2() throws Exception {
+        putToClipboard(emptyContent);
+        Assert.assertEquals("Clipboard must contain new value, did not", emptyContent, pasteFromClipboard());
+        WaitingForStringProcess wfsp = new WaitingForStringProcess(server, "/ClipboardContentCopy2.jnlp", javawsTrustArg, false, "copied");
+        wfsp.run();
+        String ss = pasteFromClipboard();
+        Assert.assertEquals("Clipboard content must not be changed, was", emptyContent, ss);
+        Assert.assertNotNull("Result had to be delivered, was not", wfsp.getAj().getResult());
+        Assert.assertTrue("ClipboardContentSignedCopy stderr should contain " + XCEPTION + " but did not", wfsp.getAj().getResult().stderr.contains(XCEPTION));
+
+    }
+
+    @Test
+    @Bug(id = "PR708")
+    public void ClipboardContentTestPaste1() throws Exception {
+        //necessery errasing
+        putToClipboard(emptyContent);
+        Assert.assertEquals("Clipboard must contain new value, did not", emptyContent, pasteFromClipboard());
+        //now put the tested data
+        putToClipboard(contentP);
+        Assert.assertEquals("Clipboard must contain new value, did not", contentP, pasteFromClipboard());
+        ProcessResult pr = server.executeJavawsHeadless(javawsTrustArg, "/ClipboardContentPaste1.jnlp");
+        Assert.assertFalse("ClipboardContentTestPaste stdout should not contain " + contentP + " but didn't", pr.stdout.contains(contentP));
+        Assert.assertTrue("ClipboardContentTestPaste stderr should contain " + XCEPTION + " but didn't ", pr.stderr.contains(XCEPTION));
+
+    }
+
+    //@Test
+    //needs awt robot to close dialog
+    //Q - can this test be headless,and so automated?
+    //A - no, headless test are present. Swing is handling clipoard by little bit more complicated ways
+    // but imho at the end its the same privlidges. So this test is kept only fo record
+    @Bug(id = "PR708")
+    @NeedsDisplay
+    public void ClipboardContentTestPaste2() throws Exception {
+        //necessery errasing
+        putToClipboard(emptyContent);
+        Assert.assertEquals("Clipboard must contain new value, did not", emptyContent, pasteFromClipboard());
+        //now put the tested data
+        putToClipboard(contentP);
+        Assert.assertEquals("Clipboard must contain new value, did not", contentP, pasteFromClipboard());
+        Assert.assertEquals("Clipboard must contain new value, did not", contentP, pasteFromClipboard());
+        ProcessResult pr = server.executeJavaws(javawsTrustArg, "/ClipboardContentPaste2.jnlp");
+        Assert.assertFalse("ClipboardContentTestPaste stdout should not contain " + contentP + " but didn't", pr.stdout.contains(contentP));
+        Assert.assertTrue("ClipboardContentTestPaste stderr should contain " + XCEPTION + " but didn't ", pr.stderr.contains(XCEPTION));
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-extensions/net/sourceforge/jnlp/tools/AsyncJavaws.java	Fri Oct 26 12:15:18 2012 +0200
@@ -0,0 +1,88 @@
+/* AsyncJavaws.java
+ Copyright (C)  2012 Red Hat, Inc.
+
+ This file is part of IcedTea.
+
+ IcedTea is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, version 2.
+
+ IcedTea 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 for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with IcedTea; see the file COPYING.  If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version.
+ */
+package net.sourceforge.jnlp.tools;
+
+import java.util.List;
+import net.sourceforge.jnlp.ContentReaderListener;
+import net.sourceforge.jnlp.ProcessResult;
+import net.sourceforge.jnlp.ServerAccess;
+import org.junit.Assert;
+
+/**
+ * You can see ClipboardContext reproducers as examples
+ *
+ */
+public class AsyncJavaws implements Runnable {
+
+    private final boolean headless;
+    private final String url;
+    private ProcessResult result;
+    private ContentReaderListener contentReaderListener;
+    private ContentReaderListener errorReaderListener;
+    private final List<String> argList;
+    private final ServerAccess server;
+
+    public AsyncJavaws(ServerAccess server, String url, List<String> argList, boolean headless, ContentReaderListener contentReaderListener, ContentReaderListener errorReaderListener) {
+        this.url = url;
+        this.headless = headless;
+        this.contentReaderListener = contentReaderListener;
+        this.errorReaderListener = errorReaderListener;
+        this.argList = argList;
+        this.server = server;
+        Assert.assertNotNull(server);
+    }
+
+    @Override
+    public void run() {
+        try {
+            if (headless) {
+                result = server.executeJavawsHeadless(argList, url, contentReaderListener, errorReaderListener, null);
+            } else {
+                result = server.executeJavaws(argList, url, contentReaderListener, errorReaderListener);
+            }
+        } catch (Exception ex) {
+            if (result == null) {
+                result = new ProcessResult("", ex.getMessage(), null, true, 1, ex);
+            }
+            throw new RuntimeException(ex);
+        }
+    }
+
+    public ProcessResult getResult() {
+        return result;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-extensions/net/sourceforge/jnlp/tools/ClipboardHelpers.java	Fri Oct 26 12:15:18 2012 +0200
@@ -0,0 +1,64 @@
+/* ClipboardHelpers.java
+ Copyright (C)  2012 Red Hat, Inc.
+
+ This file is part of IcedTea.
+
+ IcedTea is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, version 2.
+
+ IcedTea 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 for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with IcedTea; see the file COPYING.  If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version.
+ */
+package net.sourceforge.jnlp.tools;
+
+import java.awt.Toolkit;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.io.IOException;
+
+public class ClipboardHelpers {
+
+    public static void putToClipboard(String str) {
+        Toolkit toolkit = Toolkit.getDefaultToolkit();
+        Clipboard clipboard = toolkit.getSystemClipboard();
+        StringSelection strSel = new StringSelection(str);
+        clipboard.setContents(strSel, null);
+    }
+
+    public static String pasteFromClipboard() throws UnsupportedFlavorException, IOException {
+        Toolkit toolkit = Toolkit.getDefaultToolkit();
+        Clipboard clipboard = toolkit.getSystemClipboard();
+        Transferable clipData = clipboard.getContents(clipboard);
+        String s = (String) (clipData.getTransferData(
+                DataFlavor.stringFlavor));
+        return s;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-extensions/net/sourceforge/jnlp/tools/WaitingForStringProcess.java	Fri Oct 26 12:15:18 2012 +0200
@@ -0,0 +1,91 @@
+package net.sourceforge.jnlp.tools;
+
+
+import java.util.List;
+import net.sourceforge.jnlp.ContentReaderListener;
+import net.sourceforge.jnlp.ServerAccess;
+import org.junit.Assert;
+
+/**
+ * You can see ClipboardContext reproducers as examples
+ * 
+ */
+
+public class WaitingForStringProcess implements ContentReaderListener, Runnable {
+    private final boolean headless;
+    private final String url;
+    private StringBuilder output = new StringBuilder();
+    private StringBuilder err = new StringBuilder();
+    private AsyncJavaws aj;
+    ContentReaderListener errListener = new ContentReaderListener() {
+        @Override
+        public void charReaded(char ch) {
+            err.append(ch);
+        }
+
+        @Override
+        public void lineReaded(String s) {
+        }
+    };
+    private final String waitingFor;
+    private boolean canRun = true;
+    private final ServerAccess server;
+    private final List<String> otherArgs;
+
+    public WaitingForStringProcess(ServerAccess server, String url, List<String> otherArgs, boolean headless, String waitingFor) {
+        this.url = url;
+        this.headless = headless;
+        this.waitingFor = waitingFor;
+        Assert.assertNotNull(waitingFor);
+        Assert.assertNotNull(url);
+        this.server = server;
+        this.otherArgs = otherArgs;
+        Assert.assertNotNull(server);
+    }
+
+    @Override
+    public void charReaded(char ch) {
+        output.append(ch);
+    }
+
+    @Override
+    public void lineReaded(String s) {
+        if (s.contains(waitingFor)) {
+            canRun = false;
+        }
+    }
+
+    @Override
+    public void run() {
+        aj = new AsyncJavaws(server, url, otherArgs, headless, this, errListener);
+        ServerAccess.logOutputReprint("Starting thread with " + url + " and waiting for result or string " + waitingFor);
+        new Thread(aj).start();
+        while (canRun && aj.getResult() == null) {
+            try {
+                Thread.sleep(100);
+            } catch (InterruptedException ex) {
+                ServerAccess.logErrorReprint("iteration interrupted");
+                throw new RuntimeException(ex);
+            }
+        }
+        if (aj.getResult() != null) {
+            ServerAccess.logOutputReprint("Waiting done. Result have been delivered");
+        }
+        if (!canRun) {
+            ServerAccess.logOutputReprint("Waiting done. String " + waitingFor + " delivered");
+        }
+    }
+
+    public String getErr() {
+        return err.toString();
+    }
+
+    public String getOutput() {
+        return output.toString();
+    }
+
+    public AsyncJavaws getAj() {
+        return aj;
+    }
+    
+}