--- /dev/null 2014-07-01 12:18:16.415424475 +0400 +++ new/test/java/awt/Clipboard/BasicClipboardTest.java 2014-07-01 15:24:58.066980541 +0400 @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.datatransfer.*; + +/* + * @test + * @summary To test the basic Clipboard functions + * @author Kanishk Jethi (kanishk.jethi@sun.com) area=Clipboard + * @run main BasicClipboardTest + */ + +public class BasicClipboardTest implements ClipboardOwner { + + StringSelection strSelect = new StringSelection("Transferable String Selection"); + StringSelection strCheck; + String clipName = "Test Clipboard"; + Clipboard clip = new Clipboard(clipName); + DataFlavor dataFlavor, testDataFlavor ; + DataFlavor dataFlavorArray[]; + Object testObject; + String strTest = null; + + public static void main (String[] args) throws Exception { + new BasicClipboardTest().doTest(); + } + + public void doTest() throws Exception { + dataFlavor = new DataFlavor(DataFlavor.javaRemoteObjectMimeType, null, this.getClass().getClassLoader()); + // test for null return of selectBestTextFlavor if input is null or + // of zero length + testDataFlavor = DataFlavor.selectBestTextFlavor(dataFlavorArray); + if (testDataFlavor != null) + throw new RuntimeException("\n***Error in selectBestTextFlavor"); + + dataFlavorArray = new DataFlavor[0]; + + testDataFlavor = DataFlavor.selectBestTextFlavor(dataFlavorArray); + if (testDataFlavor != null) + throw new RuntimeException("\n***Error in selectBestTextFlavor"); + + // test for null return when there are no text flavors in array + dataFlavorArray = new DataFlavor[1]; + dataFlavorArray[0] = new DataFlavor(DataFlavor.javaSerializedObjectMimeType + ";class=java.io.Serializable"); + + testDataFlavor = DataFlavor.selectBestTextFlavor(dataFlavorArray); + if (testDataFlavor != null) + throw new RuntimeException("\n***Error in selectBestTextFlavor"); + + if (clip.getName() != clipName) + throw new RuntimeException("\n*** Error in Clipboard.getName()"); + + // set the owner of the clipboard to null to check branch coverage + // of the setContents method + clip.setContents(null, null); + + //set the owner of the clipboard to something valid to check branch + //coverage of the setContents method + clip.setContents(null, new BasicClipboardTest()); + + //set the owner of the clipboard to this to check branch coverage + // of the setContents method + clip.setContents(null, this); + + //set the contents of the clipboard + clip.setContents(strSelect, this); + + //get the contents of the clipboard + strCheck = (StringSelection)clip.getContents(this); + if (!strCheck.equals(strSelect)) + throw new RuntimeException("\n***The contents of the clipboard are " + + "not the same as those that were set"); + + //Check if getReaderForText throws IAE when the Transferable has + //null TransferData + dataFlavor = DataFlavor.stringFlavor; + strSelect = new StringSelection(null); + try { + testObject = dataFlavor.getReaderForText(strSelect); + throw new RuntimeException("\n***Error in getReaderForText. An IAE should have been thrown"); + } catch (IllegalArgumentException iae) { + // do nothing as this is expected + } + + //Check getParameter + dataFlavor.setHumanPresentableName("String Flavor"); + if (!(dataFlavor.getParameter("humanPresentableName")).equals("String Flavor")) + throw new RuntimeException("\n***Error in getParameter"); + + //Check equals + try { + if (dataFlavor.isMimeTypeEqual(strTest)) + throw new RuntimeException("\n***Error in DataFlavor.equals(String s)"); + } catch (NullPointerException e) { + //do nothing as it is expected + } + + if (!(dataFlavor.isMimeTypeEqual(dataFlavor.getMimeType()))) + throw new RuntimeException("\n***Error in DataFlavor.equals(String s)"); + + //Check isMimeTypeSerializedObject + if (!dataFlavorArray[0].isMimeTypeSerializedObject()) + throw new RuntimeException("\n***Error in isMimeTypeSerializedObject()"); + System.out.println(dataFlavorArray[0].getDefaultRepresentationClass()); + System.out.println(dataFlavorArray[0].getDefaultRepresentationClassAsString()); + //Check isFlavorRemoteObjectType + if (dataFlavor.isFlavorRemoteObjectType()) + System.out.println("The DataFlavor is a remote object type"); + + //Check clone() + testDataFlavor = (DataFlavor)dataFlavor.clone(); + } + + public void lostOwnership (Clipboard clipboard, Transferable contents) { } +} + --- /dev/null 2014-07-01 12:18:16.415424475 +0400 +++ new/test/java/awt/Clipboard/GetContentsInterruptedTest.java 2014-07-01 15:24:58.518980523 +0400 @@ -0,0 +1,161 @@ +/* + * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.*; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.ClipboardOwner; +import java.awt.datatransfer.StringSelection; +import java.awt.datatransfer.Transferable; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; + +/* + * @test + * @summary Check that lostOwnership event occurs while cross-JVM interaction + * @author Kanishk Jethi + * @run main GetContentsInterruptedTest + */ + +public class GetContentsInterruptedTest implements ClipboardOwner { + + final Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); + final Transferable transferable = new StringSelection("TEXT"); + private final Object o = new Object(); + + public static void main(String args[]) throws Exception { + if (System.getProperty("os.name").startsWith("Mac")) { + System.out.println("This tests should not be run on OS X. " + + "See CR 7124344 for more info"); + } else { + boolean subTestFlag = false; + for (String arg : args) { + if (arg.indexOf("SubTest") != -1) + subTestFlag = true; + } + + if (!subTestFlag) { + new GetContentsInterruptedTest().performTest(); + } else { + new GetContentsInterruptedTest().execute(); + } + } + } + + private void performTest() throws Exception { + int retCode; + String javaPath = System.getProperty("java.home", ""); + String javaClasspath = System.getProperty("java.class.path", "."); + String command = javaPath + File.separator + "bin" + + File.separator + "java -classpath " + javaClasspath + + " GetContentsInterruptedTest SubTest"; + System.out.println(command); + boolean processExit = false; + + clipboard.setContents(transferable, this); + Process process = Runtime.getRuntime().exec(command); + synchronized (o) { + o.wait(10000); + } + + try { + retCode = process.exitValue(); + processExit = true; + }catch (IllegalThreadStateException e){ + throw new RuntimeException(e); + } + System.out.println("[RESULT] : " + + "The sub process has cleanly exited : PASS"); + + System.out.println("[RESULT] : Child returned: " + retCode ); + + InputStream errorStream = process.getErrorStream(); + System.out.println("========= Child process stderr ========"); + dumpStream(errorStream); + System.out.println("======================================="); + + InputStream processInputStream = process.getInputStream(); + System.out.println("========= Child process output ========"); + dumpStream(processInputStream); + System.out.println("======================================="); + + if (!processExit) { + process.destroy(); + throw new RuntimeException("[RESULT] : " + + "The sub process has not exited : FAIL"); + } + } + + /* + * execute is run through another instance of this class. + * it acquires the systemClipboard through another JVM. + */ + public void execute() { + System.out.println("Hello world"); + final ClipboardOwner clipboardOwner = new ClipboardOwner() { + public void lostOwnership(Clipboard clipboard, Transferable contents) { + System.exit(0); + } + }; + clipboard.setContents(transferable, clipboardOwner); + synchronized (o) { + try { + o.wait(); + } catch (InterruptedException ie) { + ie.printStackTrace(); + } + } + } + + public void dumpStream(InputStream in) throws IOException { + String tempString; + int count = in.available(); + while (count > 0) { + byte[] b = new byte[count]; + in.read(b); + tempString = new String(b); + if (tempString.indexOf("Exception") != -1 ) + throw new RuntimeException("[RESULT] :" + + " Exception in child process : FAIL"); + System.out.println(tempString); + count = in.available(); + } + } + + public void lostOwnership(Clipboard clip, Transferable contents) { + new Thread(() -> { + try { + Thread.sleep(3000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + clipboard.getContents(null); + Thread.currentThread().interrupt(); + clipboard.getContents(null); + clipboard.setContents(transferable, null); + }).start(); + } +} + --- /dev/null 2014-07-01 12:18:16.415424475 +0400 +++ new/test/java/awt/datatransfer/ImageTransfer/ImageTransferTest.java 2014-07-01 15:24:58.970980505 +0400 @@ -0,0 +1,189 @@ +/* + * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.*; +import java.awt.datatransfer.*; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.util.Vector; + +/* + * @test + * @summary To check Whether java.awt.Image can be transferred through the + * system clipboard + * @author Jitender(jitender.singh@eng.sun.com) area=AWT + * @author dmitriy.ermashov@oracle.com + * @library ../../../../lib/testlibrary + * @build ExtendedRobot + * @run main ImageTransferTest + */ + +public class ImageTransferTest { + + TestFrame frame1, frame2; + Image image1, image2; + DataFlavor imageFlavor; + + public static void main(String[] args) throws Exception { + new ImageTransferTest().doTest(); + } + + class TestFrame extends Frame { + boolean show; + Image img; + public TestFrame(boolean show, Image img){ + this.show = show; + this.img = img; + } + + public void paint( Graphics g ){ + if (show) + g.drawImage( this.img, 30, 30, this ); + } + } + + class TransferableObject implements Transferable, ClipboardOwner { + + Object data; + DataFlavor[] dfs; + + public TransferableObject(Object data) throws Exception { + Vector v = new Vector(); + imageFlavor = new DataFlavor("image/x-java-Image;class=java.awt.Image"); + imageFlavor.setHumanPresentableName("Java Image Flavor Object"); + + if( data instanceof java.awt.Image ) + v.addElement(imageFlavor); + + dfs = new DataFlavor[v.size()]; + v.copyInto(dfs); + + for (int j = 0; j < dfs.length; j++) + System.out.println(" in constructor flavor : " + dfs[j]); + + this.data = data; + } + + public Object getTransferData(DataFlavor flavor) + throws UnsupportedFlavorException,IOException { + + System.out.println(" **************"); + System.out.println(" The flavor passed to retrive the data :-" + flavor); + System.out.println(" The flavors supported"); + for (int j = 0; j < dfs.length; j++) + System.out.println(" jitu flavor : " + dfs[j]); + + System.out.println(" **************"); + + if(!isDataFlavorSupported(flavor)) + throw new UnsupportedFlavorException(flavor); + + if(imageFlavor.equals(flavor)){ + if( data instanceof java.awt.Image ) + return data; + } + return null; + + } + + public DataFlavor[] getTransferDataFlavors() { return dfs; } + + public boolean isDataFlavorSupported(DataFlavor flavor) { + for (int i = 0 ; i < dfs.length; i++) + if (dfs[i].match(flavor)) return true; + return false; + } + + public void lostOwnership(Clipboard clip,Transferable contents) { + System.out.println(" LostOwnership is invoked"); + } + } + + ImageTransferTest() throws Exception { + BufferedImage img = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB); + Graphics g = img.createGraphics(); + g.setColor(Color.WHITE); + g.fillRect(0, 0, 100, 100); + g.setColor(Color.RED); + g.fillRect(20, 20, 60, 60); + g.dispose(); + + image1 = img; + frame1 = new TestFrame(true, image1); + frame2 = new TestFrame(false, null); + + System.out.println("Inside contrucor..."); + + imageFlavor = new DataFlavor("image/x-java-Image;class=java.awt.Image"); + imageFlavor.setHumanPresentableName("Java Image Flavor Object"); + + frame1.setBounds(10,350,200,200); + frame2.setBounds(250,350,200,200); + frame1.setVisible(true); + frame2.setVisible(true); + frame1.repaint(); + } + + public void compareImages() { + if (image2 == image1) + System.out.println("Pasted Image is same as that one copied !"); + else + if (image2 != image1) + throw new RuntimeException("Image retreived from the Clipboard is not the same " + + "image that was set to the Clipboard"); + } + + + public void doTest() throws Exception { + ExtendedRobot robot = new ExtendedRobot(); + robot.waitForIdle(2000); + TransferableObject imagedata = new TransferableObject(image1); + + Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard(); + System.out.println("copying image..."); + if (imagedata != null) { + clip.setContents(imagedata, imagedata); + } else { + System.out.println("Transferable object is null"); + } + + Transferable content = clip.getContents(this); + if (content != null && (content.isDataFlavorSupported(imageFlavor))) { + System.out.println("jitu after paste" + content); + image2 = (Image) content.getTransferData(imageFlavor); + } else { + System.out.println("Contents of the clipboard is null"); + } + + frame2.img = image2; + frame2.show = true; + frame2.repaint(); + + robot.waitForIdle(2000); + + compareImages(); + } +} + --- /dev/null 2014-07-01 12:18:16.415424475 +0400 +++ new/test/java/awt/datatransfer/Independence/IndependenceAWTTest.java 2014-07-01 15:24:59.430980487 +0400 @@ -0,0 +1,188 @@ +/* + * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.*; +import java.awt.datatransfer.*; +import java.awt.event.*; +import java.util.Properties; + +/* + * @test + * @summary To make sure that System & Primary clipboards should behave independently + * @author Jitender(jitender.singh@eng.sun.com) area=AWT + * @author dmitriy.ermashov@oracle.com + * @library ../../../../lib/testlibrary + * @build ExtendedRobot + * @run main IndependenceAWTTest + */ + +public class IndependenceAWTTest { + + Frame frame; + Panel panel; + TextField tf1, tf2, tf3; + Clipboard sClip, pClip; + + public static void main (String[] args) throws Exception { + new IndependenceAWTTest().doTest(); + } + + public IndependenceAWTTest() { + + frame = new Frame(); + frame.setSize(200, 200); + + // This textfield will be used to update the contents of clipboards + tf1 = new TextField(); + tf1.addFocusListener(new FocusAdapter() { + public void focusGained(FocusEvent fe) { + tf1.setText("Clipboards_Independance_Testing"); + } + }); + + // TextFields to get the contents of clipboard + tf2 = new TextField(); + tf3 = new TextField(); + + panel = new Panel(); + panel.setLayout(new BorderLayout()); + + panel.add(tf2, BorderLayout.NORTH); + panel.add(tf3, BorderLayout.SOUTH); + + frame.add(tf1, BorderLayout.NORTH); + frame.add(panel, BorderLayout.CENTER); + + frame.setVisible(true); + tf1.requestFocus(); + } + + public void checkSecurity() { + SecurityManager sm = System.getSecurityManager(); + if (sm == null) { + System.out.println("security manager is not there"); + getPrimaryClipboard(); + } else { + sm.checkPermission(new AWTPermission("accessClipboard")); + getPrimaryClipboard(); + } + } + + // Get System Selection i.e. Primary Clipboard + private void getPrimaryClipboard() { + Properties ps = System.getProperties(); + String operSys = ps.getProperty("os.name"); + try { + pClip = Toolkit.getDefaultToolkit().getSystemSelection(); + if (pClip == null) + if ((operSys.substring(0,3)).equalsIgnoreCase("Win") || operSys.toLowerCase().contains("os x")) + System.out.println(operSys + "Operating system does not support system selection "); + else + throw new RuntimeException("Method getSystemSelection() is returning null on X11 platform"); + } catch(HeadlessException e) { + System.out.println("Headless exception thrown " + e); + } + } + + // Method to get the contents of both of the clipboards + public void getClipboardsContent() throws Exception { + sClip = Toolkit.getDefaultToolkit().getSystemClipboard(); + Transferable tp; + Transferable ts; + + StringSelection content = new StringSelection(tf1.getText()); + sClip.setContents(content,content); + + tp = pClip.getContents(this); + ts = sClip.getContents(this); + + // Paste the contents of System clipboard on textfield tf2 while the paste the contents of + // of primary clipboard on textfiled tf3 + if ((ts != null) && (ts.isDataFlavorSupported(DataFlavor.stringFlavor))) { + tf2.setBackground(Color.white); + tf2.setForeground(Color.black); + tf2.setText((String) ts.getTransferData(DataFlavor.stringFlavor)); + } + + if ((tp != null) && (tp.isDataFlavorSupported(DataFlavor.stringFlavor))) { + tf3.setBackground(Color.white); + tf3.setForeground(Color.black); + tf3.setText((String) tp.getTransferData(DataFlavor.stringFlavor)); + } + } + + // Method to compare the Contents return by system & primary clipboard + public void compareText (boolean mustEqual) { + if ((tf2.getText()).equals(tf3.getText())) { + if (mustEqual) + System.out.println("Selected text & clipboard contents are same\n"); + else + throw new RuntimeException("Selected text & clipboard contents are same\n"); + } else { + if (mustEqual) + throw new RuntimeException("Selected text & clipboard contents differs\n"); + else + System.out.println("Selected text & clipboard contents differs\n"); + } + } + + public void doTest() throws Exception { + checkSecurity(); + ExtendedRobot robot = new ExtendedRobot(); + robot.waitForIdle(1000); + frame.setLocation(100, 100); + robot.waitForIdle(1000); + + if (pClip != null) { + Point ttf1Center = tf1.getLocationOnScreen(); + ttf1Center.translate(tf1.getWidth()/2, tf1.getHeight()/2); + + robot.glide(new Point(0, 0), ttf1Center); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(20); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(20); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(20); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(2000); + + getClipboardsContent(); + compareText(true); + + //Change the text selection to update the contents of primary clipboard + robot.mouseMove(ttf1Center); + robot.mousePress(MouseEvent.BUTTON1_MASK); + robot.delay(200); + robot.mouseMove(ttf1Center.x + 15, ttf1Center.y); + robot.mouseRelease(MouseEvent.BUTTON1_MASK); + robot.waitForIdle(2000); + + getClipboardsContent(); + compareText(false); + } + } +} + --- /dev/null 2014-07-01 12:18:16.415424475 +0400 +++ new/test/java/awt/datatransfer/Independence/IndependenceSwingTest.java 2014-07-01 15:24:59.898980468 +0400 @@ -0,0 +1,195 @@ +/* + * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.StringSelection; +import java.awt.datatransfer.Transferable; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; +import java.awt.event.InputEvent; +import java.awt.event.MouseEvent; +import java.util.Properties; + +/* + * @test + * @summary To make sure that System & Primary clipboards should behave independently + * @author Jitender(jitender.singh@eng.sun.com) area=AWT + * @author dmitriy.ermashov@oracle.com + * @library ../../../../lib/testlibrary + * @build ExtendedRobot + * @run main IndependenceSwingTest + */ + +public class IndependenceSwingTest { + + JFrame frame; + JPanel panel; + JTextField tf1, tf2, tf3; + Clipboard sClip, pClip; + + public static void main (String[] args) throws Exception { + new IndependenceSwingTest().doTest(); + } + + public IndependenceSwingTest() { + + frame = new JFrame(); + frame.setSize(200, 200); + + // This textfield will be used to update the contents of clipboards + tf1 = new JTextField(); + tf1.addFocusListener(new FocusAdapter() { + public void focusGained(FocusEvent fe) { + tf1.setText("Clipboards_Independance_Testing"); + } + }); + + // TextFields to get the contents of clipboard + tf2 = new JTextField(); + tf3 = new JTextField(); + + panel = new JPanel(); + panel.setLayout(new BorderLayout()); + + panel.add(tf2, BorderLayout.NORTH); + panel.add(tf3, BorderLayout.SOUTH); + + frame.add(tf1, BorderLayout.NORTH); + frame.add(panel, BorderLayout.CENTER); + + frame.setVisible(true); + tf1.requestFocus(); + } + + public void checkSecurity() { + SecurityManager sm = System.getSecurityManager(); + if (sm == null) { + System.out.println("security manager is not there"); + getPrimaryClipboard(); + } else { + sm.checkPermission(new AWTPermission("accessClipboard")); + getPrimaryClipboard(); + } + } + + // Get System Selection i.e. Primary Clipboard + private void getPrimaryClipboard() { + Properties ps = System.getProperties(); + String operSys = ps.getProperty("os.name"); + try { + pClip = Toolkit.getDefaultToolkit().getSystemSelection(); + if (pClip == null) + if ((operSys.substring(0,3)).equalsIgnoreCase("Win") || operSys.toLowerCase().contains("os x")) + System.out.println(operSys + "Operating system does not support system selection "); + else + throw new RuntimeException("Method getSystemSelection() is returning null on X11 platform"); + } catch(HeadlessException e) { + System.out.println("Headless exception thrown " + e); + } + } + + // Method to get the contents of both of the clipboards + public void getClipboardsContent() throws Exception { + sClip = Toolkit.getDefaultToolkit().getSystemClipboard(); + Transferable tp; + Transferable ts; + + StringSelection content = new StringSelection(tf1.getText()); + sClip.setContents(content,content); + + tp = pClip.getContents(this); + ts = sClip.getContents(this); + + // Paste the contents of System clipboard on textfield tf2 while the paste the contents of + // of primary clipboard on textfiled tf3 + if ((ts != null) && (ts.isDataFlavorSupported(DataFlavor.stringFlavor))) { + tf2.setBackground(Color.white); + tf2.setForeground(Color.black); + tf2.setText((String) ts.getTransferData(DataFlavor.stringFlavor)); + } + + if ((tp != null) && (tp.isDataFlavorSupported(DataFlavor.stringFlavor))) { + tf3.setBackground(Color.white); + tf3.setForeground(Color.black); + tf3.setText((String) tp.getTransferData(DataFlavor.stringFlavor)); + } + } + + // Method to compare the Contents return by system & primary clipboard + public void compareText (boolean mustEqual) { + if ((tf2.getText()).equals(tf3.getText())) { + if (mustEqual) + System.out.println("Selected text & clipboard contents are same\n"); + else + throw new RuntimeException("Selected text & clipboard contents are same\n"); + } else { + if (mustEqual) + throw new RuntimeException("Selected text & clipboard contents differs\n"); + else + System.out.println("Selected text & clipboard contents differs\n"); + } + } + + public void doTest() throws Exception { + checkSecurity(); + ExtendedRobot robot = new ExtendedRobot(); + robot.waitForIdle(1000); + frame.setLocation(100, 100); + robot.waitForIdle(1000); + + if (pClip != null) { + Point ttf1Center = tf1.getLocationOnScreen(); + ttf1Center.translate(tf1.getWidth()/2, tf1.getHeight()/2); + + robot.glide(new Point(0, 0), ttf1Center); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(20); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(20); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(20); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(2000); + + getClipboardsContent(); + compareText(true); + + //Change the text selection to update the contents of primary clipboard + robot.mouseMove(ttf1Center); + robot.mousePress(MouseEvent.BUTTON1_MASK); + robot.delay(200); + robot.mouseMove(ttf1Center.x + 15, ttf1Center.y); + robot.mouseRelease(MouseEvent.BUTTON1_MASK); + robot.waitForIdle(2000); + + getClipboardsContent(); + compareText(false); + } + } +} + --- /dev/null 2014-07-01 12:18:16.415424475 +0400 +++ new/test/java/awt/datatransfer/SystemFlavorMap/AddFlavorForNativeTest.java 2014-07-01 15:25:00.374980450 +0400 @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.SystemFlavorMap; +import java.util.Arrays; +import java.util.Hashtable; +import java.util.Vector; + +/* + * @test + * @summary To test SystemFlavorMap method + * addFlavorForUnencodedNative(String nat, DataFlavor flav) + * with valid natives and DataFlavors. Specifically test for + * adding new mappings, one-way and two-way, and to update + * existing mappings. + * @author Rick Reynaga (rick.reynaga@eng.sun.com) area=Clipboard + * @run main AddFlavorForNativeTest + */ + +public class AddFlavorForNativeTest { + + SystemFlavorMap flavorMap; + Vector comp1, comp2, comp3; + Hashtable hash; + int hashSize; + + String test_native; + String[] test_natives_set; + DataFlavor test_flavor1, test_flavor2, test_flavor3, test_flavor4; + DataFlavor[] test_flavors_set1, test_flavors_set2; + + public static void main(String[] args) throws Exception { + new AddFlavorForNativeTest().doTest(); + } + + public void doTest() throws Exception { + // Initialize DataFlavors and arrays used for test data + initMappings(); + + flavorMap = (SystemFlavorMap)SystemFlavorMap.getDefaultFlavorMap(); + + // Get all the native strings and preferred DataFlavor mappings + hash = new Hashtable(flavorMap.getFlavorsForNatives(null)); + hashSize = hash.size(); + + // Setup One-way Mappings + System.out.println("One-way Mappings Test"); + flavorMap.addFlavorForUnencodedNative(test_native, test_flavor1); + flavorMap.addFlavorForUnencodedNative(test_native, test_flavor2); + + // Confirm mapping with getFlavorsForNative + comp1 = new Vector(Arrays.asList(test_flavors_set1)); + comp2 = new Vector(flavorMap.getFlavorsForNative(test_native)); + + if ( !comp1.equals(comp2)) { + throw new RuntimeException("\n*** After setting up one-way mapping" + + "\nwith addFlavorForUnencodedNative(String nat, DataFlavor flav)" + + "\nthe mappings returned from getFlavorsForNative() do not match" + + "\noriginal mappings."); + } + else + System.out.println("One-way: Test Passes"); + + // Setup Two-way Mapping + System.out.println("Two-way Mappings Test"); + flavorMap.addUnencodedNativeForFlavor(test_flavor1, test_native); + flavorMap.addUnencodedNativeForFlavor(test_flavor2, test_native); + + // Confirm mapping with getNativesForFlavor + comp1 = new Vector(Arrays.asList(test_natives_set)); + comp2 = new Vector(flavorMap.getNativesForFlavor(test_flavor1)); + comp3 = new Vector(flavorMap.getNativesForFlavor(test_flavor2)); + + if ( !(comp1.equals(comp2)) || !(comp1.equals(comp3))) { + throw new RuntimeException("\n*** After setting up two-way mapping" + + "\nwith addUnencodedNativeForFlavor(DataFlavor flav, String nat)" + + "\nthe mappings returned from getNativesForFlavor() do not match" + + "\noriginal mappings."); + } + else + System.out.println("Two-way (String native): Test Passes"); + + // Check first native mapping + comp1 = new Vector(Arrays.asList(test_flavors_set1)); + comp2 = new Vector(flavorMap.getFlavorsForNative(test_native)); + + if ( !comp1.equals(comp2)) { + throw new RuntimeException("\n*** After setting up two-way mapping" + + "\nwith addFlavorForUnencodedNative(String nat, DataFlavor flav)" + + "\nthe mappings returned from getFlavorsForNative() do not match" + + "\noriginal mappings."); + } + else + System.out.println("Two-way (DataFlavor): Test Passes"); + + // Modify an existing mapping test + System.out.println("Modify Existing Mappings Test"); + flavorMap.addFlavorForUnencodedNative(test_native, test_flavor3); + flavorMap.addFlavorForUnencodedNative(test_native, test_flavor4); + + // Confirm mapping with getFlavorsForNative + comp1 = new Vector(Arrays.asList(test_flavors_set2)); + comp2 = new Vector(flavorMap.getFlavorsForNative(test_native)); + + if ( !comp1.equals(comp2)) { + throw new RuntimeException("\n*** After modifying an existing mapping" + + "\nwith addFlavorForUnencodedNative(String nat, DataFlavor flav)" + + "\nthe mappings returned from getFlavorsForNative() do not match" + + "\nupdated mappings."); + } else + System.out.println("Modify Existing Mappings: Test Passes"); + } + + public void initMappings() throws Exception { + //create String natives + test_native = "TEST1"; + + test_flavor1 = new DataFlavor(Class.forName("java.awt.Label"), "test1"); + test_flavor2 = new DataFlavor(Class.forName("java.awt.Button"), "test2"); + test_flavor3 = new DataFlavor(Class.forName("java.awt.Checkbox"), "test3"); + test_flavor4 = new DataFlavor(Class.forName("java.awt.List"), "test4"); + + //create and initialize DataFlavor arrays + test_flavors_set1 = new DataFlavor[] {test_flavor1, test_flavor2}; + test_flavors_set2 = new DataFlavor[] {test_flavor1, test_flavor2, test_flavor3, test_flavor4}; + + //create and initialize String native arrays + test_natives_set = new String[] {test_native}; + } +} + --- /dev/null 2014-07-01 12:18:16.415424475 +0400 +++ new/test/java/awt/datatransfer/SystemFlavorMap/AddFlavorTest.java 2014-07-01 15:25:00.842980431 +0400 @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import sun.awt.datatransfer.DataTransferer; + +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.SystemFlavorMap; +import java.lang.reflect.Method; +import java.util.*; + +/* + * @test + * @summary To test SystemFlavorMap method: + * addFlavorForUnencodedNative(String nat, DataFlavor flav) + * with valid natives and DataFlavors. This stress test will + * define numerous mappings of valid String natives and + * DataFlavors. The mappings will be verified by examining + * that all entries are present, and order is maintained. + * @author Rick Reynaga (rick.reynaga@eng.sun.com) area=Clipboard + * @author dmitriy.ermashov@oracle.com + * @run main AddFlavorTest + */ + +public class AddFlavorTest { + + SystemFlavorMap flavorMap; + Hashtable> hashVerify; + + public static void main (String[] args) throws Exception { + new AddFlavorTest().doTest(); + } + + void doTest() throws Exception { + flavorMap = (SystemFlavorMap)SystemFlavorMap.getDefaultFlavorMap(); + + // Test addFlavorForUnencodedNative(String nat, DataFlavor flav); + // + // Enumerate through all the system defined String natives, + // and for each String native, define it again to the SystemFlavorMap + // with a slightly modified String native (name). + // + // As a list of DataFlavors will be returned for each String native, + // the method addFlavorForUnencodedNative will be called for each + // DataFlavor in the list. + hashVerify = new Hashtable(); + + for (String key : flavorMap.getFlavorsForNatives(null).keySet()) { + Set flavorsSet = new HashSet<>(flavorMap.getFlavorsForNative(key)); + // construct a unique String native + key = key.concat("TEST"); + + for (DataFlavor element : flavorsSet) + flavorMap.addFlavorForUnencodedNative(key, element); + + // This part is valid only for X-based graphical systems + if (!System.getProperty("os.name").startsWith("Win") && !System.getProperty("os.name").startsWith("Mac") ) { + if (key.contains("/")) { + Method nativeToFlavorLookup = flavorMap.getClass().getDeclaredMethod("nativeToFlavorLookup", String.class); + nativeToFlavorLookup.setAccessible(true); + Set fls = (LinkedHashSet) nativeToFlavorLookup.invoke(flavorMap, key); + flavorsSet.addAll(fls); + if (!fls.isEmpty() && key.startsWith("text/")) { + Method convertMimeTypeToDataFlavors = flavorMap.getClass().getDeclaredMethod("convertMimeTypeToDataFlavors", String.class); + convertMimeTypeToDataFlavors.setAccessible(true); + flavorsSet.addAll((Set) convertMimeTypeToDataFlavors.invoke(flavorMap, key)); + } + } + } + hashVerify.put(key, new Vector(flavorsSet)); + } + + // Assertions: After establishing "new" mappings, verify that the defined + // DataFlavors can be retrieved and that the List is preserved. + verifyNewMappings(); + } + + // Verify getFlavorsForNative(String nat) is returning the correct list + // of DataFlavors (for the new mappings). + void verifyNewMappings() { + // Enumerate through all natives + System.out.println("*** native size = " + hashVerify.size()); + for (Enumeration e = hashVerify.keys() ; e.hasMoreElements() ;) { + String key = (String)e.nextElement(); + compareFlavors(hashVerify.get(key), flavorMap.getFlavorsForNative(key), key); + compareFlavors(flavorMap.getFlavorsForNative(key), hashVerify.get(key), key); + } + } + + void compareFlavors(List flavors1, List flavors2, String key){ + DataTransferer.DataFlavorComparator comparator = new DataTransferer.DataFlavorComparator(); + for (DataFlavor flavor1 : flavors1) { + boolean result = false; + for (DataFlavor flavor2 : flavors2) { + if (comparator.compare(flavor1, flavor2) == 0) + result = true; + } + if (!result) + throw new RuntimeException("\n*** Error in verifyNewMappings()" + + "\nmethod1: addFlavorForUnencodedNative(String nat, DataFlavor flav)" + + "\nmethod2: List getFlavorsForNative(String nat)" + + "\nString native: " + key + + "\nAfter adding several mappings with addFlavorForUnencodedNative," + + "\nthe returned list did not match the mappings that were added." + + "\nEither the mapping was not included in the list, or the order was incorect."); + } + + } +} + --- /dev/null 2014-07-01 12:18:16.415424475 +0400 +++ new/test/java/awt/datatransfer/SystemFlavorMap/AddNativeForFlavorTest.java 2014-07-01 15:25:01.326980412 +0400 @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.SystemFlavorMap; +import java.util.Arrays; +import java.util.Hashtable; +import java.util.Vector; + +/* + * @test + * @summary To test SystemFlavorMap method + * addUnencodedNativeForFlavor(DataFlavor flav, String nat) + * with valid natives and DataFlavors. Specifically test for + * adding new mappings, one-way and two-way, and to update + * existing mappings. + * @author Rick Reynaga (rick.reynaga@eng.sun.com) area=Clipboard + * @run main AddNativeForFlavorTest + */ + +public class AddNativeForFlavorTest { + + SystemFlavorMap flavorMap; + Vector comp1, comp2, comp3; + Hashtable hash; + int hashSize; + + String test_native1, test_native2, test_native3, test_native4; + String[] test_natives_set1, test_natives_set2; + DataFlavor test_flav; + DataFlavor[] test_flavors_set; + + public static void main(String[] args) throws Exception { + new AddNativeForFlavorTest().doTest(); + } + + public void doTest() throws Exception { + // Initialize DataFlavors and arrays used for test data + initMappings(); + + flavorMap = (SystemFlavorMap)SystemFlavorMap.getDefaultFlavorMap(); + + // Get all the native strings and preferred DataFlavor mappings + hash = new Hashtable(flavorMap.getFlavorsForNatives(null)); + hashSize = hash.size(); + + // Setup One-way Mappings + System.out.println("One-way Mappings Test"); + flavorMap.addUnencodedNativeForFlavor(test_flav, test_native1); + flavorMap.addUnencodedNativeForFlavor(test_flav, test_native2); + + // Confirm mapping with getNativesForFlavor + comp1 = new Vector(Arrays.asList(test_natives_set1)); + comp2 = new Vector(flavorMap.getNativesForFlavor(test_flav)); + + if ( !comp1.equals(comp2)) { + throw new RuntimeException("\n*** After setting up one-way mapping" + + "\nwith addUnencodedNativeForFlavor(DataFlavor flav, String nat)" + + "\nthe mappings returned from getNativesForFlavor() do not match" + + "\noriginal mappings."); + } + else + System.out.println("One-way: Test Passes"); + + // Setup Two-way Mapping + System.out.println("Two-way Mappings Test"); + flavorMap.addFlavorForUnencodedNative(test_native1, test_flav); + flavorMap.addFlavorForUnencodedNative(test_native2, test_flav); + + // Confirm mapping with getFlavorsForNative + comp1 = new Vector(Arrays.asList(test_flavors_set)); + comp2 = new Vector(flavorMap.getFlavorsForNative(test_native1)); + comp3 = new Vector(flavorMap.getFlavorsForNative(test_native2)); + + if ( !(comp1.equals(comp2)) || !(comp1.equals(comp3))) { + throw new RuntimeException("\n*** After setting up two-way mapping" + + "\nwith addFlavorForUnencodedNative(String nat, DataFlavor flav)" + + "\nthe mappings returned from getFlavorsForNative() do not match" + + "\noriginal mappings."); + } + else + System.out.println("Two-way (DataFlavor): Test Passes"); + + // Check first native mapping + comp1 = new Vector(Arrays.asList(test_natives_set1)); + comp2 = new Vector(flavorMap.getNativesForFlavor(test_flav)); + + if ( !comp1.equals(comp2)) { + throw new RuntimeException("\n*** After setting up two-way mapping" + + "\nwith addUnencodedNativeForFlavor(DataFlavor flav, String nat)" + + "\nthe mappings returned from getNativesForFlavor() do not match" + + "\noriginal mappings."); + } + else + System.out.println("Two-way (String native): Test Passes"); + + // Modify an existing mapping test + System.out.println("Modify Existing Mappings Test"); + flavorMap.addUnencodedNativeForFlavor(test_flav, test_native3); + flavorMap.addUnencodedNativeForFlavor(test_flav, test_native4); + + // Confirm mapping with getNativesForFlavor + comp1 = new Vector(Arrays.asList(test_natives_set2)); + comp2 = new Vector(flavorMap.getNativesForFlavor(test_flav)); + + if ( !comp1.equals(comp2)) { + throw new RuntimeException("\n*** After modifying an existing mapping" + + "\nwith addUnencodedNativeForFlavor(DataFlavor flav, String nat)" + + "\nthe mappings returned from getNativesForFlavor() do not match" + + "\nupdated mappings."); + } + else + System.out.println("Modify Existing Mappings: Test Passes"); + + } + + public void initMappings() throws Exception { + //create String natives + test_native1 = "TEST1"; + test_native2 = "TEST2"; + test_native3 = "TEST3"; + test_native4 = "TEST4"; + + test_flav = new DataFlavor(Class.forName("java.awt.Label"), "test1"); + + //create and initialize DataFlavor arrays + test_flavors_set = new DataFlavor[] {test_flav}; + + //create and initialize String native arrays + test_natives_set1 = new String[] {test_native1, test_native2}; + test_natives_set2 = new String[] {test_native1, test_native2, test_native3, test_native4}; + } +} + --- /dev/null 2014-07-01 12:18:16.415424475 +0400 +++ new/test/java/awt/datatransfer/SystemFlavorMap/AddNativeTest.java 2014-07-01 15:25:01.794980393 +0400 @@ -0,0 +1,144 @@ +/* + * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.SystemFlavorMap; +import java.util.*; + +/* + * @test + * @summary To test SystemFlavorMap method: + * addUnencodedNativeForFlavor(DataFlavor flav, String nat) + * with valid natives and DataFlavors. This stress test will + * define numerous mappings of valid String natives and + * DataFlavors. The mappings will be verified by examining + * that all entries are present. + * @author Rick Reynaga (rick.reynaga@eng.sun.com) area=Clipboard + * @run main AddNativeTest + */ + +public class AddNativeTest { + + SystemFlavorMap flavorMap; + Hashtable hashVerify; + + Map mapFlavors; + Map mapNatives; + + Hashtable hashFlavors; + Hashtable hashNatives; + + public static void main(String[] args) { + new AddNativeTest().doTest(); + } + + public void doTest() { + flavorMap = (SystemFlavorMap)SystemFlavorMap.getDefaultFlavorMap(); + + // Get SystemFlavorMap Maps of String Natives and DataFlavors + mapFlavors = flavorMap.getNativesForFlavors(null); + mapNatives = flavorMap.getFlavorsForNatives(null); + + hashFlavors = new Hashtable(mapFlavors); + hashNatives = new Hashtable(mapNatives); + + // Test addUnencodedNativeForFlavor(DataFlavor flav, String nat); + // + // Enumerate through all the system defined DataFlavors, + // and for each DataFlavor, define it again to the SystemFlavorMap + // with a slightly modified Mime Type. + // + // As a list of String natives will be returned for each DataFlavor, + // the method addUnencodedNativeForFlavor will be called for each + // String native in the list. + // + // For verification, a seperate Hashtable (Map) will be maintained with changes. + DataFlavor key; + hashVerify = new Hashtable(); + + for (Enumeration e = hashFlavors.keys() ; e.hasMoreElements() ;) { + key = (DataFlavor)e.nextElement(); + + java.util.List listNatives = flavorMap.getNativesForFlavor(key); + Vector vectorNatives = new Vector(listNatives); + + // Construct a new DataFlavor from an existing DataFlavor's MimeType + // Example: + // Original MimeType: "text/plain; class=java.io.Reader; charset=Unicode" + // Modified MimeType: "text/plain-TEST; class=java.io.Reader; charset=Unicode" + + StringBuffer mimeType = new StringBuffer(key.getMimeType()); + mimeType.insert(mimeType.indexOf(";"),"-TEST"); + + DataFlavor testFlavor = new DataFlavor(mimeType.toString(), "Test DataFlavor"); + + for (ListIterator i = vectorNatives.listIterator() ; i.hasNext() ;) { + String element = (String)i.next(); + flavorMap.addUnencodedNativeForFlavor(testFlavor, element); + } + + //Added following 4 lines - Aruna Samji - 07/22/2003 + Vector existingNatives = new Vector(flavorMap.getNativesForFlavor(testFlavor)); + existingNatives.addAll(vectorNatives); + vectorNatives = existingNatives; + hashVerify.put(testFlavor, vectorNatives); + } + + // Assertions: After establishing "new" mappings, verify that the defined + // DataFlavors can be retrieved. + verifyNewMappings(); + } + + // Verify getFlavorsForNative(String nat) is returning the correct list + // of DataFlavors (for the new mappings). + public boolean verifyNewMappings() { + boolean result = true; + + // Enumerate through all DataFlavors + for (Enumeration e = hashVerify.keys() ; e.hasMoreElements() ;) { + DataFlavor key = (DataFlavor)e.nextElement(); + + java.util.List listNatives = flavorMap.getNativesForFlavor(key); + Vector vectorNatives = new Vector(listNatives); + + // Compare the list of Natives + //Next line changed by Kanishk to comply with bug 4696522 + //if ( !vectorNatives.equals((Vector)hashVerify.get(key))) { + if ( !(vectorNatives.containsAll((Vector)hashVerify.get(key)) && ((Vector)hashVerify.get(key)).containsAll(vectorNatives))) { + throw new RuntimeException("\n*** Error in verifyNewMappings()" + + "\nmethod1: addUnencodedNativeForFlavor(DataFlavor flav, String nat)" + + "\nmethod2: List getNativesForFlavor(DataFlavor flav)" + + "\nDataFlavor: " + key.getMimeType() + + "\nAfter adding several mappings with addUnencodedNativeForFlavor," + + "\nthe returned list did not match the mappings that were added." + + "\nThe mapping was not included in the list."); + } + } + System.out.println("*** DataFlavor size = " + hashVerify.size()); + System.out.println("*** verifyNewMappings result: " + result + "\n"); + return result; + } +} + --- /dev/null 2014-07-01 12:18:16.415424475 +0400 +++ new/test/java/awt/datatransfer/SystemFlavorMap/GetFlavorsForNewNativeTest.java 2014-07-01 15:25:02.262980375 +0400 @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.SystemFlavorMap; +import java.util.Arrays; +import java.util.Hashtable; +import java.util.Vector; + +/* + * @test + * @summary To test SystemFlavorMap method + * getFlavorsForNative(String nat) + * with unknown String natives. Specifically test for + * unknown Unencoded String native in which an empty list is + * returned, and with unknown Encoded String native where + * two-way mapping should be established. + * @author Rick Reynaga (rick.reynaga@eng.sun.com) area=Clipboard + * @run main GetFlavorsForNewNativeTest + */ + +public class GetFlavorsForNewNativeTest { + + SystemFlavorMap flavorMap; + Vector comp1, comp2, comp3, comp4; + Hashtable hash; + int hashSize; + + String test_native1, test_encoded; + DataFlavor test_flavor1, test_flavor2; + String[] test_natives_set; + DataFlavor[] test_flavors_set; + + public static void main (String[] args) throws Exception { + new GetFlavorsForNewNativeTest().doTest(); + } + + public void doTest() throws Exception { + // Initialize DataFlavors and arrays used for test data + initMappings(); + + flavorMap = (SystemFlavorMap) SystemFlavorMap.getDefaultFlavorMap(); + + // Get all the native strings and preferred DataFlavor mappings + hash = new Hashtable(flavorMap.getFlavorsForNatives(null)); + hashSize = hash.size(); + + // GetFlavorsForNative using Unencoded Native + // + // If a new Unencoded native is specified as a parameter, the String + // native should be ignored and no mapping established. + System.out.println("GetFlavorsForNative using Unencoded Native Test"); + + comp1 = new Vector(flavorMap.getFlavorsForNative(test_native1)); + + if (comp1.size() != 0) { + throw new RuntimeException("\n*** After passing a new Unencoded native" + + "\nwith getFlavorsForNative(String nat)" + + "\nthe String native should be ignored and no mapping established."); + } else + System.out.println("GetFlavorsForNative using Unencoded Native Test: Test Passes"); + + + // GetFlavorsForNative using Encoded Native (verify 2-way mapping) + // + // If a new Encoded native is specified, the method should establish a mapping + // in both directions between specified native and DataFlavor whose MIME type + // is a decoded version of the native. + System.out.println("GetFlavorsForNative using Encoded Native Test"); + + comp1 = new Vector(Arrays.asList(test_flavors_set)); + comp2 = new Vector(flavorMap.getFlavorsForNative(test_encoded)); + + comp3 = new Vector(Arrays.asList(test_natives_set)); + comp4 = new Vector(flavorMap.getNativesForFlavor(test_flavor2)); + + if (!comp1.equals(comp2) || !comp3.equals(comp4)) { + throw new RuntimeException("\n*** After passing a new Encoded native" + + "\nwith getFlavorsForNative(String nat)" + + "\nthe mapping in both directions was not established."); + } else + System.out.println("GetFlavorsForNative using Encoded Native: Test Passes"); + } + + public void initMappings() throws Exception { + //initialize mapping variables used in this test + //create an Unencoded String native + test_native1 = "TEST1"; + + //create a DataFlavor from Button class + test_flavor1 = new DataFlavor(Class.forName("java.awt.Button"), "Button"); + + //create an Encoded String native using Button class MIME Type + String buttonMIME = test_flavor1.getMimeType(); + test_encoded = SystemFlavorMap.encodeJavaMIMEType(buttonMIME); + + //create a DataFlavor from the Encoded String native + test_flavor2 = SystemFlavorMap.decodeDataFlavor(test_encoded); + + //create and initialize DataFlavor arrays + test_flavors_set = new DataFlavor[] {test_flavor2}; + + //create and initialize String native arrays + test_natives_set = new String[] {test_encoded}; + } + +} + --- /dev/null 2014-07-01 12:18:16.415424475 +0400 +++ new/test/java/awt/datatransfer/SystemFlavorMap/GetNativesForNewFlavorTest.java 2014-07-01 15:25:02.734980356 +0400 @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.SystemFlavorMap; +import java.util.Arrays; +import java.util.Hashtable; +import java.util.Vector; + +/* + * @test + * @summary To test SystemFlavorMap method + * getNativesForFlavor(DataFlavor flav) + * with unknown DataFlavor. Specifically test for + * passing an unknown DataFlavor where two-way mapping + * should be established. + * @author Rick Reynaga (rick.reynaga@eng.sun.com) area=Clipboard + * @run main GetNativesForNewFlavorTest + */ + +public class GetNativesForNewFlavorTest { + + SystemFlavorMap flavorMap; + Vector comp1, comp2, comp3, comp4; + Hashtable hash; + int hashSize; + + String test_encoded; + DataFlavor test_flavor1, test_flavor2; + String[] test_natives_set; + DataFlavor[] test_flavors_set; + + public static void main (String[] args) throws Exception { + new GetNativesForNewFlavorTest().doTest(); + } + + public void doTest() throws Exception { + // Initialize DataFlavors and arrays used for test data + initMappings(); + + boolean passed = true; + flavorMap = (SystemFlavorMap)SystemFlavorMap.getDefaultFlavorMap(); + + // Get all the native strings and preferred DataFlavor mappings + hash = new Hashtable(flavorMap.getFlavorsForNatives(null)); + hashSize = hash.size(); + + // GetNativesForFlavor using unknown DataFlavor (verify 2-way mapping) + // + // If a new DataFlavor is specified, the method should establish a mapping + // in both directions between specified DataFlavor and an encoded + // version of its MIME type as its native. + System.out.println("GetNativesForFlavor using new DataFlavor"); + + comp1 = new Vector(Arrays.asList(test_natives_set)); + comp2 = new Vector(flavorMap.getNativesForFlavor(test_flavor1)); + + comp3 = new Vector(Arrays.asList(test_flavors_set)); + comp4 = new Vector(flavorMap.getFlavorsForNative(test_encoded)); + + if ( !comp1.equals(comp2) || !comp3.equals(comp4) ) { + throw new RuntimeException("\n*** After passing a new DataFlavor" + + "\nwith getNativesForFlavor(DataFlavor flav)" + + "\nthe mapping in both directions was not established."); + } + else + System.out.println("GetNativesForFlavor using new DataFlavor: Test Passes"); + } + + public void initMappings() throws Exception { + //initialize mapping variables used in this test + //create a DataFlavor from Button class + test_flavor1 = new DataFlavor(Class.forName("java.awt.Button"), "Button"); + + //create an Encoded String native using Button class MIME Type + String buttonMIME = test_flavor1.getMimeType(); + test_encoded = SystemFlavorMap.encodeJavaMIMEType(buttonMIME); + + //create a DataFlavor from the Encoded String native + test_flavor2 = SystemFlavorMap.decodeDataFlavor(test_encoded); + + //create and initialize DataFlavor arrays + test_flavors_set = new DataFlavor[] {test_flavor1}; + + //create and initialize String native arrays + test_natives_set = new String[] {test_encoded}; + } +} + --- /dev/null 2014-07-01 12:18:16.415424475 +0400 +++ new/test/java/awt/datatransfer/SystemFlavorMap/InvalidMapArgumentsTest.java 2014-07-01 15:25:03.322980333 +0400 @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.SystemFlavorMap; + +/* + * @test + * @summary To check for error handling with new Clipboard/SystemFlavorMap + * methods, and insure that the appropriate exceptions are being thrown. + * Specifically check for null variables in the methods: + * - addFlavorForUnencodedNative(String nat, DataFlavor flav) + * - addUnencodedNativeForFlavor(DataFlavor flav, String nat) + * - setNativesForFlavor(DataFlavor flav, String[] natives) + * - setFlavorsForNative(String nat, DataFlavor[] flavors) + * @author Rick Reynaga (rick.reynaga@eng.sun.com) area=Clipboard + * @run main InvalidMapArgumentsTest + */ + +public class InvalidMapArgumentsTest { + + SystemFlavorMap flavorMap; + String test_nat; + String[] test_natives; + DataFlavor test_flav; + DataFlavor[] test_flavors; + + public static void main (String[] args){ + new InvalidMapArgumentsTest().doTest(); + } + + public void doTest (){ + //Get things going. Request focus, set size, et cetera + initMappings(); + + // Test for combinations of null values for + // addFlavorForUnencodedNative(String nat, DataFlavor flav) + addFlavorForUnencodedNativeTest(null, null, "both String nat and DataFlavor flav set to null. "); + addFlavorForUnencodedNativeTest(null, test_flav, "String nat set to null. "); + addFlavorForUnencodedNativeTest(test_nat, null, "DataFlavor flav set to null. "); + + + // Test for combinations of null values for + // addUnencodedNativeForFlavor(DataFlavor flav, String nat) + addUnencodedNativeForFlavorTest(null, null, "both DataFlavor flav and String nat set to null. "); + addUnencodedNativeForFlavorTest(null, test_nat, "DataFlavor flav set to null. "); + addUnencodedNativeForFlavorTest(test_flav, null, "String nat set to null. "); + + + // Test for combinations of null values for + // setNativesForFlavor(DataFlavor flav, String[] natives) + setNativesForFlavorTest(null, null, "both DataFlavor flav and String[] natives set to null. "); + setNativesForFlavorTest(null, test_natives, "DataFlavor flav set to null. "); + setNativesForFlavorTest(test_flav, null, "String[] natives set to null. "); + + + // Test for combinations of null values for + // setFlavorsForNative(String nat, DataFlavor[] flavors) + setFlavorsForNativeTest(null, null, "both String nat and DataFlavor[] flavors set to null. "); + setFlavorsForNativeTest(null, test_flavors, "String nat set to null. "); + setFlavorsForNativeTest(test_nat, null, "DataFlavor[] flavors set to null. "); + } + + public void initMappings() { + //initialize mapping variables used in this test + flavorMap = (SystemFlavorMap)SystemFlavorMap.getDefaultFlavorMap(); + + //create a DataFlavor with valid parameters (mimeType, humanPresentableName) + test_flav = new DataFlavor("text/plain; charset=ascii","ASCII Flavor"); + + //create a String native + test_nat = "TEXT_TEST"; + + //create a DataFlavor array + test_flavors = new DataFlavor[] {test_flav}; + + //create a String native array + test_natives = new String[] {test_nat}; + } + + public void setNativesForFlavorTest(DataFlavor flav, String[] natives, String errmsg) { + try{ + flavorMap.setNativesForFlavor(flav, natives); + throw new RuntimeException("NullPointerException is not thrown for method "+ + "setNativesForFlavor with "+errmsg); + } catch (NullPointerException e) { + } + } + + public void setFlavorsForNativeTest(String nat, DataFlavor[] flavors, String errmsg) { + try{ + flavorMap.setFlavorsForNative(nat, flavors); + throw new RuntimeException("NullPointerException is not thrown for method "+ + "setFlavorsForNative with "+errmsg); + } catch (NullPointerException e) { + } + } + + public void addFlavorForUnencodedNativeTest(String nat, DataFlavor flav, String errmsg) { + try{ + flavorMap.addFlavorForUnencodedNative(nat, flav); + throw new RuntimeException("NullPointerException is not thrown for method "+ + "addFlavorForUnencodedNative with "+errmsg); + } catch (NullPointerException e) { + } + } + + public void addUnencodedNativeForFlavorTest(DataFlavor flav, String nat, String errmsg) { + try{ + flavorMap.addUnencodedNativeForFlavor(flav, nat); + throw new RuntimeException("NullPointerException is not thrown for method "+ + "addUnencodedNativeForFlavor with "+errmsg); + } catch (NullPointerException e) { + } + } +} + --- /dev/null 2014-07-01 12:18:16.415424475 +0400 +++ new/test/java/awt/datatransfer/SystemFlavorMap/ManyFlavorMapTest.java 2014-07-01 15:25:03.806980314 +0400 @@ -0,0 +1,182 @@ +/* + * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.SystemFlavorMap; +import java.util.*; + +/* + * @test + * @summary To test SystemFlavorMap methods + * List getFlavorsForNative(String nat) + * List getNativesForFlavor(DataFlavor flav) + * with valid natives and DataFlavors, including null. + * This test will verify that the returned mappings + * include all entries and that the correct order is + * maintained. + * @author Rick Reynaga (rick.reynaga@eng.sun.com) area=Clipboard + * @run main ManyFlavorMapTest + */ + +public class ManyFlavorMapTest { + + SystemFlavorMap flavorMap; + + Map mapFlavors; + Map mapNatives; + + Hashtable hashFlavors; + Hashtable hashNatives; + + public static void main (String[] args) { + new ManyFlavorMapTest().doTest(); + } + + public void doTest() { + flavorMap = (SystemFlavorMap)SystemFlavorMap.getDefaultFlavorMap(); + + // Get SystemFlavorMap Maps of String Natives and DataFlavors + mapFlavors = flavorMap.getNativesForFlavors(null); + mapNatives = flavorMap.getFlavorsForNatives(null); + + hashFlavors = new Hashtable(mapFlavors); + hashNatives = new Hashtable(mapNatives); + + // Assertion: Verify getNativesForFlavors(null) is returning the full list + // of String Native entries + List listNatives = flavorMap.getNativesForFlavor(null); + verifyListAllNativeEntries(listNatives); + + // Assertion: Verify getFlavorsForNatives(null) is returning the full list + // of DataFlavor entries + List listFlavors = flavorMap.getFlavorsForNative(null); + verifyListAllDataFlavorEntries(listFlavors); + + // Assertion: Verify getNativesForFlavor(DataFlavor flav) is returning the list + // of Native Strings (for all supported DataFlavors) + // + // Verify that the first list item is the most preferred Native + verifyListNativeEntries(); + + // Assertion: Verify getFlavorsForNative(String nat) is returning the list + // of DataFlavors(for all supported natives) + // + // Verify that the first list item is the most preferred DataFlavor + verifyListDataFlavorEntries(); + } + + // Verify getFlavorsForNative(String nat) is returning the list + // of DataFlavors(for all supported natives) + public void verifyListDataFlavorEntries() { + // Enumerate through all natives + for (Enumeration e = hashNatives.keys() ; e.hasMoreElements() ;) { + String key = (String)e.nextElement(); + + // SystemFlavorMap preferred value + DataFlavor value = (DataFlavor)hashNatives.get(key); + + java.util.List listFlavors = flavorMap.getFlavorsForNative(key); + Vector vectorFlavors = new Vector(listFlavors); + + // First element should be preferred value + DataFlavor prefFlavor = (DataFlavor)vectorFlavors.firstElement(); + if ( value != prefFlavor ) { + throw new RuntimeException("\n*** Error in verifyListDataFlavorEntries()" + + "\nAPI Test: List getFlavorsForNative(String nat)" + + "\native: " + key + + "\nSystemFlavorMap preferred native: " + value.getMimeType() + + "\nList first entry: " + prefFlavor.getMimeType() + + "\nTest failed because List first entry does not match preferred"); + } + } + System.out.println("*** native size = " + hashNatives.size()); + } + + // Verify getNativesForFlavor(DataFlavor flav) is returning the list + // of Native Strings (for all supported DataFlavors) + public void verifyListNativeEntries() { + // Enumerate through all DataFlavors + for (Enumeration e = hashFlavors.keys() ; e.hasMoreElements() ;) { + DataFlavor key = (DataFlavor)e.nextElement(); + + // SystemFlavorMap preferred value + String value = (String)hashFlavors.get(key); + + java.util.List listNatives = flavorMap.getNativesForFlavor(key); + Vector vectorNatives = new Vector(listNatives); + + // First element should be preferred value + String prefNative = (String)vectorNatives.firstElement(); + if ( value != prefNative ) { + throw new RuntimeException("\n*** Error in verifyListNativeEntries()" + + "\nAPI Test: List getNativesForFlavor(DataFlavor flav)" + + "\nDataFlavor: " + key.getMimeType() + + "\nSystemFlavorMap preferred native: " + value + + "\nList first entry: " + prefNative + + "\nTest failed because List first entry does not match preferred"); + } + } + System.out.println("*** DataFlavor size = " + hashFlavors.size()); + } + + // Compare List of Natives with list from SystemFlavorMap + // + // Verification will be done by comparing the two results as sets + public void verifyListAllNativeEntries(java.util.List listNatives) { + + HashSet hashSetMap = new HashSet(mapNatives.keySet()); + HashSet hashSetList = new HashSet(listNatives); + + System.out.println("*** hashSetMap size = " + hashSetMap.size()); + System.out.println("*** hashSetList size = " + hashSetList.size()); + + if (!hashSetMap.equals(hashSetList)) { + throw new RuntimeException("\n*** Error in verifyListAllNativeEntries()" + + "\nAPI Test: List getNativesForFlavor(null)" + + "\nTest failed because the returned List does not exactly" + + "\nmatch objects returned from SystemFlavorMap."); + } + } + + // Compare List of DataFlavors with list from SystemFlavorMap + // + // Verification will be done by comparing the two results as sets + public void verifyListAllDataFlavorEntries(java.util.List listFlavors) { + + HashSet hashSetMap = new HashSet(mapFlavors.keySet()); + HashSet hashSetList = new HashSet(listFlavors); + + System.out.println("*** hashSetMap size = " + hashSetMap.size()); + System.out.println("*** hashSetList size = " + hashSetList.size()); + + if (!hashSetMap.equals(hashSetList)) { + throw new RuntimeException("\n*** Error in verifyListAllDataFlavorEntries()" + + "\nAPI Test: List getFlavorsForNative(null)" + + "\nTest failed because the returned List does not exactly" + + "\nmatch objects returned from SystemFlavorMap."); + } + } +} + --- /dev/null 2014-07-01 12:18:16.415424475 +0400 +++ new/test/java/awt/datatransfer/SystemFlavorMap/SetDataFlavorsTest.java 2014-07-01 15:25:04.290980294 +0400 @@ -0,0 +1,131 @@ +/* + * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.SystemFlavorMap; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Map; +import java.util.Vector; + +/* + * @test + * @summary To test SystemFlavorMap method: + * setNativesForFlavor(DataFlavor flav, String[] natives) + * with valid natives and DataFlavors. This stress test will + * define numerous mappings of valid String natives and + * DataFlavors. The mappings will be verified by examining + * that all entries are present, and order is maintained. + * @author Rick Reynaga (rick.reynaga@eng.sun.com) area=Clipboard + * @run main SetDataFlavorsTest + */ + +public class SetDataFlavorsTest { + + SystemFlavorMap flavorMap; + Hashtable hashVerify; + + Map mapFlavors; + Map mapNatives; + + Hashtable hashFlavors; + Hashtable hashNatives; + + public static void main (String[] args) { + new SetDataFlavorsTest().doTest(); + } + + public void doTest() { + flavorMap = (SystemFlavorMap)SystemFlavorMap.getDefaultFlavorMap(); + + // Get SystemFlavorMap Maps of String Natives and DataFlavors + mapFlavors = flavorMap.getNativesForFlavors(null); + mapNatives = flavorMap.getFlavorsForNatives(null); + + hashFlavors = new Hashtable(mapFlavors); + hashNatives = new Hashtable(mapNatives); + + + // Test setNativesForFlavor(DataFlavors flav, String[] natives); + // + // Enumerate through all the system defined DataFlavors, + // and for each DataFlavor, define it again to the SystemFlavorMap + // with a slightly modified MimeType. + // + // For verification, a seperate Hashtable will be maintained of the additions. + DataFlavor key; + hashVerify = new Hashtable(); + + for (Enumeration e = hashFlavors.keys() ; e.hasMoreElements() ;) { + key = (DataFlavor)e.nextElement(); + + java.util.List listNatives = flavorMap.getNativesForFlavor(key); + Vector vectorNatives = new Vector(listNatives); + String[] arrayNatives = (String[])vectorNatives.toArray(new String[0]); + + // Construct a new DataFlavor from an existing DataFlavor's MimeType + // Example: + // Original MimeType: "text/plain; class=java.io.Reader; charset=Unicode" + // Modified MimeType: "text/plain-TEST; class=java.io.Reader; charset=Unicode" + + StringBuffer mimeType = new StringBuffer(key.getMimeType()); + mimeType.insert(mimeType.indexOf(";"),"-TEST"); + + DataFlavor testFlav = new DataFlavor(mimeType.toString(), "Test DataFlavor"); + + // define the new String native entry + flavorMap.setNativesForFlavor(testFlav, arrayNatives); + // keep track of this new native entry + hashVerify.put(testFlav, vectorNatives); + } + + // After establishing "new" mappings, verify that the defined + // Natives can be retrieved and that the List (order) is preserved. + verifyNewMappings(); + } + + // Verify getNativesForFlavor(DataFlavor flav) is returning the correct list + // of Natives (for the new mappings). + public void verifyNewMappings() { + // Enumerate through all DataFlavors + for (Enumeration e = hashVerify.keys() ; e.hasMoreElements() ;) { + DataFlavor key = (DataFlavor)e.nextElement(); + + java.util.List listNatives = flavorMap.getNativesForFlavor(key); + Vector vectorFlavors = new Vector(listNatives); + + // Compare the list of Natives + if ( !vectorFlavors.equals(hashVerify.get(key))) { + throw new RuntimeException("\n*** Error in verifyNewMappings()" + + "\nmethod1: setNativesForFlavor(DataFlavor flav, String[] natives)" + + "\nmethod2: List getNativesForFlavor(DataFlavor flav)" + + "\nDataFlavor: " + key.getMimeType() + + "\nThe Returned List did not match the original set of Natives."); + } + } + System.out.println("*** DataFlavor size = " + hashVerify.size()); + } +} + --- /dev/null 2014-07-01 12:18:16.415424475 +0400 +++ new/test/java/awt/datatransfer/SystemFlavorMap/SetFlavorsForNativeTest.java 2014-07-01 15:25:04.758980276 +0400 @@ -0,0 +1,165 @@ +/* + * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.SystemFlavorMap; +import java.util.Arrays; +import java.util.Hashtable; +import java.util.Vector; + +/* + * @test + * @summary To test SystemFlavorMap method + * setFlavorsForNative(String nat, DataFlavor[] flavors) + * with valid natives and DataFlavors. Specifically test for + * adding new mappings, one-way and two-way, and to update + * existing mappings. + * @author Rick Reynaga (rick.reynaga@eng.sun.com) area=Clipboard + * @run main SetFlavorsForNativeTest + */ + +public class SetFlavorsForNativeTest { + + SystemFlavorMap flavorMap; + Vector comp1, comp2, comp3; + Hashtable hash; + int hashSize; + + String test_native1, test_native2, test_native3, test_native4; + String[] test_natives_set1, test_natives_set2; + DataFlavor test_flavor1, test_flavor2, test_flavor3, test_flavor4; + DataFlavor[] test_flavors_set1, test_flavors_set2; + + public static void main (String[] args) throws Exception { + new SetFlavorsForNativeTest().doTest(); + } + + public void doTest() throws Exception { + // Initialize DataFlavors and arrays used for test data + initMappings(); + + flavorMap = (SystemFlavorMap)SystemFlavorMap.getDefaultFlavorMap(); + + // Get all the native strings and preferred DataFlavor mappings + hash = new Hashtable(flavorMap.getFlavorsForNatives(null)); + hashSize = hash.size(); + + // Setup One-way Mappings + System.out.println("One-way Mappings Test"); + flavorMap.setFlavorsForNative(test_native1, test_flavors_set1); + flavorMap.setFlavorsForNative(test_native2, test_flavors_set1); + + // Confirm mapping with getFlavorsForNative + comp1 = new Vector(Arrays.asList(test_flavors_set1)); + comp2 = new Vector(flavorMap.getFlavorsForNative(test_native1)); + comp3 = new Vector(flavorMap.getFlavorsForNative(test_native2)); + + if ( !(comp1.equals(comp2)) || !(comp1.equals(comp3))) { + throw new RuntimeException("\n*** After setting up one-way mapping" + + "\nwith setFlavorsForNative(String nat, DataFlavors[] flavors)" + + "\nthe mappings returned from getFlavorsForNative() do not match" + + "\noriginal mappings."); + } + else + System.out.println("One-way: Test Passes"); + + // Setup Two-way Mapping + System.out.println("Two-way Mappings Test"); + flavorMap.setNativesForFlavor(test_flavor1, test_natives_set1); + flavorMap.setNativesForFlavor(test_flavor2, test_natives_set1); + + // Confirm mapping with getNativesForFlavor + comp1 = new Vector(Arrays.asList(test_natives_set1)); + comp2 = new Vector(flavorMap.getNativesForFlavor(test_flavor1)); + comp3 = new Vector(flavorMap.getNativesForFlavor(test_flavor2)); + + if ( !(comp1.equals(comp2)) || !(comp1.equals(comp3))) { + throw new RuntimeException("\n*** After setting up two-way mapping" + + "\nwith setNativesForFlavor(DataFlavor flav, String[] natives)" + + "\nthe mappings returned from getNativesForFlavor() do not match" + + "\noriginal mappings."); + } + else + System.out.println("Two-way (DataFlavor): Test Passes"); + + // Check first native mapping + comp1 = new Vector(Arrays.asList(test_flavors_set1)); + comp2 = new Vector(flavorMap.getFlavorsForNative(test_native1)); + comp3 = new Vector(flavorMap.getFlavorsForNative(test_native2)); + + if ( !(comp1.equals(comp2)) || !(comp1.equals(comp3))) { + throw new RuntimeException("\n*** After setting up two-way mapping" + + "\nwith setFlavorsForNative(String nat, DataFlavors[] flavors)" + + "\nthe mappings returned from getFlavorsForNative() do not match" + + "\noriginal mappings."); + } + else + System.out.println("Two-way (String native): Test Passes"); + + // + // Modify an existing mapping test + System.out.println("Modify Existing Mappings Test"); + flavorMap.setFlavorsForNative(test_native1, test_flavors_set2); + flavorMap.setFlavorsForNative(test_native2, test_flavors_set2); + + // Confirm mapping with getFlavorsForNative + comp1 = new Vector(Arrays.asList(test_flavors_set2)); + comp2 = new Vector(flavorMap.getFlavorsForNative(test_native1)); + comp3 = new Vector(flavorMap.getFlavorsForNative(test_native2)); + + if ( !(comp1.equals(comp2)) || !(comp1.equals(comp3))) { + throw new RuntimeException("\n*** After modifying an existing mapping" + + "\nwith setFlavorsForNative(String nat, DataFlavors[] flavors)" + + "\nthe mappings returned from getFlavorsForNative() do not match" + + "\noriginal mappings."); + } + else + System.out.println("Modify Existing Mappings: Test Passes"); + + } + + // Initialize mapping variables used in this test + public void initMappings() throws Exception { + //create String natives + test_native1 = "TEST1"; + test_native2 = "TEST2"; + test_native3 = "TEST3"; + test_native4 = "TEST4"; + + test_flavor1 = new DataFlavor(Class.forName("java.awt.Label"), "test1"); + test_flavor2 = new DataFlavor(Class.forName("java.awt.Button"), "test2"); + test_flavor3 = new DataFlavor(Class.forName("java.awt.Checkbox"), "test3"); + test_flavor4 = new DataFlavor(Class.forName("java.awt.List"), "test4"); + + //create and initialize DataFlavor arrays + test_flavors_set1 = new DataFlavor[] {test_flavor1, test_flavor2}; + test_flavors_set2 = new DataFlavor[] {test_flavor3, test_flavor4}; + + //create and initialize String native arrays + test_natives_set1 = new String[] {test_native1, test_native2}; + test_natives_set2 = new String[] {test_native3, test_native4}; + } +} + --- /dev/null 2014-07-01 12:18:16.415424475 +0400 +++ new/test/java/awt/datatransfer/SystemFlavorMap/SetNativesForFlavor.java 2014-07-01 15:25:05.230980257 +0400 @@ -0,0 +1,164 @@ +/* + * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.SystemFlavorMap; +import java.util.Arrays; +import java.util.Hashtable; +import java.util.Vector; + +/* + * @test + * @summary To test SystemFlavorMap method + * setNativesForFlavor(DataFlavor flav, String[] natives) + * with valid natives and DataFlavors. Specifically test for + * adding new mappings, one-way and two-way, and to update + * existing mappings. + * @author Rick Reynaga (rick.reynaga@eng.sun.com) area=Clipboard + * @run main SetNativesForFlavorTest + */ + +public class SetNativesForFlavor { + + SystemFlavorMap flavorMap; + Vector comp1, comp2, comp3; + Hashtable hash; + int hashSize; + + String test_native1, test_native2, test_native3, test_native4; + String[] test_natives_set1, test_natives_set2; + DataFlavor test_flavor1, test_flavor2, test_flavor3, test_flavor4; + DataFlavor[] test_flavors_set1, test_flavors_set2; + + public static void main (String[] args) throws Exception { + new SetNativesForFlavor().doTest(); + } + + public void doTest() throws Exception { + // Initialize DataFlavors and arrays used for test data + initMappings(); + + flavorMap = (SystemFlavorMap)SystemFlavorMap.getDefaultFlavorMap(); + + // Get all the native strings and preferred DataFlavor mappings + hash = new Hashtable(flavorMap.getFlavorsForNatives(null)); + hashSize = hash.size(); + + // Setup One-way Mappings + System.out.println("One-way Mappings Test"); + flavorMap.setNativesForFlavor(test_flavor1, test_natives_set1); + flavorMap.setNativesForFlavor(test_flavor2, test_natives_set1); + + // Confirm mapping with getNativesForFlavor + comp1 = new Vector(Arrays.asList(test_natives_set1)); + comp2 = new Vector(flavorMap.getNativesForFlavor(test_flavor1)); + comp3 = new Vector(flavorMap.getNativesForFlavor(test_flavor2)); + + if ( !(comp1.equals(comp2)) || !(comp1.equals(comp3))) { + throw new RuntimeException("\n*** After setting up one-way mapping" + + "\nwith setNativesForFlavor(DataFlavor flav, String[] natives)" + + "\nthe mappings returned from getNativesForFlavor() do not match" + + "\noriginal mappings."); + } + else + System.out.println("One-way: Test Passes"); + + // Setup Two-way Mapping + System.out.println("Two-way Mappings Test"); + flavorMap.setFlavorsForNative(test_native1, test_flavors_set1); + flavorMap.setFlavorsForNative(test_native2, test_flavors_set1); + + // Confirm mapping with getFlavorsForNative + comp1 = new Vector(Arrays.asList(test_flavors_set1)); + comp2 = new Vector(flavorMap.getFlavorsForNative(test_native1)); + comp3 = new Vector(flavorMap.getFlavorsForNative(test_native2)); + + if ( !(comp1.equals(comp2)) || !(comp1.equals(comp3))) { + throw new RuntimeException("\n*** After setting up two-way mapping" + + "\nwith setFlavorsForNative(string nat, DataFlavor[] flavors)" + + "\nthe mappings returned from getFlavorsForNative() do not match" + + "\noriginal mappings."); + } + else + System.out.println("Two-way (DataFlavor): Test Passes"); + + // Check first native mapping + comp1 = new Vector(Arrays.asList(test_natives_set1)); + comp2 = new Vector(flavorMap.getNativesForFlavor(test_flavor1)); + comp3 = new Vector(flavorMap.getNativesForFlavor(test_flavor2)); + + if ( !(comp1.equals(comp2)) || !(comp1.equals(comp3))) { + throw new RuntimeException("\n*** After setting up two-way mapping" + + "\nwith setNativesForFlavor(DataFlavor flav, String[] natives)" + + "\nthe mappings returned from getNativesForFlavor() do not match" + + "\noriginal mappings."); + } + else + System.out.println("Two-way (String native): Test Passes"); + + // Modify an existing mapping test + System.out.println("Modify Existing Mappings Test"); + flavorMap.setNativesForFlavor(test_flavor1, test_natives_set2); + flavorMap.setNativesForFlavor(test_flavor2, test_natives_set2); + + // Confirm mapping with getNativesForFlavor + comp1 = new Vector(Arrays.asList(test_natives_set2)); + comp2 = new Vector(flavorMap.getNativesForFlavor(test_flavor1)); + comp3 = new Vector(flavorMap.getNativesForFlavor(test_flavor2)); + + if ( !(comp1.equals(comp2)) || !(comp1.equals(comp3))) { + throw new RuntimeException("\n*** After modifying an existing mapping" + + "\nwith setNativesForFlavor(DataFlavor flav, String[] natives)" + + "\nthe mappings returned from getNativesForFlavor() do not match" + + "\noriginal mappings."); + } + else + System.out.println("Modify Existing Mappings: Test Passes"); + + } + + // Initialize mapping variables used in this test + public void initMappings() throws Exception { + //create String natives + test_native1 = "TEST1"; + test_native2 = "TEST2"; + test_native3 = "TEST3"; + test_native4 = "TEST4"; + + test_flavor1 = new DataFlavor(Class.forName("java.awt.Label"), "test1"); + test_flavor2 = new DataFlavor(Class.forName("java.awt.Button"), "test2"); + test_flavor3 = new DataFlavor(Class.forName("java.awt.Checkbox"), "test3"); + test_flavor4 = new DataFlavor(Class.forName("java.awt.List"), "test4"); + + //create and initialize DataFlavor arrays + test_flavors_set1 = new DataFlavor[] {test_flavor1, test_flavor2}; + test_flavors_set2 = new DataFlavor[] {test_flavor3, test_flavor4}; + + //create and initialize String native arrays + test_natives_set1 = new String[] {test_native1, test_native2}; + test_natives_set2 = new String[] {test_native3, test_native4}; + } +} + --- /dev/null 2014-07-01 12:18:16.415424475 +0400 +++ new/test/java/awt/datatransfer/SystemFlavorMap/SetNativesTest.java 2014-07-01 15:25:05.690980239 +0400 @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.SystemFlavorMap; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Map; +import java.util.Vector; + +/* + * @test + * @summary To test SystemFlavorMap method: + * setFlavorsForNative(String nat, DataFlavors[] flavors) + * with valid natives and DataFlavors. This stress test will + * define numerous mappings of valid String natives and + * DataFlavors. The mappings will be verified by examining + * that all entries are present, and order is maintained. + * @author Rick Reynaga (rick.reynaga@eng.sun.com) area=Clipboard + * @run main SetNativesTest + */ + +public class SetNativesTest { + + SystemFlavorMap flavorMap; + Hashtable hashVerify; + + Map mapFlavors; + Map mapNatives; + + Hashtable hashFlavors; + Hashtable hashNatives; + + public static void main (String[] args){ + new SetNativesTest().doTest(); + } + + public void doTest() { + flavorMap = (SystemFlavorMap)SystemFlavorMap.getDefaultFlavorMap(); + + // Get SystemFlavorMap Maps of String Natives and DataFlavors + mapFlavors = flavorMap.getNativesForFlavors(null); + mapNatives = flavorMap.getFlavorsForNatives(null); + + hashFlavors = new Hashtable(mapFlavors); + hashNatives = new Hashtable(mapNatives); + + + // Test setFlavorsForNative(String nat, DataFlavors[] flavors); + // + // Enumerate through all the system defined String natives, + // and for each String native, define it again to the SystemFlavorMap + // with a slightly modified String native (name). + // + // For verification, a seperate Hashtable will be maintained of the additions. + String key; + hashVerify = new Hashtable(); + + for (Enumeration e = hashNatives.keys() ; e.hasMoreElements() ;) { + key = (String)e.nextElement(); + + java.util.List listFlavors = flavorMap.getFlavorsForNative(key); + Vector vectorFlavors = new Vector(listFlavors); + DataFlavor[] arrayFlavors = (DataFlavor[])vectorFlavors.toArray(new DataFlavor[0]); + + key = key.concat("TEST"); // construct a unique String native + // define the new String native entry + flavorMap.setFlavorsForNative(key, arrayFlavors); + // keep track of this new native entry + hashVerify.put(key, vectorFlavors); + } + + // After establishing "new" mappings, verify that the defined + // DataFlavors can be retrieved and that the List (order) is preserved. + verifyNewMappings(); + } + + // Verify getFlavorsForNative(String nat) is returning the correct list + // of DataFlavors (for the new mappings). + public void verifyNewMappings() { + // Enumerate through all natives + for (Enumeration e = hashVerify.keys() ; e.hasMoreElements() ;) { + String key = (String)e.nextElement(); + + java.util.List listFlavors = flavorMap.getFlavorsForNative(key); + Vector vectorFlavors = new Vector(listFlavors); + + // Compare the list of DataFlavors + if ( !vectorFlavors.equals((Vector)hashVerify.get(key))) { + throw new RuntimeException("\n*** Error in verifyNewMappings()" + + "\nmethod1: setFlavorsForNative(String nat, DataFlavors[] flavors)" + + "\nmethod2: List getFlavorsForNative(String nat)" + + "\nString native: " + key + + "\nThe Returned List did not match the original set of DataFlavors."); + } + } + System.out.println("*** native size = " + hashVerify.size()); + } +} + --- /dev/null 2014-07-01 12:18:16.415424475 +0400 +++ new/test/java/awt/datatransfer/SystemSelection/SystemSelectionAWTTest.java 2014-07-01 15:25:06.146980221 +0400 @@ -0,0 +1,171 @@ +/* + * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.*; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.Transferable; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; +import java.awt.event.InputEvent; +import java.util.Properties; + +/* + * @test + * @summary To check the functionality of newly added API getSystemSelection & make sure + * that it's mapped to primary clipboard + * @author Jitender(jitender.singh@eng.sun.com) area=AWT + * @library ../../../../lib/testlibrary + * @build ExtendedRobot + * @run main SystemSelectionAWTTest + */ + +public class SystemSelectionAWTTest { + + Frame frame; + TextField tf1, tf2; + Clipboard clip; + Transferable t; + + public static void main(String[] args) throws Exception { + new SystemSelectionAWTTest().doTest(); + } + + SystemSelectionAWTTest() { + frame = new Frame(); + frame.setSize(200, 200); + + tf1 = new TextField(); + tf1.addFocusListener( new FocusAdapter() { + public void focusGained(FocusEvent fe) { + fe.getSource(); + } + }); + + tf2 = new TextField(); + + frame.add(tf2, BorderLayout.NORTH); + frame.add(tf1, BorderLayout.CENTER); + + frame.setVisible(true); + frame.toFront(); + tf1.requestFocus(); + tf1.setText("Selection Testing"); + } + + // Check whether Security manager is there + public void checkSecurity() { + SecurityManager sm = System.getSecurityManager(); + + if (sm == null) { + System.out.println("security manager is not there"); + getPrimaryClipboard(); + } else { + try { + sm.checkPermission(new AWTPermission("accessClipboard")); + getPrimaryClipboard(); + } catch(SecurityException e) { + clip = null; + System.out.println("Access to System selection is not allowed"); + } + } + } + + // Get the contents from the clipboard + void getClipboardContent() throws Exception { + t = clip.getContents(this); + if ( (t != null) && (t.isDataFlavorSupported(DataFlavor.stringFlavor) )) { + tf2.setBackground(Color.red); + tf2.setForeground(Color.black); + tf2.setText((String) t.getTransferData(DataFlavor.stringFlavor)); + } + } + + // Get System Selection i.e. Primary Clipboard + private void getPrimaryClipboard() { + Properties ps = System.getProperties(); + String operSys = ps.getProperty("os.name"); + clip = Toolkit.getDefaultToolkit().getSystemSelection(); + if (clip == null) { + if ((operSys.substring(0,3)).equalsIgnoreCase("Win") || + (operSys.substring(0,3)).equalsIgnoreCase("Mac")) + System.out.println(operSys + " operating system does not support system selection "); + else + throw new RuntimeException("Method getSystemSelection() is returning null on X11 platform"); + } + } + + // Compare the selected text with one pasted from the clipboard + public void compareText() { + if ((tf2.getText()).equals(tf1.getSelectedText()) && + System.getProperties().getProperty("os.name").substring(0,3) != "Win") { + System.out.println("Selected text & clipboard contents are same\n"); + } else { + throw new RuntimeException("Selected text & clipboard contents differs\n"); + } + } + + public void doTest() throws Exception { + ExtendedRobot robot = new ExtendedRobot(); + + frame.setLocation(100, 100); + robot.waitForIdle(2000); + + Point tf1Location = tf1.getLocationOnScreen(); + Dimension tf1Size = tf1.getSize(); + checkSecurity(); + + if (clip != null) { + robot.mouseMove(tf1Location.x + 5, tf1Location.y + tf1Size.height / 2); + robot.waitForIdle(2000); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(20); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(20); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(20); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(2000); + + getClipboardContent(); + compareText(); + + robot.mouseMove(tf1Location.x + tf1Size.width / 2, tf1Location.y + tf1Size.height / 2); + robot.waitForIdle(2000); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(20); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(20); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(20); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(2000); + + getClipboardContent(); + compareText(); + } + } +} + --- /dev/null 2014-07-01 12:18:16.415424475 +0400 +++ new/test/java/awt/datatransfer/SystemSelection/SystemSelectionSwingTest.java 2014-07-01 15:25:06.634980201 +0400 @@ -0,0 +1,173 @@ +/* + * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.Transferable; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; +import java.awt.event.InputEvent; +import java.util.Properties; + +/* + * @test + * @summary To check the functionality of newly added API getSystemSelection & make sure + * that it's mapped to primary clipboard + * @author Jitender(jitender.singh@eng.sun.com) area=AWT + * @library ../../../../lib/testlibrary + * @build ExtendedRobot + * @run main SystemSelectionSwingTest + */ + +public class SystemSelectionSwingTest { + + JFrame jframe; + JTextField jtf1, jtf2; + Clipboard clip; + Transferable t; + + public static void main(String[] args) throws Exception { + new SystemSelectionSwingTest().doTest(); + } + + SystemSelectionSwingTest() { + jframe = new JFrame(); + jframe.setSize(200, 200); + + jtf1 = new JTextField(); + jtf1.addFocusListener( new FocusAdapter() { + public void focusGained(FocusEvent fe) { + fe.getSource(); + } + }); + + jtf2 = new JTextField(); + + jframe.add(jtf2, BorderLayout.NORTH); + jframe.add(jtf1, BorderLayout.CENTER); + + jframe.setVisible(true); + jframe.toFront(); + jtf1.requestFocus(); + jtf1.setText("Selection Testing"); + } + + // Check whether Security manager is there + public void checkSecurity() { + SecurityManager sm = System.getSecurityManager(); + + if (sm == null) { + System.out.println("security manager is not there"); + getPrimaryClipboard(); + } else { + try { + sm.checkPermission(new AWTPermission("accessClipboard")); + getPrimaryClipboard(); + } catch(SecurityException e) { + clip = null; + System.out.println("Access to System selection is not allowed"); + } + } + } + + // Get the contents from the clipboard + void getClipboardContent() throws Exception { + t = clip.getContents(this); + if ( (t != null) && (t.isDataFlavorSupported(DataFlavor.stringFlavor) )) { + jtf2.setBackground(Color.red); + jtf2.setForeground(Color.black); + jtf2.setText((String) t.getTransferData(DataFlavor.stringFlavor)); + } + } + + + // Get System Selection i.e. Primary Clipboard + private void getPrimaryClipboard() { + Properties ps = System.getProperties(); + String operSys = ps.getProperty("os.name"); + clip = Toolkit.getDefaultToolkit().getSystemSelection(); + if (clip == null) { + if ((operSys.substring(0,3)).equalsIgnoreCase("Win") || + (operSys.substring(0,3)).equalsIgnoreCase("Mac")) + System.out.println(operSys + " operating system does not support system selection "); + else + throw new RuntimeException("Method getSystemSelection() is returning null on X11 platform"); + } + } + + // Compare the selected text with one pasted from the clipboard + public void compareText() { + if ((jtf2.getText()).equals(jtf1.getSelectedText()) && + System.getProperties().getProperty("os.name").substring(0,3) != "Win") { + System.out.println("Selected text & clipboard contents are same\n"); + } else { + throw new RuntimeException("Selected text & clipboard contents differs\n"); + } + } + + public void doTest() throws Exception { + ExtendedRobot robot = new ExtendedRobot(); + + jframe.setLocation(100, 100); + robot.waitForIdle(2000); + + Point tf1Location = jtf1.getLocationOnScreen(); + Dimension tf1Size = jtf1.getSize(); + checkSecurity(); + + if (clip != null) { + robot.mouseMove(tf1Location.x + 5, tf1Location.y + tf1Size.height / 2); + robot.waitForIdle(2000); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(20); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(20); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(20); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(2000); + + getClipboardContent(); + compareText(); + + robot.mouseMove(tf1Location.x + tf1Size.width / 2, tf1Location.y + tf1Size.height / 2); + robot.waitForIdle(2000); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(20); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(20); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(20); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(2000); + + getClipboardContent(); + compareText(); + } + } +} +