DataFormatTests.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. using System;
  2. using Avalonia.Input;
  3. using Xunit;
  4. namespace Avalonia.Base.UnitTests.Input;
  5. public sealed class DataFormatTests
  6. {
  7. [Fact]
  8. public void CreateInProcessFormat_Returns_Format_With_InProcess_Kind()
  9. {
  10. var format = DataFormat.CreateInProcessFormat<string>("my-format");
  11. Assert.Equal(DataFormatKind.InProcess, format.Kind);
  12. }
  13. [Fact]
  14. public void CreateInProcessFormat_Returns_Format_With_Correct_Identifier()
  15. {
  16. var format = DataFormat.CreateInProcessFormat<string>("my-format");
  17. Assert.Equal("my-format", format.Identifier);
  18. }
  19. [Fact]
  20. public void CreateInProcessFormat_Throws_On_Null_Identifier()
  21. {
  22. Assert.Throws<ArgumentNullException>(() => DataFormat.CreateInProcessFormat<string>(null!));
  23. }
  24. [Fact]
  25. public void CreateInProcessFormat_Throws_On_Empty_Identifier()
  26. {
  27. Assert.Throws<ArgumentException>(() => DataFormat.CreateInProcessFormat<string>(string.Empty));
  28. }
  29. [Fact]
  30. public void CreateInProcessFormat_Allows_Non_ASCII_Identifiers()
  31. {
  32. var format = DataFormat.CreateInProcessFormat<string>("日本語フォーマット");
  33. Assert.Equal("日本語フォーマット", format.Identifier);
  34. }
  35. [Fact]
  36. public void ToSystemName_Throws_For_InProcess()
  37. {
  38. var format = DataFormat.CreateInProcessFormat<string>("test");
  39. Assert.Throws<InvalidOperationException>(() => format.ToSystemName("prefix."));
  40. }
  41. [Fact]
  42. public void InProcess_Format_Equality_Same_Identifier()
  43. {
  44. var format1 = DataFormat.CreateInProcessFormat<string>("my-format");
  45. var format2 = DataFormat.CreateInProcessFormat<string>("my-format");
  46. Assert.Equal(format1, format2);
  47. Assert.True(format1 == format2);
  48. }
  49. [Fact]
  50. public void InProcess_Format_Inequality_Different_Identifier()
  51. {
  52. var format1 = DataFormat.CreateInProcessFormat<string>("format-a");
  53. var format2 = DataFormat.CreateInProcessFormat<string>("format-b");
  54. Assert.NotEqual(format1, format2);
  55. Assert.True(format1 != format2);
  56. }
  57. [Fact]
  58. public void InProcess_Format_Inequality_Different_Kind_Same_Identifier()
  59. {
  60. var inProcess = DataFormat.CreateInProcessFormat<string>("test-format");
  61. var application = DataFormat.CreateStringApplicationFormat("test-format");
  62. Assert.NotEqual<DataFormat>(inProcess, application);
  63. }
  64. [Fact]
  65. public void TryGetRaw_With_Mismatched_Format_Returns_Null_For_Single_Format_Item()
  66. {
  67. var item = DataTransferItem.CreateText("hello");
  68. var result = item.TryGetRaw(DataFormat.Bitmap);
  69. Assert.Null(result);
  70. }
  71. [Fact]
  72. public void InProcess_Format_Works_With_DataTransferItem_Set_And_Get()
  73. {
  74. var format = DataFormat.CreateInProcessFormat<string>("my-inprocess");
  75. var item = new DataTransferItem();
  76. item.Set(format, "hello");
  77. var value = item.TryGetValue(format);
  78. Assert.Equal("hello", value);
  79. }
  80. [Fact]
  81. public void InProcess_Format_Coexists_With_Other_Formats_In_DataTransfer()
  82. {
  83. var inProcessFormat = DataFormat.CreateInProcessFormat<string>("my-inprocess");
  84. var item = new DataTransferItem();
  85. item.SetText("plain text");
  86. item.Set(inProcessFormat, "in-process data");
  87. var dataTransfer = new DataTransfer();
  88. dataTransfer.Add(item);
  89. Assert.Contains(DataFormat.Text, dataTransfer.Formats);
  90. Assert.Contains(inProcessFormat, (System.Collections.Generic.IEnumerable<DataFormat>)dataTransfer.Formats);
  91. Assert.Equal("plain text", item.TryGetValue(DataFormat.Text));
  92. Assert.Equal("in-process data", item.TryGetValue(inProcessFormat));
  93. }
  94. }