提交 cda23781 编写于 作者: A anashaty

8059739: Dragged and Dropped data is corrupted for two data types

Reviewed-by: serb, pchelko
上级 b064ce8e
...@@ -24,6 +24,8 @@ ...@@ -24,6 +24,8 @@
*/ */
package javax.swing.plaf.basic; package javax.swing.plaf.basic;
import sun.awt.datatransfer.DataTransferer;
import java.io.*; import java.io.*;
import java.awt.datatransfer.*; import java.awt.datatransfer.*;
import javax.swing.plaf.UIResource; import javax.swing.plaf.UIResource;
...@@ -145,7 +147,7 @@ class BasicTransferable implements Transferable, UIResource { ...@@ -145,7 +147,7 @@ class BasicTransferable implements Transferable, UIResource {
} else if (Reader.class.equals(flavor.getRepresentationClass())) { } else if (Reader.class.equals(flavor.getRepresentationClass())) {
return new StringReader(data); return new StringReader(data);
} else if (InputStream.class.equals(flavor.getRepresentationClass())) { } else if (InputStream.class.equals(flavor.getRepresentationClass())) {
return new StringBufferInputStream(data); return createInputStream(flavor, data);
} }
// fall through to unsupported // fall through to unsupported
} else if (isPlainFlavor(flavor)) { } else if (isPlainFlavor(flavor)) {
...@@ -156,7 +158,7 @@ class BasicTransferable implements Transferable, UIResource { ...@@ -156,7 +158,7 @@ class BasicTransferable implements Transferable, UIResource {
} else if (Reader.class.equals(flavor.getRepresentationClass())) { } else if (Reader.class.equals(flavor.getRepresentationClass())) {
return new StringReader(data); return new StringReader(data);
} else if (InputStream.class.equals(flavor.getRepresentationClass())) { } else if (InputStream.class.equals(flavor.getRepresentationClass())) {
return new StringBufferInputStream(data); return createInputStream(flavor, data);
} }
// fall through to unsupported // fall through to unsupported
...@@ -168,6 +170,15 @@ class BasicTransferable implements Transferable, UIResource { ...@@ -168,6 +170,15 @@ class BasicTransferable implements Transferable, UIResource {
throw new UnsupportedFlavorException(flavor); throw new UnsupportedFlavorException(flavor);
} }
private InputStream createInputStream(DataFlavor flavor, String data)
throws IOException, UnsupportedFlavorException {
String cs = DataTransferer.getTextCharset(flavor);
if (cs == null) {
throw new UnsupportedFlavorException(flavor);
}
return new ByteArrayInputStream(data.getBytes(cs));
}
// --- richer subclass flavors ---------------------------------------------- // --- richer subclass flavors ----------------------------------------------
protected boolean isRicherFlavor(DataFlavor flavor) { protected boolean isRicherFlavor(DataFlavor flavor) {
......
/*
* Copyright (c) 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.
*
* 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.
*/
/* @test
@bug 8059739
@summary Dragged and Dropped data is corrupted for two data types
@author Anton Nashatyrev
*/
import javax.swing.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
public class bug8059739 {
private static boolean passed = true;
public static void main(String[] args) throws Exception {
SwingUtilities.invokeAndWait(new Runnable() {
@Override
public void run() {
try {
runTest();
} catch (Exception e) {
e.printStackTrace();
passed = false;
}
}
});
if (!passed) {
throw new RuntimeException("Test FAILED.");
} else {
System.out.println("Passed.");
}
}
private static void runTest() throws Exception {
String testString = "my string";
JTextField tf = new JTextField(testString);
tf.selectAll();
Clipboard clipboard = new Clipboard("clip");
tf.getTransferHandler().exportToClipboard(tf, clipboard, TransferHandler.COPY);
DataFlavor[] dfs = clipboard.getAvailableDataFlavors();
for (DataFlavor df: dfs) {
String charset = df.getParameter("charset");
if (InputStream.class.isAssignableFrom(df.getRepresentationClass()) &&
charset != null) {
BufferedReader br = new BufferedReader(new InputStreamReader(
(InputStream) clipboard.getData(df), charset));
String s = br.readLine();
System.out.println("Content: '" + s + "'");
passed &= s.contains(testString);
}
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册