mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2025-12-26 15:57:56 +01:00
TextValidateField reimplementation without generics (#1261)
* TextValidateField reimplementation without generic * mask change in catalog
This commit is contained in:
committed by
GitHub
parent
a8628e7c28
commit
028e7e5bf2
@@ -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 ();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
|
||||
|
||||
Reference in New Issue
Block a user