Browse Source

Fix PlatformDataTransferItem.TryGetRaw for unknown formats (#19791)

* Add failing test for PlatformDataTransferItem

* Fix PlatformDataTransferItem.TryGetRaw
pull/19797/head
Julien Lebosquain 4 months ago
committed by GitHub
parent
commit
ed38536854
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 2
      src/Avalonia.Base/Input/IAsyncDataTransferItem.cs
  2. 2
      src/Avalonia.Base/Input/Platform/PlatformDataTransferItem.cs
  3. 62
      tests/Avalonia.Base.UnitTests/Input/PlatformDataTransferItemTests.cs

2
src/Avalonia.Base/Input/IAsyncDataTransferItem.cs

@ -26,7 +26,7 @@ public interface IAsyncDataTransferItem
/// of the generic argument of the underlying <see cref="DataFormat{T}"/>.
/// </para>
/// <para>
/// To retrieve a typed value, use <see cref="DataTransferItemExtensions.TryGetValue"/>.
/// To retrieve a typed value, use <see cref="AsyncDataTransferItemExtensions.TryGetValueAsync"/>.
/// </para>
/// </remarks>
/// <seealso cref="AsyncDataTransferItemExtensions.TryGetValueAsync"/>

2
src/Avalonia.Base/Input/Platform/PlatformDataTransferItem.cs

@ -27,7 +27,7 @@ internal abstract class PlatformDataTransferItem : IDataTransferItem, IAsyncData
=> Array.IndexOf(Formats, format) >= 0;
public object? TryGetRaw(DataFormat format)
=> Contains(format) ? TryGetRawCore(format) : Task.FromResult<object?>(null);
=> Contains(format) ? TryGetRawCore(format) : null;
public Task<object?> TryGetRawAsync(DataFormat format)
{

62
tests/Avalonia.Base.UnitTests/Input/PlatformDataTransferItemTests.cs

@ -0,0 +1,62 @@
using System.Threading.Tasks;
using Avalonia.Input;
using Avalonia.Input.Platform;
using Xunit;
namespace Avalonia.Base.UnitTests.Input;
public sealed class PlatformDataTransferItemTests
{
[Fact]
public void TryGetRaw_Should_Return_Null_When_Format_Is_Unknown()
{
var format = DataFormat.CreateBytesApplicationFormat("test-format");
var item = new TestPlatformDataTransferItem([]);
var value = item.TryGetRaw(format);
Assert.Null(value);
}
[Fact]
public void TryGetRaw_Should_Return_Expected_Value_When_Format_Is_Known()
{
var format = DataFormat.CreateBytesApplicationFormat("test-format");
var item = new TestPlatformDataTransferItem([format]);
var value = item.TryGetRaw(format);
Assert.Same(format, value);
}
[Fact]
public async Task TryGetRawAsync_Should_Return_Null_When_Format_Is_Unknown()
{
var format = DataFormat.CreateBytesApplicationFormat("test-format");
var item = new TestPlatformDataTransferItem([]);
var value = await item.TryGetRawAsync(format);
Assert.Null(value);
}
[Fact]
public async Task TryGetRawAsync_Should_Return_Expected_Value_When_Format_Is_Known()
{
var format = DataFormat.CreateBytesApplicationFormat("test-format");
var item = new TestPlatformDataTransferItem([format]);
var value = await item.TryGetRawAsync(format);
Assert.Same(format, value);
}
private sealed class TestPlatformDataTransferItem(DataFormat[] dataFormats) : PlatformDataTransferItem
{
protected override DataFormat[] ProvideFormats()
=> dataFormats;
protected override object TryGetRawCore(DataFormat format)
=> format;
}
}
Loading…
Cancel
Save