Browse Source

Merge pull request #2278 from BDisp/clearallselection-text-fix_2277

Fixes #2277. Changing TextField.Text does not clear text selection.
Tig 2 years ago
parent
commit
0d9b7dce31
2 changed files with 28 additions and 0 deletions
  1. 1 0
      Terminal.Gui/Views/TextField.cs
  2. 27 0
      UnitTests/TextFieldTests.cs

+ 1 - 0
Terminal.Gui/Views/TextField.cs

@@ -298,6 +298,7 @@ namespace Terminal.Gui {
 					}
 					}
 					return;
 					return;
 				}
 				}
+				ClearAllSelection ();
 				text = TextModel.ToRunes (newText.NewText);
 				text = TextModel.ToRunes (newText.NewText);
 
 
 				if (!Secret && !historyText.IsFromHistory) {
 				if (!Secret && !historyText.IsFromHistory) {

+ 27 - 0
UnitTests/TextFieldTests.cs

@@ -1296,5 +1296,32 @@ namespace Terminal.Gui.Views {
 			Assert.Equal ($"{text}A", tf.Text);
 			Assert.Equal ($"{text}A", tf.Text);
 			Assert.True (tf.IsDirty);
 			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);
+		}
 	}
 	}
 }
 }