TextValidateField reimplementation without generics (#1261)

* TextValidateField reimplementation without generic

* mask change in catalog
This commit is contained in:
José Miguel Perricone
2021-04-28 12:42:33 -03:00
committed by GitHub
parent a8628e7c28
commit 028e7e5bf2
3 changed files with 147 additions and 221 deletions

View File

@@ -81,16 +81,14 @@ namespace Terminal.Gui {
bool IsValid { get; }
/// <summary>
/// Set the input text, and get the formatted string for display.
/// Set the input text and get the current value.
/// </summary>
ustring Text { get; set; }
/// <summary>
/// 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.
/// </summary>
ustring Mask { get; set; }
ustring DisplayText { get; }
}
//////////////////////////////////////////////////////////////////////////////
@@ -107,22 +105,27 @@ namespace Terminal.Gui {
/// </summary>
public class NetMaskedTextProvider : ITextValidateProvider {
MaskedTextProvider provider;
string text;
/// <summary>
/// Empty Constructor
/// </summary>
public NetMaskedTextProvider () { }
public NetMaskedTextProvider (string mask)
{
Mask = mask;
}
///<inheritdoc/>
/// <summary>
/// Mask property
/// </summary>
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 {
///<inheritdoc/>
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 {
///<inheritdoc/>
public bool Fixed => true;
///<inheritdoc/>
public ustring DisplayText => provider.ToDisplayString ();
///<inheritdoc/>
public int Cursor (int pos)
{
@@ -212,20 +217,25 @@ namespace Terminal.Gui {
public class TextRegexProvider : ITextValidateProvider {
Regex regex;
List<Rune> text;
List<Rune> mask;
List<Rune> pattern;
/// <summary>
/// Empty Constructor
/// Empty Constructor.
/// </summary>
public TextRegexProvider () { }
public TextRegexProvider (string pattern)
{
Pattern = pattern;
}
///<inheritdoc/>
public ustring Mask {
/// <summary>
/// Regex pattern property.
/// </summary>
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 {
}
}
///<inheritdoc/>
public ustring DisplayText => Text;
///<inheritdoc/>
public bool IsValid {
get {
@@ -257,6 +270,7 @@ namespace Terminal.Gui {
/// </summary>
public bool ValidateOnInput { get; set; } = true;
bool Validate (List<Rune> text)
{
var match = regex.Match (ustring.Make (text).ToString ());
@@ -340,7 +354,7 @@ namespace Terminal.Gui {
/// </summary>
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 {
/// <summary>
/// Text field that validates input through a <see cref="ITextValidateProvider"/>
/// </summary>
/// <typeparam name="T"></typeparam>
public class TextValidateField<T> : View, ITextValidateProvider where T : class {
public class TextValidateField : View {
ITextValidateProvider provider;
int cursorPosition = 0;
/// <summary>
/// Initializes a new instance of the <see cref="TextValidateField{T}"/> class using <see cref="LayoutStyle.Computed"/> positioning.
/// Initializes a new instance of the <see cref="TextValidateField"/> class using <see cref="LayoutStyle.Computed"/> positioning.
/// </summary>
public TextValidateField ()
public TextValidateField () : this (null)
{
}
/// <summary>
/// Initializes a new instance of the <see cref="TextValidateField{T}"></see> class using <see cref="LayoutStyle.Computed"/> positioning.
/// Initializes a new instance of the <see cref="TextValidateField"/> class using <see cref="LayoutStyle.Computed"/> positioning.
/// </summary>
/// <param name="mask">Mask</param>
public TextValidateField (ustring mask) : this (mask, ustring.Empty) { }
/// <summary>
/// Initializes a new instance of the <see cref="TextValidateField{T}"/> class using <see cref="LayoutStyle.Computed"/> positioning.
/// </summary>
/// <param name="mask"></param>
/// <param name="text">Initial Value</param>
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;
}
/// <summary>
/// Get the Provider
/// Provider
/// </summary>
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 ();
}
}
///<inheritdoc/>
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;
}
/// <summary>
@@ -424,22 +446,6 @@ namespace Terminal.Gui {
}
}
/// <summary>
/// Mask
/// </summary>
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;
}
/// <summary>
/// Set Cursor position to <paramref name="pos" />.
/// </summary>
/// <param name="pos"></param>
/// <returns>Return first valid position.</returns>
public int Cursor (int pos)
{
return provider.Cursor (pos);
}
/// <summary>
/// First valid position before <paramref name="pos" />.
/// </summary>
/// <param name="pos"></param>
/// <returns>New cursor position if any, otherwise returns <paramref name="pos" /></returns>
public int CursorLeft (int pos)
{
return provider.CursorLeft (pos);
}
/// <summary>
/// First valid position after <paramref name="pos" />.
/// </summary>
/// <param name="pos">Current position.</param>
/// <returns>New cursor position if any, otherwise returns <paramref name="pos" /></returns>
public int CursorRight (int pos)
{
return provider.CursorRight (pos);
}
/// <summary>
/// Find the first valid character position.
/// </summary>
/// <returns>New cursor position.</returns>
public int CursorStart ()
{
return provider.CursorStart ();
}
/// <summary>
/// Find the last valid character position.
/// </summary>
/// <returns>New cursor position.</returns>
public int CursorEnd ()
{
return provider.CursorEnd ();
}
/// <summary>
/// Deletes the current character in <paramref name="pos" />.
/// </summary>
/// <param name="pos"></param>
/// <returns>true if the character was successfully removed, otherwise false.</returns>
public bool Delete (int pos)
{
return provider.Delete (pos);
}
/// <summary>
/// Insert character <paramref name="ch" /> in position <paramref name="pos" />.
/// </summary>
/// <param name="ch"></param>
/// <param name="pos"></param>
/// <returns>true if the character was successfully inserted, otherwise false.</returns>
public bool InsertAt (char ch, int pos)
{
return provider.InsertAt (ch, pos);
}
/// <summary>
/// This property returns true if the input is valid.
/// </summary>
@@ -696,7 +633,5 @@ namespace Terminal.Gui {
return provider.IsValid;
}
}
public bool Fixed => throw new NotImplementedException ();
}
}

View File

@@ -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<NetMaskedTextProvider> ("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<TextRegexProvider> ("^([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);
}

View File

@@ -15,14 +15,15 @@ namespace Terminal.Gui.Views {
{
// *
// 0123456789
var field = new TextValidateField<NetMaskedTextProvider> ("--(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<NetMaskedTextProvider> ("--(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<NetMaskedTextProvider> ("--(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<NetMaskedTextProvider> ("--(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<NetMaskedTextProvider> ("--(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<NetMaskedTextProvider> ("--(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<NetMaskedTextProvider> ("--(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<NetMaskedTextProvider> ("--(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<NetMaskedTextProvider> ("--(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<NetMaskedTextProvider> ("--(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<NetMaskedTextProvider> ("--(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<NetMaskedTextProvider> ("--(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<NetMaskedTextProvider> ("--(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<NetMaskedTextProvider> ("--(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<NetMaskedTextProvider> ("--(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<NetMaskedTextProvider> ("--(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<TextRegexProvider> ("^[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<TextRegexProvider> ("^[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<TextRegexProvider> () {
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<TextRegexProvider> ("^[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<TextRegexProvider> (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<TextRegexProvider> ("^[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<TextRegexProvider> ("^[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<TextRegexProvider> ("^[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<TextRegexProvider> ("^[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";