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