From 028e7e5bf21ee523a2a5f590846ace683f9aa06c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Miguel=20Perricone?= Date: Wed, 28 Apr 2021 12:42:33 -0300 Subject: [PATCH] TextValidateField reimplementation without generics (#1261) * TextValidateField reimplementation without generic * mask change in catalog --- Terminal.Gui/Views/TextValidateField.cs | 211 ++++++++---------------- UICatalog/Scenarios/Text.cs | 26 +-- UnitTests/TextValidateFieldTests.cs | 131 +++++++-------- 3 files changed, 147 insertions(+), 221 deletions(-) diff --git a/Terminal.Gui/Views/TextValidateField.cs b/Terminal.Gui/Views/TextValidateField.cs index 530287303..940480b57 100644 --- a/Terminal.Gui/Views/TextValidateField.cs +++ b/Terminal.Gui/Views/TextValidateField.cs @@ -81,16 +81,14 @@ namespace Terminal.Gui { bool IsValid { get; } /// - /// Set the input text, and get the formatted string for display. + /// Set the input text and get the current value. /// ustring Text { get; set; } /// - /// Mask used for validation. - /// Not always a mask, can by a regex expression. - /// TODO: Maybe we can change the name. + /// Gets the formatted string for display. /// - ustring Mask { get; set; } + ustring DisplayText { get; } } ////////////////////////////////////////////////////////////////////////////// @@ -107,22 +105,27 @@ namespace Terminal.Gui { /// public class NetMaskedTextProvider : ITextValidateProvider { MaskedTextProvider provider; - string text; /// /// Empty Constructor /// - public NetMaskedTextProvider () { } + public NetMaskedTextProvider (string mask) + { + Mask = mask; + } - /// + /// + /// Mask property + /// public ustring Mask { get { return provider?.Mask; } set { + var current = provider != null ? provider.ToString (false, false) : string.Empty; provider = new MaskedTextProvider (value == ustring.Empty ? "&&&&&&" : value.ToString ()); - if (string.IsNullOrEmpty (text) == false) { - provider.Set (text); + if (string.IsNullOrEmpty (current) == false) { + provider.Set (current); } } } @@ -130,10 +133,9 @@ namespace Terminal.Gui { /// public ustring Text { get { - return provider.ToDisplayString (); + return provider.ToString (); } set { - text = value.ToString (); provider.Set (value.ToString ()); } } @@ -144,6 +146,9 @@ namespace Terminal.Gui { /// public bool Fixed => true; + /// + public ustring DisplayText => provider.ToDisplayString (); + /// public int Cursor (int pos) { @@ -212,20 +217,25 @@ namespace Terminal.Gui { public class TextRegexProvider : ITextValidateProvider { Regex regex; List text; - List mask; + List pattern; /// - /// Empty Constructor + /// Empty Constructor. /// - public TextRegexProvider () { } + public TextRegexProvider (string pattern) + { + Pattern = pattern; + } - /// - public ustring Mask { + /// + /// Regex pattern property. + /// + public ustring Pattern { get { - return ustring.Make (mask); + return ustring.Make (pattern); } set { - mask = value.ToRuneList (); + pattern = value.ToRuneList (); CompileMask (); SetupText (); } @@ -242,6 +252,9 @@ namespace Terminal.Gui { } } + /// + public ustring DisplayText => Text; + /// public bool IsValid { get { @@ -257,6 +270,7 @@ namespace Terminal.Gui { /// public bool ValidateOnInput { get; set; } = true; + bool Validate (List text) { var match = regex.Match (ustring.Make (text).ToString ()); @@ -340,7 +354,7 @@ namespace Terminal.Gui { /// private void CompileMask () { - regex = new Regex (ustring.Make (mask).ToString (), RegexOptions.Compiled); + regex = new Regex (ustring.Make (pattern).ToString (), RegexOptions.Compiled); } } #endregion @@ -349,58 +363,66 @@ namespace Terminal.Gui { /// /// Text field that validates input through a /// - /// - public class TextValidateField : View, ITextValidateProvider where T : class { + public class TextValidateField : View { ITextValidateProvider provider; int cursorPosition = 0; /// - /// Initializes a new instance of the class using positioning. + /// Initializes a new instance of the class using positioning. /// - public TextValidateField () + public TextValidateField () : this (null) { } /// - /// Initializes a new instance of the class using positioning. + /// Initializes a new instance of the class using positioning. /// - /// Mask - public TextValidateField (ustring mask) : this (mask, ustring.Empty) { } - - /// - /// Initializes a new instance of the class using positioning. - /// - /// - /// Initial Value - public TextValidateField (ustring mask, ustring text) + public TextValidateField (ITextValidateProvider provider) { - provider = Activator.CreateInstance (typeof (T)) as ITextValidateProvider; + if (provider != null) { + Provider = provider; + } - Mask = mask; - Text = text; + Initialize (); + } - this.Width = text == ustring.Empty ? 20 : Text.Length; - this.Height = 1; - this.CanFocus = true; + void Initialize () + { + Height = 1; + CanFocus = true; } /// - /// Get the Provider + /// Provider /// - public T Provider => (T)provider; + public ITextValidateProvider Provider { + get => provider; + set { + provider = value; + if (provider.Fixed == true) { + this.Width = provider.DisplayText == ustring.Empty ? 10 : Text.Length; + } + HomeKeyHandler (); + SetNeedsDisplay (); + } + } /// public override bool MouseEvent (MouseEvent mouseEvent) { - var c = provider.Cursor (mouseEvent.X - GetMargins (Frame.Width).left); - if (provider.Fixed == false && TextAlignment == TextAlignment.Right && Text.Length > 0) { - c += 1; + if (mouseEvent.Flags.HasFlag (MouseFlags.Button1Pressed)) { + + var c = provider.Cursor (mouseEvent.X - GetMargins (Frame.Width).left); + if (provider.Fixed == false && TextAlignment == TextAlignment.Right && Text.Length > 0) { + c += 1; + } + cursorPosition = c; + SetFocus (); + SetNeedsDisplay (); + return true; } - cursorPosition = c; - SetFocus (); - SetNeedsDisplay (); - return true; + return false; } /// @@ -424,22 +446,6 @@ namespace Terminal.Gui { } } - /// - /// Mask - /// - public ustring Mask { - get { - return provider.Mask; - } - set { - provider.Mask = value; - - cursorPosition = provider.CursorStart (); - - SetNeedsDisplay (); - } - } - ///inheritdoc/> public override void PositionCursor () { @@ -501,8 +507,8 @@ namespace Terminal.Gui { // Content Driver.SetAttribute (textColor); // Content - for (int i = 0; i < provider.Text.Length; i++) { - Driver.AddRune (provider.Text [i]); + for (int i = 0; i < provider.DisplayText.Length; i++) { + Driver.AddRune (provider.DisplayText [i]); } // Right Margin @@ -615,75 +621,6 @@ namespace Terminal.Gui { return true; } - /// - /// Set Cursor position to . - /// - /// - /// Return first valid position. - public int Cursor (int pos) - { - return provider.Cursor (pos); - } - - /// - /// First valid position before . - /// - /// - /// New cursor position if any, otherwise returns - public int CursorLeft (int pos) - { - return provider.CursorLeft (pos); - } - - /// - /// First valid position after . - /// - /// Current position. - /// New cursor position if any, otherwise returns - public int CursorRight (int pos) - { - return provider.CursorRight (pos); - } - - /// - /// Find the first valid character position. - /// - /// New cursor position. - public int CursorStart () - { - return provider.CursorStart (); - } - - /// - /// Find the last valid character position. - /// - /// New cursor position. - public int CursorEnd () - { - return provider.CursorEnd (); - } - - /// - /// Deletes the current character in . - /// - /// - /// true if the character was successfully removed, otherwise false. - public bool Delete (int pos) - { - return provider.Delete (pos); - } - - /// - /// Insert character in position . - /// - /// - /// - /// true if the character was successfully inserted, otherwise false. - public bool InsertAt (char ch, int pos) - { - return provider.InsertAt (ch, pos); - } - /// /// This property returns true if the input is valid. /// @@ -696,7 +633,5 @@ namespace Terminal.Gui { return provider.IsValid; } } - - public bool Fixed => throw new NotImplementedException (); } } diff --git a/UICatalog/Scenarios/Text.cs b/UICatalog/Scenarios/Text.cs index c84140bfd..7d99e8574 100644 --- a/UICatalog/Scenarios/Text.cs +++ b/UICatalog/Scenarios/Text.cs @@ -112,35 +112,35 @@ namespace UICatalog { _timeField.TimeChanged += TimeChanged; // MaskedTextProvider - var netProvider = new Label (".Net MaskedTextProvider [ 999 000 LLL >LLL| AAA aaa ]") { + var netProviderLabel = new Label (".Net MaskedTextProvider [ 999 000 LLL >LLL| AAA aaa ]") { X = Pos.Left (dateField), Y = Pos.Bottom (dateField) + 1 }; - Win.Add (netProvider); + Win.Add (netProviderLabel); - var netProviderField = new TextValidateField ("999 000 LLL >LLL| AAA aaa") { - X = Pos.Right (netProvider) + 1, - Y = Pos.Y (netProvider), - Width = 40, - TextAlignment = TextAlignment.Centered + var netProvider = new NetMaskedTextProvider ("999 000 LLL > LLL | AAA aaa"); + + var netProviderField = new TextValidateField (netProvider) { + X = Pos.Right (netProviderLabel) + 1, + Y = Pos.Y (netProviderLabel) }; + Win.Add (netProviderField); // TextRegexProvider var regexProvider = new Label ("Gui.cs TextRegexProvider [ ^([0-9]?[0-9]?[0-9]|1000)$ ]") { - X = Pos.Left (netProvider), - Y = Pos.Bottom (netProvider) + 1 + X = Pos.Left (netProviderLabel), + Y = Pos.Bottom (netProviderLabel) + 1 }; Win.Add (regexProvider); - var regexProviderField = new TextValidateField ("^([0-9]?[0-9]?[0-9]|1000)$") { + var provider2 = new TextRegexProvider ("^([0-9]?[0-9]?[0-9]|1000)$") { ValidateOnInput = false }; + var regexProviderField = new TextValidateField (provider2) { X = Pos.Right (regexProvider) + 1, Y = Pos.Y (regexProvider), - Width = 40, + Width = 30, TextAlignment = TextAlignment.Centered }; - // Access the inner Provider to configure. - regexProviderField.Provider.ValidateOnInput = false; Win.Add (regexProviderField); } diff --git a/UnitTests/TextValidateFieldTests.cs b/UnitTests/TextValidateFieldTests.cs index 64908611f..b04a49a44 100644 --- a/UnitTests/TextValidateFieldTests.cs +++ b/UnitTests/TextValidateFieldTests.cs @@ -15,14 +15,15 @@ namespace Terminal.Gui.Views { { // * // 0123456789 - var field = new TextValidateField ("--(0000)--") { + var field = new TextValidateField (new NetMaskedTextProvider ("--(0000)--")) { TextAlignment = TextAlignment.Centered, Width = 20 }; field.ProcessKey (new KeyEvent (Key.D1, new KeyModifiers { })); - Assert.Equal ("--(1___)--", field.Text); + Assert.Equal ("--(1___)--", field.Provider.DisplayText); + Assert.Equal ("--(1 )--", field.Text); } [Fact] @@ -30,14 +31,15 @@ namespace Terminal.Gui.Views { { // * // 0123456789 - var field = new TextValidateField ("--(0000)--") { + var field = new TextValidateField (new NetMaskedTextProvider ("--(0000)--")) { TextAlignment = TextAlignment.Centered, Width = 20 }; field.ProcessKey (new KeyEvent (Key.A, new KeyModifiers { })); - Assert.Equal ("--(____)--", field.Text); + Assert.Equal ("--( )--", field.Text); + Assert.Equal ("--(____)--", field.Provider.DisplayText); Assert.False (field.IsValid); } @@ -46,7 +48,7 @@ namespace Terminal.Gui.Views { { // * // 0123456789 - var field = new TextValidateField ("--(0000)--") { + var field = new TextValidateField (new NetMaskedTextProvider ("--(0000)--")) { TextAlignment = TextAlignment.Centered, Width = 20 }; @@ -57,7 +59,8 @@ namespace Terminal.Gui.Views { field.ProcessKey (new KeyEvent (Key.D1, new KeyModifiers { })); - Assert.Equal ("--(1___)--", field.Text); + Assert.Equal ("--(1___)--", field.Provider.DisplayText); + Assert.Equal ("--(1 )--", field.Text); Assert.False (field.IsValid); } @@ -66,7 +69,7 @@ namespace Terminal.Gui.Views { { // * // 0123456789 - var field = new TextValidateField ("--(0000)--") { + var field = new TextValidateField (new NetMaskedTextProvider ("--(0000)--")) { TextAlignment = TextAlignment.Centered, Width = 20 }; @@ -74,7 +77,9 @@ namespace Terminal.Gui.Views { field.ProcessKey (new KeyEvent (Key.End, new KeyModifiers { })); field.ProcessKey (new KeyEvent (Key.D1, new KeyModifiers { })); - Assert.Equal ("--(___1)--", field.Text); + + Assert.Equal ("--(___1)--", field.Provider.DisplayText); + Assert.Equal ("--( 1)--", field.Text); Assert.False (field.IsValid); } @@ -83,7 +88,7 @@ namespace Terminal.Gui.Views { { // * // 0123456789 - var field = new TextValidateField ("--(0000)--") { + var field = new TextValidateField (new NetMaskedTextProvider ("--(0000)--")) { TextAlignment = TextAlignment.Centered, Width = 20 }; @@ -93,7 +98,8 @@ namespace Terminal.Gui.Views { } field.ProcessKey (new KeyEvent (Key.D1, new KeyModifiers { })); - Assert.Equal ("--(___1)--", field.Text); + Assert.Equal ("--(___1)--", field.Provider.DisplayText); + Assert.Equal ("--( 1)--", field.Text); Assert.False (field.IsValid); } @@ -102,7 +108,7 @@ namespace Terminal.Gui.Views { { // * // 0123456789 - var field = new TextValidateField ("--(0000)--") { + var field = new TextValidateField (new NetMaskedTextProvider ("--(0000)--")) { TextAlignment = TextAlignment.Centered, Width = 20 }; @@ -112,7 +118,8 @@ namespace Terminal.Gui.Views { } field.ProcessKey (new KeyEvent (Key.D1, new KeyModifiers { })); - Assert.Equal ("--(1___)--", field.Text); + Assert.Equal ("--(1___)--", field.Provider.DisplayText); + Assert.Equal ("--(1 )--", field.Text); Assert.False (field.IsValid); } @@ -121,21 +128,21 @@ namespace Terminal.Gui.Views { { // **** // 0123456789 - var field = new TextValidateField ("--(0000)--") { + var field = new TextValidateField (new NetMaskedTextProvider ("--(0000)--")) { TextAlignment = TextAlignment.Centered, Width = 20 }; field.ProcessKey (new KeyEvent (Key.D1, new KeyModifiers { })); - Assert.Equal ("--(1___)--", field.Text); + Assert.Equal ("--(1 )--", field.Text); Assert.False (field.IsValid); field.ProcessKey (new KeyEvent (Key.D2, new KeyModifiers { })); - Assert.Equal ("--(12__)--", field.Text); + Assert.Equal ("--(12 )--", field.Text); Assert.False (field.IsValid); field.ProcessKey (new KeyEvent (Key.D3, new KeyModifiers { })); - Assert.Equal ("--(123_)--", field.Text); + Assert.Equal ("--(123 )--", field.Text); Assert.False (field.IsValid); field.ProcessKey (new KeyEvent (Key.D4, new KeyModifiers { })); @@ -148,25 +155,25 @@ namespace Terminal.Gui.Views { { // ** ** // 01234567890 - var field = new TextValidateField ("--(00-00)--") { + var field = new TextValidateField (new NetMaskedTextProvider ("--(00-00)--")) { TextAlignment = TextAlignment.Centered, Width = 20 }; field.ProcessKey (new KeyEvent (Key.D1, new KeyModifiers { })); - Assert.Equal ("--(1_-__)--", field.Text); + Assert.Equal ("--(1_-__)--", field.Provider.DisplayText); Assert.False (field.IsValid); field.ProcessKey (new KeyEvent (Key.D2, new KeyModifiers { })); - Assert.Equal ("--(12-__)--", field.Text); + Assert.Equal ("--(12-__)--", field.Provider.DisplayText); Assert.False (field.IsValid); field.ProcessKey (new KeyEvent (Key.D3, new KeyModifiers { })); - Assert.Equal ("--(12-3_)--", field.Text); + Assert.Equal ("--(12-3_)--", field.Provider.DisplayText); Assert.False (field.IsValid); field.ProcessKey (new KeyEvent (Key.D4, new KeyModifiers { })); - Assert.Equal ("--(12-34)--", field.Text); + Assert.Equal ("--(12-34)--", field.Provider.DisplayText); Assert.True (field.IsValid); } @@ -176,7 +183,7 @@ namespace Terminal.Gui.Views { { // **** // 0123456789 - var field = new TextValidateField ("--(0000)--", "1234") { + var field = new TextValidateField (new NetMaskedTextProvider ("--(0000)--") { Text = "1234" }) { TextAlignment = TextAlignment.Centered, Width = 20 }; @@ -190,12 +197,13 @@ namespace Terminal.Gui.Views { { // **** // 0123456789 - var field = new TextValidateField ("--(0000)--", "12345") { + var field = new TextValidateField (new NetMaskedTextProvider ("--(0000)--") { Text = "12345" }) { TextAlignment = TextAlignment.Centered, Width = 20 }; - Assert.Equal ("--(____)--", field.Text); + Assert.Equal ("--(____)--", field.Provider.DisplayText); + Assert.Equal ("--( )--", field.Text); Assert.False (field.IsValid); } @@ -204,12 +212,13 @@ namespace Terminal.Gui.Views { { // **** // 0123456789 - var field = new TextValidateField ("--(0000)--", "123") { + var field = new TextValidateField (new NetMaskedTextProvider ("--(0000)--") { Text = "123" }) { TextAlignment = TextAlignment.Centered, Width = 20 }; - Assert.Equal ("--(123_)--", field.Text); + Assert.Equal ("--(123_)--", field.Provider.DisplayText); + Assert.Equal ("--(123 )--", field.Text); Assert.False (field.IsValid); } @@ -218,19 +227,19 @@ namespace Terminal.Gui.Views { { // **** // 0123456789 - var field = new TextValidateField ("--(0000)--", "1234") { + var field = new TextValidateField (new NetMaskedTextProvider ("--(0000)--") { Text = "1234" }) { TextAlignment = TextAlignment.Centered, Width = 20 }; - Assert.Equal ("--(1234)--", field.Text); + Assert.Equal ("--(1234)--", field.Provider.DisplayText); Assert.True (field.IsValid); field.ProcessKey (new KeyEvent (Key.Delete, new KeyModifiers { })); field.ProcessKey (new KeyEvent (Key.Delete, new KeyModifiers { })); field.ProcessKey (new KeyEvent (Key.Delete, new KeyModifiers { })); - Assert.Equal ("--(_234)--", field.Text); + Assert.Equal ("--(_234)--", field.Provider.DisplayText); Assert.False (field.IsValid); field.ProcessKey (new KeyEvent (Key.CursorRight, new KeyModifiers { })); @@ -240,7 +249,7 @@ namespace Terminal.Gui.Views { field.ProcessKey (new KeyEvent (Key.Delete, new KeyModifiers { })); field.ProcessKey (new KeyEvent (Key.Delete, new KeyModifiers { })); - Assert.Equal ("--(_2_4)--", field.Text); + Assert.Equal ("--(_2_4)--", field.Provider.DisplayText); Assert.False (field.IsValid); } @@ -249,7 +258,7 @@ namespace Terminal.Gui.Views { { // **** // 0123456789 - var field = new TextValidateField ("--(0000)--", "1234") { + var field = new TextValidateField (new NetMaskedTextProvider ("--(0000)--") { Text = "1234" }) { TextAlignment = TextAlignment.Centered, Width = 20 }; @@ -258,20 +267,20 @@ namespace Terminal.Gui.Views { field.ProcessKey (new KeyEvent (Key.End, new KeyModifiers { })); field.ProcessKey (new KeyEvent (Key.Backspace, new KeyModifiers { })); - Assert.Equal ("--(12_4)--", field.Text); + Assert.Equal ("--(12_4)--", field.Provider.DisplayText); Assert.False (field.IsValid); field.ProcessKey (new KeyEvent (Key.Backspace, new KeyModifiers { })); - Assert.Equal ("--(1__4)--", field.Text); + Assert.Equal ("--(1__4)--", field.Provider.DisplayText); Assert.False (field.IsValid); field.ProcessKey (new KeyEvent (Key.Backspace, new KeyModifiers { })); - Assert.Equal ("--(___4)--", field.Text); + Assert.Equal ("--(___4)--", field.Provider.DisplayText); Assert.False (field.IsValid); // One more field.ProcessKey (new KeyEvent (Key.Backspace, new KeyModifiers { })); - Assert.Equal ("--(___4)--", field.Text); + Assert.Equal ("--(___4)--", field.Provider.DisplayText); Assert.False (field.IsValid); } @@ -281,7 +290,7 @@ namespace Terminal.Gui.Views { { // **** // 0123456789 - var field = new TextValidateField ("--(0000)--") { + var field = new TextValidateField (new NetMaskedTextProvider ("--(0000)--")) { TextAlignment = TextAlignment.Left, Width = 30 }; @@ -297,7 +306,7 @@ namespace Terminal.Gui.Views { { // **** // 0123456789 - var field = new TextValidateField ("--(0000)--") { + var field = new TextValidateField (new NetMaskedTextProvider ("--(0000)--")) { TextAlignment = TextAlignment.Left, Width = 30 }; @@ -306,8 +315,9 @@ namespace Terminal.Gui.Views { Assert.Equal ("--(1234)--", field.Text); Assert.True (field.IsValid); - field.Mask = "--------(00000000)--------"; - Assert.Equal ("--------(1234____)--------", field.Text); + var provider = field.Provider as NetMaskedTextProvider; + provider.Mask = "--------(00000000)--------"; + Assert.Equal ("--------(1234____)--------", field.Provider.DisplayText); Assert.False (field.IsValid); } @@ -316,21 +326,21 @@ namespace Terminal.Gui.Views { { // **** // 0123456789 - var field = new TextValidateField ("--(0000)--") { + var field = new TextValidateField (new NetMaskedTextProvider ("--(0000)--")) { TextAlignment = TextAlignment.Left, Width = 30 }; field.ProcessKey (new KeyEvent (Key.D1, new KeyModifiers { })); - Assert.Equal ("--(1___)--", field.Text); + Assert.Equal ("--(1___)--", field.Provider.DisplayText); Assert.False (field.IsValid); - field.MouseEvent (new MouseEvent () { X = 25, Flags = MouseFlags.Button1Clicked }); + field.MouseEvent (new MouseEvent () { X = 25, Flags = MouseFlags.Button1Pressed }); field.ProcessKey (new KeyEvent (Key.D1, new KeyModifiers { })); - Assert.Equal ("--(1__1)--", field.Text); + Assert.Equal ("--(1__1)--", field.Provider.DisplayText); Assert.False (field.IsValid); } } @@ -344,13 +354,10 @@ namespace Terminal.Gui.Views { [Fact] public void Input_Without_Validate_On_Input () { - var field = new TextValidateField ("^[0-9][0-9][0-9]$") { + var field = new TextValidateField (new TextRegexProvider ("^[0-9][0-9][0-9]$") { ValidateOnInput = false }) { Width = 20 }; - // Let you input - field.Provider.ValidateOnInput = false; - field.ProcessKey (new KeyEvent (Key.D1, new KeyModifiers { })); Assert.Equal ("1", field.Text); Assert.False (field.IsValid); @@ -371,7 +378,7 @@ namespace Terminal.Gui.Views { [Fact] public void Input_With_Validate_On_Input_Set_Text () { - var field = new TextValidateField ("^[0-9][0-9][0-9]$") { + var field = new TextValidateField (new TextRegexProvider ("^[0-9][0-9][0-9]$")) { Width = 20 }; @@ -391,22 +398,10 @@ namespace Terminal.Gui.Views { Assert.True (field.IsValid); } - [Fact] - public void Empty_Mask_Does_Not_Validate () - { - var field = new TextValidateField () { - Width = 20 - }; - - field.ProcessKey (new KeyEvent (Key.D1, new KeyModifiers ())); - Assert.Equal ("", field.Text); - Assert.False (field.IsValid); - } - [Fact] public void Text_With_All_Charset () { - var field = new TextValidateField ("^[0-9][0-9][0-9]$") { + var field = new TextValidateField (new TextRegexProvider ("^[0-9][0-9][0-9]$")) { Width = 20 }; @@ -432,7 +427,7 @@ namespace Terminal.Gui.Views { } try { - var field = new TextValidateField (mask) { + var field = new TextValidateField (new TextRegexProvider (mask)) { Width = 20 }; } catch (RegexParseException ex) { @@ -447,7 +442,7 @@ namespace Terminal.Gui.Views { { // Range 0 to 1000 // Accepts 001 too. - var field = new TextValidateField ("^[0-9]?[0-9]?[0-9]|1000$") { + var field = new TextValidateField (new TextRegexProvider ("^[0-9]?[0-9]?[0-9]|1000$")) { Width = 20 }; @@ -473,12 +468,10 @@ namespace Terminal.Gui.Views { public void End_Key_End_Of_Input () { // Exactly 5 numbers - var field = new TextValidateField ("^[0-9]{5}$") { + var field = new TextValidateField (new TextRegexProvider ("^[0-9]{5}$") { ValidateOnInput = false }) { Width = 20 }; - field.Provider.ValidateOnInput = false; - for (int i = 0; i < 4; i++) { field.ProcessKey (new KeyEvent (Key.D0, new KeyModifiers { })); } @@ -508,11 +501,10 @@ namespace Terminal.Gui.Views { [Fact] public void Right_Key_Stops_At_End_And_Insert () { - var field = new TextValidateField ("^[0-9][0-9][0-9]$") { + var field = new TextValidateField (new TextRegexProvider ("^[0-9][0-9][0-9]$") { ValidateOnInput = false }) { TextAlignment = TextAlignment.Centered, Width = 20 }; - field.Provider.ValidateOnInput = false; field.Text = "123"; @@ -533,11 +525,10 @@ namespace Terminal.Gui.Views { [Fact] public void Left_Key_Stops_At_Start_And_Insert () { - var field = new TextValidateField ("^[0-9][0-9][0-9]$") { + var field = new TextValidateField (new TextRegexProvider ("^[0-9][0-9][0-9]$") { ValidateOnInput = false }) { TextAlignment = TextAlignment.Centered, Width = 20 }; - field.Provider.ValidateOnInput = false; field.Text = "123";