Added caption tests

This commit is contained in:
Thomas
2023-04-01 12:57:46 +01:00
parent 38b890ea88
commit 0b6856ad88

View File

@@ -1,6 +1,7 @@
using NStack;
using System;
using System.Globalization;
using System.Linq;
using System.Reflection;
using Xunit;
using Xunit.Abstractions;
@@ -1440,5 +1441,106 @@ Les Miśerables", output);
TestHelpers.AssertDriverContentsWithFrameAre (@"
ắ", output);
}
[Fact, AutoInitShutdown]
public void CaptionedTextField_RendersCaption_WhenNotFocused ()
{
var tf = GetTextFieldsInView();
tf.Redraw(tf.Bounds);
TestHelpers.AssertDriverContentsAre("",output);
// Caption has no effect when focused
tf.Caption = "Enter txt";
Assert.True(tf.HasFocus);
tf.Redraw(tf.Bounds);
TestHelpers.AssertDriverContentsAre("",output);
Application.Driver.SendKeys('\t',ConsoleKey.Tab,false,false,false);
Assert.False(tf.HasFocus);
tf.Redraw(tf.Bounds);
TestHelpers.AssertDriverContentsAre("Enter txt",output);
}
[Theory, AutoInitShutdown]
[InlineData("blah")]
[InlineData(" ")]
public void CaptionedTextField_DoNotRenderCaption_WhenTextPresent (string content)
{
var tf = GetTextFieldsInView();
tf.Redraw(tf.Bounds);
TestHelpers.AssertDriverContentsAre("",output);
tf.Caption = "Enter txt";
Application.Driver.SendKeys('\t',ConsoleKey.Tab,false,false,false);
// Caption should appear when not focused and no text
Assert.False(tf.HasFocus);
tf.Redraw(tf.Bounds);
TestHelpers.AssertDriverContentsAre("Enter txt",output);
// but disapear when text is added
tf.Text = content;
tf.Redraw(tf.Bounds);
TestHelpers.AssertDriverContentsAre(content,output);
}
[Fact, AutoInitShutdown]
public void CaptionedTextField_DoesNotOverspillBounds_Unicode ()
{
var caption = "Mise" + Char.ConvertFromUtf32 (Int32.Parse ("0301", NumberStyles.HexNumber)) + "rables";
Assert.Equal(11,caption.Length);
Assert.Equal(10,caption.Sum(c => Rune.ColumnWidth(c)));
var tf = GetTextFieldsInView();
tf.Caption = caption;
Application.Driver.SendKeys('\t',ConsoleKey.Tab,false,false,false);
Assert.False(tf.HasFocus);
tf.Redraw(tf.Bounds);
TestHelpers.AssertDriverContentsAre("Misérables",output);
}
[Theory, AutoInitShutdown]
[InlineData("0123456789","0123456789")]
[InlineData("01234567890","0123456789")]
public void CaptionedTextField_DoesNotOverspillBounds (string caption, string expectedRender)
{
var tf = GetTextFieldsInView();
// Caption has no effect when focused
tf.Caption = caption;
Application.Driver.SendKeys('\t',ConsoleKey.Tab,false,false,false);
Assert.False(tf.HasFocus);
tf.Redraw(tf.Bounds);
TestHelpers.AssertDriverContentsAre(expectedRender,output);
}
private TextField GetTextFieldsInView ()
{
var tf = new TextField{
Width = 10
};
var tf2 = new TextField{
Y = 1,
Width = 10
};
var top = Application.Top;
top.Add (tf);
top.Add (tf2);
Application.Begin (top);
Assert.Same(tf,top.Focused);
return tf;
}
}
}