Browse Source
* test: add DataFormat.CreateInProcessFormat tests Cover the new InProcess format API: kind, identifier, null/empty validation, non-ASCII identifiers, HasSystemName for all four kinds, ToSystemName throwing, equality/inequality, DataTransferItem integration, and coexistence with other formats in DataTransfer. * feat: implement DataFormat.CreateInProcessFormat<T> for in-process drag/drop Add DataFormatKind.InProcess and DataFormat.CreateInProcessFormat<T>() so users can pass arbitrary object references during in-process drag-and-drop without crossing serialization boundaries. - Add HasSystemName property to indicate whether ToSystemName() is valid - Update ToSystemName to throw for InProcess (same as Universal) - Guard all 7 platform backends (Win32, macOS, X11, Android, Browser, iOS) to skip InProcess formats during clipboard/drag-drop enumeration Closes #20097 * fix: remove HasSystemName API per review feedbackrelease/12.0.1
committed by
Julien Lebosquain
10 changed files with 163 additions and 5 deletions
@ -0,0 +1,110 @@ |
|||||
|
using System; |
||||
|
using Avalonia.Input; |
||||
|
using Xunit; |
||||
|
|
||||
|
namespace Avalonia.Base.UnitTests.Input; |
||||
|
|
||||
|
public sealed class DataFormatTests |
||||
|
{ |
||||
|
[Fact] |
||||
|
public void CreateInProcessFormat_Returns_Format_With_InProcess_Kind() |
||||
|
{ |
||||
|
var format = DataFormat.CreateInProcessFormat<string>("my-format"); |
||||
|
|
||||
|
Assert.Equal(DataFormatKind.InProcess, format.Kind); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void CreateInProcessFormat_Returns_Format_With_Correct_Identifier() |
||||
|
{ |
||||
|
var format = DataFormat.CreateInProcessFormat<string>("my-format"); |
||||
|
|
||||
|
Assert.Equal("my-format", format.Identifier); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void CreateInProcessFormat_Throws_On_Null_Identifier() |
||||
|
{ |
||||
|
Assert.Throws<ArgumentNullException>(() => DataFormat.CreateInProcessFormat<string>(null!)); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void CreateInProcessFormat_Throws_On_Empty_Identifier() |
||||
|
{ |
||||
|
Assert.Throws<ArgumentException>(() => DataFormat.CreateInProcessFormat<string>(string.Empty)); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void CreateInProcessFormat_Allows_Non_ASCII_Identifiers() |
||||
|
{ |
||||
|
var format = DataFormat.CreateInProcessFormat<string>("日本語フォーマット"); |
||||
|
|
||||
|
Assert.Equal("日本語フォーマット", format.Identifier); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void ToSystemName_Throws_For_InProcess() |
||||
|
{ |
||||
|
var format = DataFormat.CreateInProcessFormat<string>("test"); |
||||
|
|
||||
|
Assert.Throws<InvalidOperationException>(() => format.ToSystemName("prefix.")); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void InProcess_Format_Equality_Same_Identifier() |
||||
|
{ |
||||
|
var format1 = DataFormat.CreateInProcessFormat<string>("my-format"); |
||||
|
var format2 = DataFormat.CreateInProcessFormat<string>("my-format"); |
||||
|
|
||||
|
Assert.Equal(format1, format2); |
||||
|
Assert.True(format1 == format2); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void InProcess_Format_Inequality_Different_Identifier() |
||||
|
{ |
||||
|
var format1 = DataFormat.CreateInProcessFormat<string>("format-a"); |
||||
|
var format2 = DataFormat.CreateInProcessFormat<string>("format-b"); |
||||
|
|
||||
|
Assert.NotEqual(format1, format2); |
||||
|
Assert.True(format1 != format2); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void InProcess_Format_Inequality_Different_Kind_Same_Identifier() |
||||
|
{ |
||||
|
var inProcess = DataFormat.CreateInProcessFormat<string>("test-format"); |
||||
|
var application = DataFormat.CreateStringApplicationFormat("test-format"); |
||||
|
|
||||
|
Assert.NotEqual<DataFormat>(inProcess, application); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void InProcess_Format_Works_With_DataTransferItem_Set_And_Get() |
||||
|
{ |
||||
|
var format = DataFormat.CreateInProcessFormat<string>("my-inprocess"); |
||||
|
var item = new DataTransferItem(); |
||||
|
item.Set(format, "hello"); |
||||
|
|
||||
|
var value = item.TryGetValue(format); |
||||
|
|
||||
|
Assert.Equal("hello", value); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void InProcess_Format_Coexists_With_Other_Formats_In_DataTransfer() |
||||
|
{ |
||||
|
var inProcessFormat = DataFormat.CreateInProcessFormat<string>("my-inprocess"); |
||||
|
var item = new DataTransferItem(); |
||||
|
item.SetText("plain text"); |
||||
|
item.Set(inProcessFormat, "in-process data"); |
||||
|
|
||||
|
var dataTransfer = new DataTransfer(); |
||||
|
dataTransfer.Add(item); |
||||
|
|
||||
|
Assert.Contains(DataFormat.Text, dataTransfer.Formats); |
||||
|
Assert.Contains(inProcessFormat, (System.Collections.Generic.IEnumerable<DataFormat>)dataTransfer.Formats); |
||||
|
Assert.Equal("plain text", item.TryGetValue(DataFormat.Text)); |
||||
|
Assert.Equal("in-process data", item.TryGetValue(inProcessFormat)); |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue