Files
Ursa.Avalonia/tests/HeadlessTest.Ursa/Controls/PinCodeTests/PasteTest.cs
2024-12-05 21:17:39 +08:00

102 lines
3.2 KiB
C#

using Avalonia.Controls;
using Avalonia.Headless;
using Avalonia.Headless.XUnit;
using Avalonia.Input;
using Avalonia.Threading;
using CommunityToolkit.Mvvm.Input;
using Ursa.Controls;
namespace HeadlessTest.Ursa.Controls.PinCodeTests;
public class PasteTest
{
[AvaloniaFact]
public async void Paste_Should_Insert_Text()
{
var window = new Window();
bool commandInvoked = false;
var pinCode = new PinCode()
{
Count = 4,
CompleteCommand = new RelayCommand(() => commandInvoked = true),
};
window.Content = pinCode;
window.Show();
var clipboard = window.Clipboard;
Assert.NotNull(clipboard);
await clipboard.SetTextAsync("abcd");
pinCode.Focus();
window.KeyPressQwerty(PhysicalKey.V, RawInputModifiers.Control);
// add await for clipboard processing.
await Task.Delay(1);
Assert.Equal("abcd", string.Join("", pinCode.Digits));
Assert.True(commandInvoked);
}
[AvaloniaFact]
public async void Paste_Should_Insert_Text_When_Text_Is_Shorter()
{
var window = new Window();
bool commandInvoked = false;
var pinCode = new PinCode()
{
Count = 4,
CompleteCommand = new RelayCommand(() => commandInvoked = true),
};
window.Content = pinCode;
window.Show();
var clipboard = window.Clipboard;
Assert.NotNull(clipboard);
await clipboard.SetTextAsync("abc");
pinCode.Focus();
window.KeyPressQwerty(PhysicalKey.V, RawInputModifiers.Control);
await Task.Delay(1);
Assert.Equal("abc", string.Join("", pinCode.Digits));
Assert.False(commandInvoked);
}
[AvaloniaFact]
public async void Paste_Should_Insert_Text_When_Text_Is_Longer()
{
var window = new Window();
bool commandInvoked = false;
var pinCode = new PinCode()
{
Count = 4,
CompleteCommand = new RelayCommand(() => commandInvoked = true),
};
window.Content = pinCode;
window.Show();
var clipboard = window.Clipboard;
Assert.NotNull(clipboard);
await clipboard.SetTextAsync("abcde");
pinCode.Focus();
window.KeyPressQwerty(PhysicalKey.V, RawInputModifiers.Control);
await Task.Delay(1);
Assert.Equal("abcd", string.Join("", pinCode.Digits));
Assert.True(commandInvoked);
}
[AvaloniaFact]
public async void Paste_Should_Not_Insert_Text_When_Text_Is_In_Invalid_Mode()
{
var window = new Window();
var commandInvoked = false;
var pinCode = new PinCode()
{
Count = 4,
Mode = PinCodeMode.Digit,
CompleteCommand = new RelayCommand(() => commandInvoked = true),
};
window.Content = pinCode;
window.Show();
var clipboard = window.Clipboard;
Assert.NotNull(clipboard);
await clipboard.SetTextAsync("abcde");
pinCode.Focus();
window.KeyPressQwerty(PhysicalKey.V, RawInputModifiers.Control);
await Task.Delay(1);
Assert.Equal("", string.Join("", pinCode.Digits));
Assert.False(commandInvoked);
}
}