From 8f1a6effc29975425daec855f8f0666e5b21039a Mon Sep 17 00:00:00 2001 From: Joe Erickson Date: Thu, 7 Feb 2019 14:08:01 -0500 Subject: [PATCH 1/3] Fixed DataObject regression which caused custom clipboard formats to fail. --- .../src/System/Windows/Forms/DataObject.cs | 1 + .../tests/UnitTests/DataObject.cs | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/src/System.Windows.Forms/src/System/Windows/Forms/DataObject.cs b/src/System.Windows.Forms/src/System/Windows/Forms/DataObject.cs index 5d84050acef..054c8151f54 100644 --- a/src/System.Windows.Forms/src/System/Windows/Forms/DataObject.cs +++ b/src/System.Windows.Forms/src/System/Windows/Forms/DataObject.cs @@ -973,6 +973,7 @@ private unsafe int SaveStreamToHandle(ref IntPtr handle, Stream stream) try { var span = new Span(ptr.ToPointer(), size); + stream.Position = 0; stream.Read(span); } finally diff --git a/src/System.Windows.Forms/tests/UnitTests/DataObject.cs b/src/System.Windows.Forms/tests/UnitTests/DataObject.cs index 991b51d8e80..94016a27164 100644 --- a/src/System.Windows.Forms/tests/UnitTests/DataObject.cs +++ b/src/System.Windows.Forms/tests/UnitTests/DataObject.cs @@ -66,5 +66,31 @@ private void DataObject_DataGetSet(string format) Assert.True(dataObject.GetDataPresent(format, autoConvert: false)); Assert.Equal(input, dataObject.GetData(format, autoConvert: false)); } + [WinFormsFact] + private void DataObject_CustomFormats() + { + var myTextFormat = "MyTextFormat"; + var myBlobFormat = "MyBlobFormat"; + var guid = Guid.NewGuid(); + var myText = guid.ToString(); + var myBlob = new System.IO.MemoryStream(guid.ToByteArray()); + var unicodeText = "Euro char: \u20AC"; + var data = new System.Windows.Forms.DataObject(); + data.SetData(myTextFormat, myText); + data.SetData(myBlobFormat, myBlob); + data.SetText(unicodeText); + System.Windows.Forms.Clipboard.SetDataObject(data); + var copiedDataObject = System.Windows.Forms.Clipboard.GetDataObject(); + var copiedText = copiedDataObject.GetData(myTextFormat) as string; + var copiedBlob = copiedDataObject.GetData(myBlobFormat) as System.IO.MemoryStream; + var copiedUnicodeText = System.Windows.Forms.Clipboard.GetText(); + Assert.NotNull(copiedText); + Assert.Equal(copiedText, myText); + Assert.NotNull(copiedBlob); + Assert.Equal(copiedBlob.Length, myBlob.Length); + Assert.Equal(new Guid(copiedBlob.ToArray()), guid); + Assert.NotNull(copiedUnicodeText); + Assert.Equal(copiedUnicodeText, unicodeText); + } } } From ee938f84db4c5210c5f39be1decce2a9b16ccc8a Mon Sep 17 00:00:00 2001 From: Tanya Solyanik Date: Wed, 13 Feb 2019 18:12:15 -0600 Subject: [PATCH 2/3] Update src/System.Windows.Forms/tests/UnitTests/DataObject.cs Co-Authored-By: JoeErickson --- src/System.Windows.Forms/tests/UnitTests/DataObject.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/System.Windows.Forms/tests/UnitTests/DataObject.cs b/src/System.Windows.Forms/tests/UnitTests/DataObject.cs index 94016a27164..c8ecb9c869d 100644 --- a/src/System.Windows.Forms/tests/UnitTests/DataObject.cs +++ b/src/System.Windows.Forms/tests/UnitTests/DataObject.cs @@ -75,7 +75,7 @@ private void DataObject_CustomFormats() var myText = guid.ToString(); var myBlob = new System.IO.MemoryStream(guid.ToByteArray()); var unicodeText = "Euro char: \u20AC"; - var data = new System.Windows.Forms.DataObject(); + var data = new DataObject(); data.SetData(myTextFormat, myText); data.SetData(myBlobFormat, myBlob); data.SetText(unicodeText); From 250a90402ed5ebcc6b2de20383319cd1713d6b8f Mon Sep 17 00:00:00 2001 From: Joe Erickson Date: Fri, 15 Feb 2019 12:53:24 -0600 Subject: [PATCH 3/3] Remove DataObject clipboard unit test --- .../tests/UnitTests/DataObject.cs | 26 ------------------- 1 file changed, 26 deletions(-) diff --git a/src/System.Windows.Forms/tests/UnitTests/DataObject.cs b/src/System.Windows.Forms/tests/UnitTests/DataObject.cs index 94016a27164..991b51d8e80 100644 --- a/src/System.Windows.Forms/tests/UnitTests/DataObject.cs +++ b/src/System.Windows.Forms/tests/UnitTests/DataObject.cs @@ -66,31 +66,5 @@ private void DataObject_DataGetSet(string format) Assert.True(dataObject.GetDataPresent(format, autoConvert: false)); Assert.Equal(input, dataObject.GetData(format, autoConvert: false)); } - [WinFormsFact] - private void DataObject_CustomFormats() - { - var myTextFormat = "MyTextFormat"; - var myBlobFormat = "MyBlobFormat"; - var guid = Guid.NewGuid(); - var myText = guid.ToString(); - var myBlob = new System.IO.MemoryStream(guid.ToByteArray()); - var unicodeText = "Euro char: \u20AC"; - var data = new System.Windows.Forms.DataObject(); - data.SetData(myTextFormat, myText); - data.SetData(myBlobFormat, myBlob); - data.SetText(unicodeText); - System.Windows.Forms.Clipboard.SetDataObject(data); - var copiedDataObject = System.Windows.Forms.Clipboard.GetDataObject(); - var copiedText = copiedDataObject.GetData(myTextFormat) as string; - var copiedBlob = copiedDataObject.GetData(myBlobFormat) as System.IO.MemoryStream; - var copiedUnicodeText = System.Windows.Forms.Clipboard.GetText(); - Assert.NotNull(copiedText); - Assert.Equal(copiedText, myText); - Assert.NotNull(copiedBlob); - Assert.Equal(copiedBlob.Length, myBlob.Length); - Assert.Equal(new Guid(copiedBlob.ToArray()), guid); - Assert.NotNull(copiedUnicodeText); - Assert.Equal(copiedUnicodeText, unicodeText); - } } }