diff --git a/src/Avalonia.Controls/TextBoxTextInputMethodClient.cs b/src/Avalonia.Controls/TextBoxTextInputMethodClient.cs index 0ff857985a..5d35124c69 100644 --- a/src/Avalonia.Controls/TextBoxTextInputMethodClient.cs +++ b/src/Avalonia.Controls/TextBoxTextInputMethodClient.cs @@ -180,6 +180,11 @@ namespace Avalonia.Controls private static string GetTextLineText(TextLine textLine) { + if (textLine.Length == 0) + { + return string.Empty; + } + var builder = StringBuilderCache.Acquire(textLine.Length); foreach (var run in textLine.TextRuns) diff --git a/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs b/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs index 42e42dd9f6..30f82533ce 100644 --- a/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs +++ b/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs @@ -9,11 +9,10 @@ using Avalonia.Data; using Avalonia.Headless; using Avalonia.Input; using Avalonia.Input.Platform; +using Avalonia.Input.TextInput; using Avalonia.Layout; using Avalonia.Media; using Avalonia.Platform; -using Avalonia.Rendering; -using Avalonia.Rendering.Composition; using Avalonia.UnitTests; using Avalonia.VisualTree; using Moq; @@ -1492,6 +1491,30 @@ namespace Avalonia.Controls.UnitTests } } + [Fact] + public void InputMethodClient_SurroundingText_Returns_Empty_For_Empty_Line() + { + using var _ = UnitTestApplication.Start(Services); + + var textBox = new TextBox + { + Template = CreateTemplate(), + Text = "", + CaretIndex = 0 + }; + textBox.ApplyTemplate(); + + var eventArgs = new TextInputMethodClientRequestedEventArgs + { + RoutedEvent = InputElement.TextInputMethodClientRequestedEvent + }; + textBox.RaiseEvent(eventArgs); + + var client = eventArgs.Client; + Assert.NotNull(client); + Assert.Equal(string.Empty, client.SurroundingText); + } + [Fact] public void Backspace_Should_Delete_Last_Character_In_Line_And_Keep_Caret_On_Same_Line() {