From eea6bf2ef88ecd477d6426a4fac9a7b668957675 Mon Sep 17 00:00:00 2001 From: BDisp Date: Thu, 5 Jan 2023 15:31:36 +0000 Subject: [PATCH] Fixes #2277. Changing TextField.Text does not clear text selection. --- Terminal.Gui/Views/TextField.cs | 1 + UnitTests/TextFieldTests.cs | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/Terminal.Gui/Views/TextField.cs b/Terminal.Gui/Views/TextField.cs index 8e843b22b..14fc56394 100644 --- a/Terminal.Gui/Views/TextField.cs +++ b/Terminal.Gui/Views/TextField.cs @@ -298,6 +298,7 @@ namespace Terminal.Gui { } return; } + ClearAllSelection (); text = TextModel.ToRunes (newText.NewText); if (!Secret && !historyText.IsFromHistory) { diff --git a/UnitTests/TextFieldTests.cs b/UnitTests/TextFieldTests.cs index cc3559848..a931f72e0 100644 --- a/UnitTests/TextFieldTests.cs +++ b/UnitTests/TextFieldTests.cs @@ -1296,5 +1296,32 @@ namespace Terminal.Gui.Views { Assert.Equal ($"{text}A", tf.Text); Assert.True (tf.IsDirty); } + + [InlineData ("a")] // Lower than selection + [InlineData ("aaaaaaaaaaa")] // Greater than selection + [InlineData ("aaaa")] // Equal than selection + [Theory] + public void TestSetTextAndMoveCursorToEnd_WhenExistingSelection (string newText) + { + var tf = new TextField (); + tf.Text = "fish"; + tf.CursorPosition = tf.Text.Length; + + tf.ProcessKey (new KeyEvent (Key.CursorLeft, new KeyModifiers ())); + + tf.ProcessKey (new KeyEvent (Key.CursorLeft | Key.ShiftMask, new KeyModifiers { Shift = true })); + tf.ProcessKey (new KeyEvent (Key.CursorLeft | Key.ShiftMask, new KeyModifiers { Shift = true })); + + Assert.Equal (1, tf.CursorPosition); + Assert.Equal (2, tf.SelectedLength); + Assert.Equal ("is", tf.SelectedText); + + tf.Text = newText; + tf.CursorPosition = tf.Text.Length; + + Assert.Equal (newText.Length, tf.CursorPosition); + Assert.Equal (0, tf.SelectedLength); + Assert.Null (tf.SelectedText); + } } } \ No newline at end of file