1
1
// Licensed to the .NET Foundation under one or more agreements.
2
2
// The .NET Foundation licenses this file to you under the MIT license.
3
3
4
+ using System . Windows . Media . Imaging ;
5
+
4
6
namespace System . Windows ;
5
7
6
8
// 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;
10
12
public class DataObjectTests
11
13
{
12
14
[ WpfFact ]
13
- public void SetData_Invoke_GetReturnsExpected ( )
15
+ public void GetData_NonExistentFormat_ReturnsNull ( )
14
16
{
15
- string testData = "test data" ;
16
17
DataObject data = new ( ) ;
17
- data . SetData ( testData ) ;
18
- data . GetData ( testData . GetType ( ) . FullName ! ) . Should ( ) . Be ( testData ) ;
18
+ data . GetData ( "non-existent format" ) . Should ( ) . BeNull ( ) ;
19
19
}
20
20
21
21
[ WpfFact ]
22
- public void SetData_Null_ThrowsArgumentNullException ( )
22
+ public void GetData_NonExistentKey_ReturnsNull ( )
23
23
{
24
+ Type key = typeof ( string ) ;
25
+
24
26
DataObject data = new ( ) ;
25
- Action action = ( ) => data . SetData ( null ! ) ;
26
- action . Should ( ) . Throw < ArgumentNullException > ( ) . WithParameterName ( "data" ) ;
27
+
28
+ data . GetData ( key . FullName ! ) . Should ( ) . BeNull ( ) ;
27
29
}
28
30
29
31
[ WpfFact ]
30
- public void GetData_NonExistentFormat_ReturnsNull ( )
32
+ public void ContainsData_ContainsText_ReturnsFalse ( )
31
33
{
34
+ string testData = "test data" ;
32
35
DataObject data = new ( ) ;
33
- data . GetData ( "non-existent format" ) . Should ( ) . BeNull ( ) ;
36
+ data . SetData ( testData ) ;
37
+ data . ContainsText ( ) . Should ( ) . BeFalse ( ) ;
34
38
}
35
39
40
+ #region SetData Tests
41
+
36
42
[ WpfFact ]
37
- public void ContainsData_ContainsText_ReturnsFalse ( )
43
+ public void SetData_Invoke_GetReturnsExpected ( )
38
44
{
39
45
string testData = "test data" ;
40
46
DataObject data = new ( ) ;
41
47
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" ) ;
43
57
}
44
58
45
59
[ WpfFact ]
@@ -205,16 +219,6 @@ public void SetData_TypeObject_NullData_ThrowsArgumentNullException()
205
219
act . Should ( ) . Throw < ArgumentNullException > ( ) ;
206
220
}
207
221
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
-
218
222
[ WpfFact ]
219
223
public void SetData_TypeObject_SameKeyTwice_OverwritesData ( )
220
224
{
@@ -290,4 +294,179 @@ public void SetData_StringObjectBool_EmptyKey_ThrowsArgumentException()
290
294
Action act = ( ) => data . SetData ( string . Empty , testData , true ) ;
291
295
act . Should ( ) . Throw < ArgumentException > ( ) ;
292
296
}
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
293
472
}
0 commit comments