Mercurial > hg > release > icedtea-web-1.8
changeset 544:2c3a063c1aff
Added clipboard reproducers (PR708)
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; + } + +}