Skip to content

Commit 9c58920

Browse files
authored
Add DataObject tests (#10781)
* Add ContainsAudio, ContainsImage, and ContainsText tests * Address PR Feedback
1 parent f313d65 commit 9c58920

File tree

1 file changed

+200
-21
lines changed
  • src/Microsoft.DotNet.Wpf/tests/UnitTests/PresentationCore.Tests/System/Windows

1 file changed

+200
-21
lines changed

src/Microsoft.DotNet.Wpf/tests/UnitTests/PresentationCore.Tests/System/Windows/DataObjectTests.cs

Lines changed: 200 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
// Licensed to the .NET Foundation under one or more agreements.
22
// The .NET Foundation licenses this file to you under the MIT license.
33

4+
using System.Windows.Media.Imaging;
5+
46
namespace System.Windows;
57

68
// Note: the OS Clipboard is a system wide resource and all access should be done sequentially to avoid
@@ -10,36 +12,48 @@ namespace System.Windows;
1012
public class DataObjectTests
1113
{
1214
[WpfFact]
13-
public void SetData_Invoke_GetReturnsExpected()
15+
public void GetData_NonExistentFormat_ReturnsNull()
1416
{
15-
string testData = "test data";
1617
DataObject data = new();
17-
data.SetData(testData);
18-
data.GetData(testData.GetType().FullName!).Should().Be(testData);
18+
data.GetData("non-existent format").Should().BeNull();
1919
}
2020

2121
[WpfFact]
22-
public void SetData_Null_ThrowsArgumentNullException()
22+
public void GetData_NonExistentKey_ReturnsNull()
2323
{
24+
Type key = typeof(string);
25+
2426
DataObject data = new();
25-
Action action = () => data.SetData(null!);
26-
action.Should().Throw<ArgumentNullException>().WithParameterName("data");
27+
28+
data.GetData(key.FullName!).Should().BeNull();
2729
}
2830

2931
[WpfFact]
30-
public void GetData_NonExistentFormat_ReturnsNull()
32+
public void ContainsData_ContainsText_ReturnsFalse()
3133
{
34+
string testData = "test data";
3235
DataObject data = new();
33-
data.GetData("non-existent format").Should().BeNull();
36+
data.SetData(testData);
37+
data.ContainsText().Should().BeFalse();
3438
}
3539

40+
#region SetData Tests
41+
3642
[WpfFact]
37-
public void ContainsData_ContainsText_ReturnsFalse()
43+
public void SetData_Invoke_GetReturnsExpected()
3844
{
3945
string testData = "test data";
4046
DataObject data = new();
4147
data.SetData(testData);
42-
data.ContainsText().Should().BeFalse();
48+
data.GetData(testData.GetType().FullName!).Should().Be(testData);
49+
}
50+
51+
[WpfFact]
52+
public void SetData_Null_ThrowsArgumentNullException()
53+
{
54+
DataObject data = new();
55+
Action action = () => data.SetData(null!);
56+
action.Should().Throw<ArgumentNullException>().WithParameterName("data");
4357
}
4458

4559
[WpfFact]
@@ -205,16 +219,6 @@ public void SetData_TypeObject_NullData_ThrowsArgumentNullException()
205219
act.Should().Throw<ArgumentNullException>();
206220
}
207221

208-
[WpfFact]
209-
public void GetData_NonExistentKey_ReturnsNull()
210-
{
211-
Type key = typeof(string);
212-
213-
DataObject data = new();
214-
215-
data.GetData(key.FullName!).Should().BeNull();
216-
}
217-
218222
[WpfFact]
219223
public void SetData_TypeObject_SameKeyTwice_OverwritesData()
220224
{
@@ -290,4 +294,179 @@ public void SetData_StringObjectBool_EmptyKey_ThrowsArgumentException()
290294
Action act = () => data.SetData(string.Empty, testData, true);
291295
act.Should().Throw<ArgumentException>();
292296
}
297+
#endregion
298+
299+
#region ContainsText Tests
300+
301+
[WpfFact]
302+
public void ContainsText_WithEmptyDataObject_ShouldReturnFalse()
303+
{
304+
var dataObject = new DataObject();
305+
306+
dataObject.ContainsText().Should().BeFalse();
307+
}
308+
309+
[WpfFact]
310+
public void ContainsText_WithTextData_ShouldReturnTrue()
311+
{
312+
var dataObject = new DataObject();
313+
dataObject.SetText("Sample text");
314+
315+
dataObject.ContainsText().Should().BeTrue();
316+
}
317+
318+
[WpfFact]
319+
public void ContainsText_WithEmptyTextData_ShouldReturnTrue()
320+
{
321+
var dataObject = new DataObject();
322+
dataObject.SetText(string.Empty);
323+
324+
dataObject.ContainsText().Should().BeTrue();
325+
}
326+
327+
[WpfFact]
328+
public void ContainsText_WithNonTextData_ShouldReturnFalse()
329+
{
330+
var dataObject = new DataObject();
331+
dataObject.SetData("CustomFormat", new byte[] { 1, 2, 3 });
332+
333+
dataObject.ContainsText().Should().BeFalse();
334+
}
335+
336+
[WpfFact]
337+
public void ContainsText_WithTextAndNonTextData_ShouldReturnTrue()
338+
{
339+
var dataObject = new DataObject();
340+
dataObject.SetText("Sample text");
341+
dataObject.SetData("CustomFormat", new byte[] { 1, 2, 3 });
342+
343+
dataObject.ContainsText().Should().BeTrue();
344+
}
345+
346+
[WpfFact]
347+
public void ContainsText_WithTextFormat_WhenUsingTextFormatParam_ShouldReturnTrue()
348+
{
349+
var dataObject = new DataObject();
350+
dataObject.SetText("Sample text", TextDataFormat.Text);
351+
352+
dataObject.ContainsText(TextDataFormat.Text).Should().BeTrue();
353+
354+
// Additional case verifying any other data format should return false
355+
dataObject.ContainsText(TextDataFormat.UnicodeText).Should().BeFalse();
356+
}
357+
358+
[WpfFact]
359+
public void ContainsText_WithUnicodeTextFormat_WhenUsingTextFormatParam_ShouldReturnTrue()
360+
{
361+
var dataObject = new DataObject();
362+
dataObject.SetText("Sample text", TextDataFormat.UnicodeText);
363+
364+
dataObject.ContainsText(TextDataFormat.UnicodeText).Should().BeTrue();
365+
dataObject.ContainsText(TextDataFormat.Text).Should().BeFalse();
366+
}
367+
368+
[WpfFact]
369+
public void ContainsText_WithMultipleTextFormats_WhenUsingTextFormatParam_ShouldReturnTrueForEach()
370+
{
371+
var dataObject = new DataObject();
372+
var sampleText = "Sample text";
373+
dataObject.SetText(sampleText, TextDataFormat.Text);
374+
dataObject.SetText(sampleText, TextDataFormat.UnicodeText);
375+
dataObject.SetText(sampleText, TextDataFormat.Rtf);
376+
377+
dataObject.ContainsText(TextDataFormat.Text).Should().BeTrue();
378+
dataObject.ContainsText(TextDataFormat.UnicodeText).Should().BeTrue();
379+
dataObject.ContainsText(TextDataFormat.Rtf).Should().BeTrue();
380+
381+
// Additional check
382+
dataObject.ContainsText(TextDataFormat.Html).Should().BeFalse();
383+
}
384+
#endregion
385+
386+
#region ContainsAudio Tests
387+
388+
[WpfFact]
389+
public void ContainsAudio_WithEmptyDataObject_ShouldReturnFalse()
390+
{
391+
var dataObject = new DataObject();
392+
393+
dataObject.ContainsAudio().Should().BeFalse();
394+
}
395+
396+
[WpfFact]
397+
public void ContainsAudio_WithWaveFormat_ShouldReturnTrue()
398+
{
399+
var dataObject = new DataObject();
400+
using MemoryStream audioStream = new([0x52, 0x49, 0x46, 0x46]); // RIFF header
401+
dataObject.SetData(DataFormats.WaveAudio, audioStream);
402+
403+
dataObject.ContainsAudio().Should().BeTrue();
404+
}
405+
406+
[WpfFact]
407+
public void ContainsAudio_WithTextData_ShouldReturnFalse()
408+
{
409+
var dataObject = new DataObject();
410+
dataObject.SetText("Sample Text Data");
411+
412+
dataObject.ContainsAudio().Should().BeFalse();
413+
}
414+
415+
[WpfFact]
416+
public void ContainsAudio_WithMultipleFormatsMixedWithAudio_ShouldReturnTrue()
417+
{
418+
var dataObject = new DataObject();
419+
using MemoryStream audioStream = new([0x52, 0x49, 0x46, 0x46]); // RIFF header
420+
421+
dataObject.SetText("Sample text");
422+
dataObject.SetData(DataFormats.WaveAudio, audioStream);
423+
dataObject.SetData("CustomFormat", new byte[] { 1, 2, 3 });
424+
425+
dataObject.ContainsAudio().Should().BeTrue();
426+
}
427+
#endregion
428+
429+
#region ContainsImage Tests
430+
431+
[WpfFact]
432+
public void ContainsImage_WithEmptyDataObject_ShouldReturnFalse()
433+
{
434+
var dataObject = new DataObject();
435+
436+
dataObject.ContainsImage().Should().BeFalse();
437+
}
438+
439+
[WpfFact]
440+
public void ContainsImage_WithBitmapData_ShouldReturnTrue()
441+
{
442+
var dataObject = new DataObject();
443+
var bitmap = new BitmapImage();
444+
445+
dataObject.SetData(DataFormats.Bitmap, bitmap);
446+
447+
dataObject.ContainsImage().Should().BeTrue();
448+
}
449+
450+
[WpfFact]
451+
public void ContainsImage_WithTextData_ShouldReturnFalse()
452+
{
453+
var dataObject = new DataObject();
454+
dataObject.SetText("Sample Text Data");
455+
456+
dataObject.ContainsImage().Should().BeFalse();
457+
}
458+
459+
[WpfFact]
460+
public void ContainsImage_WithMultipleFormatsMixedWithImage_ShouldReturnTrue()
461+
{
462+
var dataObject = new DataObject();
463+
var bitmap = new BitmapImage();
464+
465+
dataObject.SetText("Sample text");
466+
dataObject.SetData(DataFormats.Bitmap, bitmap);
467+
dataObject.SetData("CustomFormat", new byte[] { 1, 2, 3 });
468+
469+
dataObject.ContainsImage().Should().BeTrue();
470+
}
471+
#endregion
293472
}

0 commit comments

Comments
 (0)