diff options
author | Jiri Vanek <[email protected]> | 2012-10-26 12:15:18 +0200 |
---|---|---|
committer | Jiri Vanek <[email protected]> | 2012-10-26 12:15:18 +0200 |
commit | 76600a9e226f83e1fe100ee41edaa65ff1ed41ab (patch) | |
tree | 2b3d5572f5bff91382f09a2395731ce9ef62e163 /tests/reproducers | |
parent | c04ca02fec844a29e2d3983f7cce24ba07935964 (diff) |
Added clipboard reproducers (PR708)
Diffstat (limited to 'tests/reproducers')
12 files changed, 1088 insertions, 0 deletions
diff --git a/tests/reproducers/signed/ClipboardContentSigned/resources/ClipboardContentSignedCopy1.jnlp b/tests/reproducers/signed/ClipboardContentSigned/resources/ClipboardContentSignedCopy1.jnlp new file mode 100644 index 0000000..b03a193 --- /dev/null +++ b/tests/reproducers/signed/ClipboardContentSigned/resources/ClipboardContentSignedCopy1.jnlp @@ -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> diff --git a/tests/reproducers/signed/ClipboardContentSigned/resources/ClipboardContentSignedCopy2.jnlp b/tests/reproducers/signed/ClipboardContentSigned/resources/ClipboardContentSignedCopy2.jnlp new file mode 100644 index 0000000..6265d75 --- /dev/null +++ b/tests/reproducers/signed/ClipboardContentSigned/resources/ClipboardContentSignedCopy2.jnlp @@ -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> diff --git a/tests/reproducers/signed/ClipboardContentSigned/resources/ClipboardContentSignedPaste1.jnlp b/tests/reproducers/signed/ClipboardContentSigned/resources/ClipboardContentSignedPaste1.jnlp new file mode 100644 index 0000000..12e0b24 --- /dev/null +++ b/tests/reproducers/signed/ClipboardContentSigned/resources/ClipboardContentSignedPaste1.jnlp @@ -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> diff --git a/tests/reproducers/signed/ClipboardContentSigned/resources/ClipboardContentSignedPaste2.jnlp b/tests/reproducers/signed/ClipboardContentSigned/resources/ClipboardContentSignedPaste2.jnlp new file mode 100644 index 0000000..ad17a04 --- /dev/null +++ b/tests/reproducers/signed/ClipboardContentSigned/resources/ClipboardContentSignedPaste2.jnlp @@ -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> diff --git a/tests/reproducers/signed/ClipboardContentSigned/srcs/ClipboardContentSigned.java b/tests/reproducers/signed/ClipboardContentSigned/srcs/ClipboardContentSigned.java new file mode 100644 index 0000000..0b86bbe --- /dev/null +++ b/tests/reproducers/signed/ClipboardContentSigned/srcs/ClipboardContentSigned.java @@ -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); + } + } +} diff --git a/tests/reproducers/signed/ClipboardContentSigned/testcases/ClipboardContentSignedTests.java b/tests/reproducers/signed/ClipboardContentSigned/testcases/ClipboardContentSignedTests.java new file mode 100644 index 0000000..13099c7 --- /dev/null +++ b/tests/reproducers/signed/ClipboardContentSigned/testcases/ClipboardContentSignedTests.java @@ -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)); + } +} diff --git a/tests/reproducers/simple/ClipboardContent/resources/ClipboardContentCopy1.jnlp b/tests/reproducers/simple/ClipboardContent/resources/ClipboardContentCopy1.jnlp new file mode 100644 index 0000000..dcd740a --- /dev/null +++ b/tests/reproducers/simple/ClipboardContent/resources/ClipboardContentCopy1.jnlp @@ -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> diff --git a/tests/reproducers/simple/ClipboardContent/resources/ClipboardContentCopy2.jnlp b/tests/reproducers/simple/ClipboardContent/resources/ClipboardContentCopy2.jnlp new file mode 100644 index 0000000..af7cdcd --- /dev/null +++ b/tests/reproducers/simple/ClipboardContent/resources/ClipboardContentCopy2.jnlp @@ -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> diff --git a/tests/reproducers/simple/ClipboardContent/resources/ClipboardContentPaste1.jnlp b/tests/reproducers/simple/ClipboardContent/resources/ClipboardContentPaste1.jnlp new file mode 100644 index 0000000..65d5d25 --- /dev/null +++ b/tests/reproducers/simple/ClipboardContent/resources/ClipboardContentPaste1.jnlp @@ -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> diff --git a/tests/reproducers/simple/ClipboardContent/resources/ClipboardContentPaste2.jnlp b/tests/reproducers/simple/ClipboardContent/resources/ClipboardContentPaste2.jnlp new file mode 100644 index 0000000..593714c --- /dev/null +++ b/tests/reproducers/simple/ClipboardContent/resources/ClipboardContentPaste2.jnlp @@ -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> diff --git a/tests/reproducers/simple/ClipboardContent/srcs/ClipboardContent.java b/tests/reproducers/simple/ClipboardContent/srcs/ClipboardContent.java new file mode 100644 index 0000000..acc2697 --- /dev/null +++ b/tests/reproducers/simple/ClipboardContent/srcs/ClipboardContent.java @@ -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); + } + } +} diff --git a/tests/reproducers/simple/ClipboardContent/testcases/ClipboardContentTests.java b/tests/reproducers/simple/ClipboardContent/testcases/ClipboardContentTests.java new file mode 100644 index 0000000..5571ab8 --- /dev/null +++ b/tests/reproducers/simple/ClipboardContent/testcases/ClipboardContentTests.java @@ -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)); + } +} |