|
|
|
@ -646,22 +646,49 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
Assert.Null(target.Text); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Text_Box_MaxLength_Work_Properly() |
|
|
|
|
|
|
|
[Theory] |
|
|
|
[InlineData("abc", "d", 3, 0, 0, false, "abc")] |
|
|
|
[InlineData("abc", "dd", 4, 3, 3, false, "abcd")] |
|
|
|
[InlineData("abc", "ddd", 3, 0, 2, true, "ddc")] |
|
|
|
[InlineData("abc", "dddd", 4, 1, 3, true, "addd")] |
|
|
|
[InlineData("abc", "ddddd", 5, 3, 3, true, "abcdd")] |
|
|
|
public void MaxLength_Works_Properly( |
|
|
|
string initalText, |
|
|
|
string textInput, |
|
|
|
int maxLength, |
|
|
|
int selectionStart, |
|
|
|
int selectionEnd, |
|
|
|
bool fromClipboard, |
|
|
|
string expected) |
|
|
|
{ |
|
|
|
using (UnitTestApplication.Start(Services)) |
|
|
|
{ |
|
|
|
var target = new TextBox |
|
|
|
{ |
|
|
|
Template = CreateTemplate(), |
|
|
|
Text = "abc", |
|
|
|
MaxLength = 3, |
|
|
|
Text = initalText, |
|
|
|
MaxLength = maxLength, |
|
|
|
SelectionStart = selectionStart, |
|
|
|
SelectionEnd = selectionEnd |
|
|
|
}; |
|
|
|
|
|
|
|
RaiseKeyEvent(target, Key.D, KeyModifiers.None); |
|
|
|
|
|
|
|
Assert.Equal("abc", target.Text); |
|
|
|
|
|
|
|
if (fromClipboard) |
|
|
|
{ |
|
|
|
AvaloniaLocator.CurrentMutable.Bind<IClipboard>().ToSingleton<ClipboardStub>(); |
|
|
|
|
|
|
|
var clipboard = AvaloniaLocator.CurrentMutable.GetService<IClipboard>(); |
|
|
|
clipboard.SetTextAsync(textInput).GetAwaiter().GetResult(); |
|
|
|
|
|
|
|
RaiseKeyEvent(target, Key.V, KeyModifiers.Control); |
|
|
|
clipboard.ClearAsync().GetAwaiter().GetResult(); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
RaiseTextEvent(target, textInput); |
|
|
|
} |
|
|
|
|
|
|
|
Assert.Equal(expected, target.Text); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -758,11 +785,22 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
|
|
|
|
private class ClipboardStub : IClipboard // in order to get tests working that use the clipboard
|
|
|
|
{ |
|
|
|
public Task<string> GetTextAsync() => Task.FromResult(""); |
|
|
|
private string _text; |
|
|
|
|
|
|
|
public Task<string> GetTextAsync() => Task.FromResult(_text); |
|
|
|
|
|
|
|
public Task SetTextAsync(string text) => Task.CompletedTask; |
|
|
|
public Task SetTextAsync(string text) |
|
|
|
{ |
|
|
|
_text = text; |
|
|
|
return Task.CompletedTask; |
|
|
|
} |
|
|
|
|
|
|
|
public Task ClearAsync() => Task.CompletedTask; |
|
|
|
public Task ClearAsync() |
|
|
|
{ |
|
|
|
_text = null; |
|
|
|
return Task.CompletedTask; |
|
|
|
} |
|
|
|
|
|
|
|
public Task SetDataObjectAsync(IDataObject data) => Task.CompletedTask; |
|
|
|
|
|
|
|
public Task<string[]> GetFormatsAsync() => Task.FromResult(Array.Empty<string>()); |
|
|
|
|