CustomClassLoaderTransferTest.java revision 14851:980da45565c8
1/* 2 @test 3 @key headful 4 @bug 4932376 5 @summary verifies that data transfer within one JVM works correctly if 6 the transfer data was created with a custom class loader. 7 @author das@sparc.spb.su area=datatransfer 8 @library ../../regtesthelpers 9 @build TransferableList AnotherInterface CopyClassFile CustomClassLoaderTransferTest 10 @run main CopyClassFile -r ListInterface subdir/ 11 @run main CopyClassFile -r TransferableList subdir/ 12 @run main CustomClassLoaderTransferTest 13*/ 14 15import java.awt.*; 16import java.awt.datatransfer.*; 17import java.io.*; 18import java.net.URL; 19import java.net.URLClassLoader; 20 21public class CustomClassLoaderTransferTest { 22 public static class DFTransferable implements Transferable { 23 private final DataFlavor df; 24 private final Object obj; 25 public DFTransferable(DataFlavor df, Object obj) { 26 this.df = df; 27 this.obj = obj; 28 } 29 30 @Override 31 public Object getTransferData(DataFlavor flavor) 32 throws UnsupportedFlavorException, IOException { 33 if (df.equals(flavor)) { 34 return obj; 35 } else { 36 throw new UnsupportedFlavorException(flavor); 37 } 38 } 39 40 @Override 41 public DataFlavor[] getTransferDataFlavors(){ 42 return new DataFlavor[] { df }; 43 } 44 45 @Override 46 public boolean isDataFlavorSupported(DataFlavor flavor) { 47 return df.equals(flavor); 48 } 49 } 50 51 public static void main(String[] args) throws Exception { 52 Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard(); 53 URL url = new File("./subdir/").toURL(); 54 ClassLoader classLoader = new URLClassLoader(new URL[] { url }, 55 CustomClassLoaderTransferTest.class.getClassLoader()); 56 Class clazz = Class.forName("TransferableList", true, classLoader); 57 DataFlavor df = new DataFlavor(clazz, "Transferable List"); 58 Object obj = clazz.newInstance(); 59 Transferable t = new DFTransferable(df, obj); 60 c.setContents(t, null); 61 Transferable ct = c.getContents(null); 62 ct.getTransferData(df); 63 } 64} 65