Files
Terminal.Gui/UnitTests/View/FrameTests.cs
BDisp 713b2c4725 Fixes #92. Remove dependency on ustring. (#2620)
* Remove NStack and replace ustring to string.

* Add unit test and improving some code.

* Adjust code and fix all unit tests errors.

* Add XML Document and move the Rune folder into the Text folder.

* Improve unit tests with byte array on DecodeRune and DecodeLastRune.

* Fix unit test.

* 😂Code review

* Reduce unit tests code.

* Change StringExtensions.Make to StringExtensions.ToString and added some more unit tests.

* Fix merge errors.

* Remove GetTextWidth and calls replaced with StringExtensions.GetColumns.

* Hack to use UseSystemConsole passed in the command line arguments.

* Revert "Hack to use UseSystemConsole passed in the command line arguments."

This reverts commit b74d11c786.

* Remove Application.UseSystemConsole from the config file.

* Fix errors related by removing UseSystemConsole from the config file.

* Fixes #2633. DecodeEscSeq throw an exception if cki is null.

* Fix an exception if SelectedItem is -1.

* Set SelectedItem to 0 and remove unnecessary ToString.

* Using a unique ToString method for Rune and other for byte.

* Fix a bug where a wider rune is added with only a width of 1.

* Force the SelectedGlyph is the one that was typed after jumpList is executed.

* Added more InlineData to RuneTests.

* Reducing significantly the code by using Theory attribute in the TextFormatterTests.

* Override PositionCursor to handle the CharMap cursor position.

* Fix merge errors.

* Minor tweaks to API docs

---------

Co-authored-by: Tig Kindel <tig@users.noreply.github.com>
2023-05-20 19:35:32 +02:00

607 lines
14 KiB
C#

using System.Text;
using System;
using System.Collections.Generic;
using System.Xml.Linq;
using Xunit;
using Xunit.Abstractions;
//using GraphViewTests = Terminal.Gui.Views.GraphViewTests;
// Alias Console to MockConsole so we don't accidentally use Console
using Console = Terminal.Gui.FakeConsole;
namespace Terminal.Gui.ViewTests {
public class FrameTests {
readonly ITestOutputHelper output;
public FrameTests (ITestOutputHelper output)
{
this.output = output;
}
[Fact]
public void GetFramesThickness ()
{
var view = new View ();
Assert.Equal (Thickness.Empty, view.GetFramesThickness ());
view.Margin.Thickness = new Thickness (1);
Assert.Equal (new Thickness (1), view.GetFramesThickness ());
view.Border.Thickness = new Thickness (1);
Assert.Equal (new Thickness (2), view.GetFramesThickness ());
view.Padding.Thickness = new Thickness (1);
Assert.Equal (new Thickness (3), view.GetFramesThickness ());
view.Padding.Thickness = new Thickness (2);
Assert.Equal (new Thickness (4), view.GetFramesThickness ());
view.Padding.Thickness = new Thickness (1, 2, 3, 4);
Assert.Equal (new Thickness (3, 4, 5, 6), view.GetFramesThickness ());
view.Margin.Thickness = new Thickness (1, 2, 3, 4);
Assert.Equal (new Thickness (3, 5, 7, 9), view.GetFramesThickness ());
}
[Theory, AutoInitShutdown]
[InlineData (0)]
[InlineData (1)]
[InlineData (2)]
[InlineData (3)]
public void Border_With_Title_Size_Height (int height)
{
var win = new Window () {
Title = "1234",
Width = Dim.Fill (),
Height = Dim.Fill ()
};
var rs = Application.Begin (win);
bool firstIteration = false;
((FakeDriver)Application.Driver).SetBufferSize (20, height);
Application.RunMainLoopIteration (ref rs, true, ref firstIteration);
var expected = string.Empty;
switch (height) {
case 0:
//Assert.Equal (new Rect (0, 0, 17, 0), subview.Frame);
expected = @"
";
break;
case 1:
//Assert.Equal (new Rect (0, 0, 17, 0), subview.Frame);
expected = @"
────────────────────";
break;
case 2:
//Assert.Equal (new Rect (0, 0, 17, 1), subview.Frame);
expected = @"
┌┤1234├────────────┐
└──────────────────┘
";
break;
case 3:
//Assert.Equal (new Rect (0, 0, 17, 2), subview.Frame);
expected = @"
┌┤1234├────────────┐
│ │
└──────────────────┘
";
break;
}
_ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
}
[Theory, AutoInitShutdown]
[InlineData (0)]
[InlineData (1)]
[InlineData (2)]
[InlineData (3)]
[InlineData (4)]
[InlineData (5)]
[InlineData (6)]
[InlineData (7)]
[InlineData (8)]
[InlineData (9)]
[InlineData (10)]
public void Border_With_Title_Size_Width (int width)
{
var win = new Window () {
Title = "1234",
Width = Dim.Fill (),
Height = Dim.Fill ()
};
var rs = Application.Begin (win);
bool firstIteration = false;
((FakeDriver)Application.Driver).SetBufferSize (width, 3);
Application.RunMainLoopIteration (ref rs, true, ref firstIteration);
var expected = string.Empty;
switch (width) {
case 1:
//Assert.Equal (new Rect (0, 0, 17, 0), subview.Frame);
expected = @"
│";
break;
case 2:
//Assert.Equal (new Rect (0, 0, 17, 1), subview.Frame);
expected = @"
┌┐
││
└┘";
break;
case 3:
//Assert.Equal (new Rect (0, 0, 17, 2), subview.Frame);
expected = @"
┌─┐
│ │
└─┘
";
break;
case 4:
//Assert.Equal (new Rect (0, 0, 17, 3), subview.Frame);
expected = @"
┌┤├┐
│ │
└──┘";
break;
case 5:
//Assert.Equal (new Rect (0, 0, 17, 3), subview.Frame);
expected = @"
┌┤1├┐
│ │
└───┘";
break;
case 6:
//Assert.Equal (new Rect (0, 0, 17, 3), subview.Frame);
expected = @"
┌┤12├┐
│ │
└────┘";
break;
case 7:
//Assert.Equal (new Rect (0, 0, 17, 3), subview.Frame);
expected = @"
┌┤123├┐
│ │
└─────┘";
break;
case 8:
//Assert.Equal (new Rect (0, 0, 17, 3), subview.Frame);
expected = @"
┌┤1234├┐
│ │
└──────┘";
break;
case 9:
//Assert.Equal (new Rect (0, 0, 17, 3), subview.Frame);
expected = @"
┌┤1234├─┐
│ │
└───────┘";
break;
case 10:
//Assert.Equal (new Rect (0, 0, 17, 3), subview.Frame);
expected = @"
┌┤1234├──┐
│ │
└────────┘";
break;
}
_ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
}
[Fact, AutoInitShutdown]
public void NoSuperView ()
{
var win = new Window () {
Width = Dim.Fill (),
Height = Dim.Fill ()
};
var rs = Application.Begin (win);
bool firstIteration = false;
((FakeDriver)Application.Driver).SetBufferSize (3, 3);
Application.RunMainLoopIteration (ref rs, true, ref firstIteration);
var expected = @"
┌─┐
│ │
└─┘";
_ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
}
[Fact, AutoInitShutdown]
public void HasSuperView ()
{
Application.Top.BorderStyle = LineStyle.Double;
var frame = new FrameView () {
Width = Dim.Fill (),
Height = Dim.Fill ()
};
Application.Top.Add (frame);
var rs = Application.Begin (Application.Top);
bool firstIteration = false;
((FakeDriver)Application.Driver).SetBufferSize (5, 5);
Application.RunMainLoopIteration (ref rs, true, ref firstIteration);
var expected = @"
╔═══╗
║┌─┐║
║│ │║
║└─┘║
╚═══╝";
_ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
}
[Fact, AutoInitShutdown]
public void HasSuperView_Title ()
{
Application.Top.BorderStyle = LineStyle.Double;
var frame = new FrameView () {
Title = "1234",
Width = Dim.Fill (),
Height = Dim.Fill ()
};
Application.Top.Add (frame);
var rs = Application.Begin (Application.Top);
bool firstIteration = false;
((FakeDriver)Application.Driver).SetBufferSize (10, 4);
Application.RunMainLoopIteration (ref rs, true, ref firstIteration);
var expected = @"
╔════════╗
║┌┤1234├┐║
║└──────┘║
╚════════╝";
_ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
}
[Theory, AutoInitShutdown]
[InlineData (0)]
[InlineData (1)]
[InlineData (2)]
[InlineData (3)]
[InlineData (4)]
[InlineData (5)]
[InlineData (6)]
[InlineData (7)]
[InlineData (8)]
[InlineData (9)]
[InlineData (10)]
public void Border_With_Title_Border_Double_Thickness_Top_Two_Size_Width (int width)
{
var win = new Window () {
Title = "1234",
Width = Dim.Fill (),
Height = Dim.Fill (),
BorderStyle = LineStyle.Double,
};
win.Border.Thickness.Top = 2;
var rs = Application.Begin (win);
bool firstIteration = false;
((FakeDriver)Application.Driver).SetBufferSize (width, 4);
Application.RunMainLoopIteration (ref rs, true, ref firstIteration);
var expected = string.Empty;
switch (width) {
case 1:
Assert.Equal (new Rect (0, 0, 1, 4), win.Frame);
expected = @"
║";
break;
case 2:
Assert.Equal (new Rect (0, 0, 2, 4), win.Frame);
expected = @"
╔╗
║║
╚╝";
break;
case 3:
Assert.Equal (new Rect (0, 0, 3, 4), win.Frame);
expected = @"
╔═╗
║ ║
╚═╝";
break;
case 4:
Assert.Equal (new Rect (0, 0, 4, 4), win.Frame);
expected = @"
╒╕
╔╛╘╗
║ ║
╚══╝";
break;
case 5:
Assert.Equal (new Rect (0, 0, 5, 4), win.Frame);
expected = @"
╒═╕
╔╛1╘╗
║ ║
╚═══╝";
break;
case 6:
Assert.Equal (new Rect (0, 0, 6, 4), win.Frame);
expected = @"
╒══╕
╔╛12╘╗
║ ║
╚════╝";
break;
case 7:
Assert.Equal (new Rect (0, 0, 7, 4), win.Frame);
expected = @"
╒═══╕
╔╛123╘╗
║ ║
╚═════╝";
break;
case 8:
Assert.Equal (new Rect (0, 0, 8, 4), win.Frame);
expected = @"
╒════╕
╔╛1234╘╗
║ ║
╚══════╝";
break;
case 9:
Assert.Equal (new Rect (0, 0, 9, 4), win.Frame);
expected = @"
╒════╕
╔╛1234╘═╗
║ ║
╚═══════╝";
break;
case 10:
Assert.Equal (new Rect (0, 0, 10, 4), win.Frame);
expected = @"
╒════╕
╔╛1234╘══╗
║ ║
╚════════╝";
break;
}
_ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
}
[Theory, AutoInitShutdown]
[InlineData (0)]
[InlineData (1)]
[InlineData (2)]
[InlineData (3)]
[InlineData (4)]
[InlineData (5)]
[InlineData (6)]
[InlineData (7)]
[InlineData (8)]
[InlineData (9)]
[InlineData (10)]
public void Border_With_Title_Border_Double_Thickness_Top_Three_Size_Width (int width)
{
var win = new Window () {
Title = "1234",
Width = Dim.Fill (),
Height = Dim.Fill (),
BorderStyle = LineStyle.Double,
};
win.Border.Thickness.Top = 3;
var rs = Application.Begin (win);
bool firstIteration = false;
((FakeDriver)Application.Driver).SetBufferSize (width, 4);
Application.RunMainLoopIteration (ref rs, true, ref firstIteration);
var expected = string.Empty;
switch (width) {
case 1:
Assert.Equal (new Rect (0, 0, 1, 4), win.Frame);
expected = @"
║";
break;
case 2:
Assert.Equal (new Rect (0, 0, 2, 4), win.Frame);
expected = @"
╔╗
║║
╚╝";
break;
case 3:
Assert.Equal (new Rect (0, 0, 3, 4), win.Frame);
expected = @"
╔═╗
║ ║
╚═╝";
break;
case 4:
Assert.Equal (new Rect (0, 0, 4, 4), win.Frame);
expected = @"
╒╕
╔╡╞╗
║╘╛║
╚══╝";
break;
case 5:
Assert.Equal (new Rect (0, 0, 5, 4), win.Frame);
expected = @"
╒═╕
╔╡1╞╗
║╘═╛║
╚═══╝";
break;
case 6:
Assert.Equal (new Rect (0, 0, 6, 4), win.Frame);
expected = @"
╒══╕
╔╡12╞╗
║╘══╛║
╚════╝";
break;
case 7:
Assert.Equal (new Rect (0, 0, 7, 4), win.Frame);
expected = @"
╒═══╕
╔╡123╞╗
║╘═══╛║
╚═════╝";
break;
case 8:
Assert.Equal (new Rect (0, 0, 8, 4), win.Frame);
expected = @"
╒════╕
╔╡1234╞╗
║╘════╛║
╚══════╝";
break;
case 9:
Assert.Equal (new Rect (0, 0, 9, 4), win.Frame);
expected = @"
╒════╕
╔╡1234╞═╗
║╘════╛ ║
╚═══════╝";
break;
case 10:
Assert.Equal (new Rect (0, 0, 10, 4), win.Frame);
expected = @"
╒════╕
╔╡1234╞══╗
║╘════╛ ║
╚════════╝";
break;
}
_ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
}
[Theory, AutoInitShutdown]
[InlineData (0)]
[InlineData (1)]
[InlineData (2)]
[InlineData (3)]
[InlineData (4)]
[InlineData (5)]
[InlineData (6)]
[InlineData (7)]
[InlineData (8)]
[InlineData (9)]
[InlineData (10)]
public void Border_With_Title_Border_Double_Thickness_Top_Four_Size_Width (int width)
{
var win = new Window () {
Title = "1234",
Width = Dim.Fill (),
Height = Dim.Fill (),
BorderStyle = LineStyle.Double,
};
win.Border.Thickness.Top = 4;
var rs = Application.Begin (win);
bool firstIteration = false;
((FakeDriver)Application.Driver).SetBufferSize (width, 5);
Application.RunMainLoopIteration (ref rs, true, ref firstIteration);
var expected = string.Empty;
switch (width) {
case 1:
Assert.Equal (new Rect (0, 0, 1, 5), win.Frame);
expected = @"
║";
break;
case 2:
Assert.Equal (new Rect (0, 0, 2, 5), win.Frame);
expected = @"
╔╗
║║
╚╝";
break;
case 3:
Assert.Equal (new Rect (0, 0, 3, 5), win.Frame);
expected = @"
╔═╗
║ ║
╚═╝";
break;
case 4:
Assert.Equal (new Rect (0, 0, 4, 5), win.Frame);
expected = @"
╒╕
╔╡╞╗
║╘╛║
╚══╝";
break;
case 5:
Assert.Equal (new Rect (0, 0, 5, 5), win.Frame);
expected = @"
╒═╕
╔╡1╞╗
║╘═╛║
╚═══╝";
break;
case 6:
Assert.Equal (new Rect (0, 0, 6, 5), win.Frame);
expected = @"
╒══╕
╔╡12╞╗
║╘══╛║
╚════╝";
break;
case 7:
Assert.Equal (new Rect (0, 0, 7, 5), win.Frame);
expected = @"
╒═══╕
╔╡123╞╗
║╘═══╛║
╚═════╝";
break;
case 8:
Assert.Equal (new Rect (0, 0, 8, 5), win.Frame);
expected = @"
╒════╕
╔╡1234╞╗
║╘════╛║
╚══════╝";
break;
case 9:
Assert.Equal (new Rect (0, 0, 9, 5), win.Frame);
expected = @"
╒════╕
╔╡1234╞═╗
║╘════╛ ║
╚═══════╝";
break;
case 10:
Assert.Equal (new Rect (0, 0, 10, 5), win.Frame);
expected = @"
╒════╕
╔╡1234╞══╗
║╘════╛ ║
╚════════╝";
break;
}
_ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
}
}
}