mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2026-01-01 16:59:35 +01:00
Improves the TabView minimum size and added more unit tests.
This commit is contained in:
@@ -98,7 +98,7 @@ namespace Terminal.Gui {
|
|||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initialzies a <see cref="TabView"/> class using <see cref="LayoutStyle.Computed"/> layout.
|
/// Initializes a <see cref="TabView"/> class using <see cref="LayoutStyle.Computed"/> layout.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public TabView () : base ()
|
public TabView () : base ()
|
||||||
{
|
{
|
||||||
@@ -182,7 +182,7 @@ namespace Terminal.Gui {
|
|||||||
|
|
||||||
if (Style.ShowBorder) {
|
if (Style.ShowBorder) {
|
||||||
|
|
||||||
// How muc space do we need to leave at the bottom to show the tabs
|
// How much space do we need to leave at the bottom to show the tabs
|
||||||
int spaceAtBottom = Math.Max (0, GetTabHeight (false) - 1);
|
int spaceAtBottom = Math.Max (0, GetTabHeight (false) - 1);
|
||||||
int startAtY = Math.Max (0, GetTabHeight (true) - 1);
|
int startAtY = Math.Max (0, GetTabHeight (true) - 1);
|
||||||
|
|
||||||
@@ -347,8 +347,10 @@ namespace Terminal.Gui {
|
|||||||
var maxWidth = Math.Max (0, Math.Min (bounds.Width - 3, MaxTabTextWidth));
|
var maxWidth = Math.Max (0, Math.Min (bounds.Width - 3, MaxTabTextWidth));
|
||||||
|
|
||||||
// if tab view is width <= 3 don't render any tabs
|
// if tab view is width <= 3 don't render any tabs
|
||||||
if (maxWidth == 0)
|
if (maxWidth == 0) {
|
||||||
yield break;
|
yield return new TabToRender (i, tab, string.Empty, Equals (SelectedTab, tab), 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (tabTextWidth > maxWidth) {
|
if (tabTextWidth > maxWidth) {
|
||||||
text = tab.Text.ToString ().Substring (0, (int)maxWidth);
|
text = tab.Text.ToString ().Substring (0, (int)maxWidth);
|
||||||
@@ -412,7 +414,7 @@ namespace Terminal.Gui {
|
|||||||
|
|
||||||
// if the currently selected tab is no longer a member of Tabs
|
// if the currently selected tab is no longer a member of Tabs
|
||||||
if (SelectedTab == null || !Tabs.Contains (SelectedTab)) {
|
if (SelectedTab == null || !Tabs.Contains (SelectedTab)) {
|
||||||
// select the tab closest to the one that disapeared
|
// select the tab closest to the one that disappeared
|
||||||
var toSelect = Math.Max (idx - 1, 0);
|
var toSelect = Math.Max (idx - 1, 0);
|
||||||
|
|
||||||
if (toSelect < Tabs.Count) {
|
if (toSelect < Tabs.Count) {
|
||||||
@@ -657,7 +659,7 @@ namespace Terminal.Gui {
|
|||||||
Driver.AddRune (Driver.LeftArrow);
|
Driver.AddRune (Driver.LeftArrow);
|
||||||
}
|
}
|
||||||
|
|
||||||
// if there are mmore tabs to the right not visible
|
// if there are more tabs to the right not visible
|
||||||
if (ShouldDrawRightScrollIndicator (tabLocations)) {
|
if (ShouldDrawRightScrollIndicator (tabLocations)) {
|
||||||
Move (width - 1, y);
|
Move (width - 1, y);
|
||||||
|
|
||||||
|
|||||||
@@ -242,7 +242,7 @@ namespace Terminal.Gui.Views {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact, AutoInitShutdown]
|
[Fact, AutoInitShutdown]
|
||||||
public void TestThinTabView_WithLongNames ()
|
public void ShowTopLine_True_TabsOnBottom_False_TestThinTabView_WithLongNames ()
|
||||||
{
|
{
|
||||||
var tv = GetTabView (out var tab1, out var tab2, false);
|
var tv = GetTabView (out var tab1, out var tab2, false);
|
||||||
tv.Width = 10;
|
tv.Width = 10;
|
||||||
@@ -257,23 +257,34 @@ namespace Terminal.Gui.Views {
|
|||||||
|
|
||||||
tv.Redraw (tv.Bounds);
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
GraphViewTests.AssertDriverContentsAre (@"
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
┌──┐
|
┌──┐
|
||||||
│12│13
|
│12│13
|
||||||
│ └─────┐
|
│ └─────┐
|
||||||
│hi │
|
│hi │
|
||||||
└────────┘", output);
|
└────────┘", output);
|
||||||
|
|
||||||
|
tv.SelectedTab = tab2;
|
||||||
|
|
||||||
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
|
┌──┐
|
||||||
|
12│13│
|
||||||
|
┌──┘ └──┐
|
||||||
|
│hi2 │
|
||||||
|
└────────┘", output);
|
||||||
|
|
||||||
|
tv.SelectedTab = tab1;
|
||||||
// Test first tab name too long
|
// Test first tab name too long
|
||||||
tab1.Text = "12345678910";
|
tab1.Text = "12345678910";
|
||||||
tab2.Text = "13";
|
tab2.Text = "13";
|
||||||
|
|
||||||
tv.Redraw (tv.Bounds);
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
GraphViewTests.AssertDriverContentsAre (@"
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
┌───────┐
|
┌───────┐
|
||||||
│1234567│
|
│1234567│
|
||||||
│ └►
|
│ └►
|
||||||
│hi │
|
│hi │
|
||||||
└────────┘", output);
|
└────────┘", output);
|
||||||
@@ -282,9 +293,9 @@ namespace Terminal.Gui.Views {
|
|||||||
tv.SelectedTab = tab2;
|
tv.SelectedTab = tab2;
|
||||||
tv.Redraw (tv.Bounds);
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
GraphViewTests.AssertDriverContentsAre (@"
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
┌──┐
|
┌──┐
|
||||||
│13│
|
│13│
|
||||||
◄ └─────┐
|
◄ └─────┐
|
||||||
│hi2 │
|
│hi2 │
|
||||||
└────────┘", output);
|
└────────┘", output);
|
||||||
@@ -296,16 +307,94 @@ namespace Terminal.Gui.Views {
|
|||||||
|
|
||||||
tv.Redraw (tv.Bounds);
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
GraphViewTests.AssertDriverContentsAre (@"
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
┌───────┐
|
┌───────┐
|
||||||
│abcdefg│
|
│abcdefg│
|
||||||
◄ └┐
|
◄ └┐
|
||||||
│hi2 │
|
│hi2 │
|
||||||
└────────┘", output);
|
└────────┘", output);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact, AutoInitShutdown]
|
[Fact, AutoInitShutdown]
|
||||||
public void TestTabView_Width4 ()
|
public void ShowTopLine_False_TabsOnBottom_False_TestThinTabView_WithLongNames ()
|
||||||
|
{
|
||||||
|
var tv = GetTabView (out var tab1, out var tab2, false);
|
||||||
|
tv.Width = 10;
|
||||||
|
tv.Height = 5;
|
||||||
|
tv.Style = new TabView.TabStyle { ShowTopLine = false };
|
||||||
|
tv.ApplyStyleChanges ();
|
||||||
|
|
||||||
|
// Ensures that the tab bar subview gets the bounds of the parent TabView
|
||||||
|
tv.LayoutSubviews ();
|
||||||
|
|
||||||
|
// Test two tab names that fit
|
||||||
|
tab1.Text = "12";
|
||||||
|
tab2.Text = "13";
|
||||||
|
|
||||||
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
|
│12│13
|
||||||
|
│ └─────┐
|
||||||
|
│hi │
|
||||||
|
│ │
|
||||||
|
└────────┘", output);
|
||||||
|
|
||||||
|
|
||||||
|
tv.SelectedTab = tab2;
|
||||||
|
|
||||||
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
|
12│13│
|
||||||
|
┌──┘ └──┐
|
||||||
|
│hi2 │
|
||||||
|
│ │
|
||||||
|
└────────┘", output);
|
||||||
|
|
||||||
|
tv.SelectedTab = tab1;
|
||||||
|
|
||||||
|
// Test first tab name too long
|
||||||
|
tab1.Text = "12345678910";
|
||||||
|
tab2.Text = "13";
|
||||||
|
|
||||||
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
|
│1234567│
|
||||||
|
│ └►
|
||||||
|
│hi │
|
||||||
|
│ │
|
||||||
|
└────────┘", output);
|
||||||
|
|
||||||
|
//switch to tab2
|
||||||
|
tv.SelectedTab = tab2;
|
||||||
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
|
│13│
|
||||||
|
◄ └─────┐
|
||||||
|
│hi2 │
|
||||||
|
│ │
|
||||||
|
└────────┘", output);
|
||||||
|
|
||||||
|
|
||||||
|
// now make both tabs too long
|
||||||
|
tab1.Text = "12345678910";
|
||||||
|
tab2.Text = "abcdefghijklmnopq";
|
||||||
|
|
||||||
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
|
│abcdefg│
|
||||||
|
◄ └┐
|
||||||
|
│hi2 │
|
||||||
|
│ │
|
||||||
|
└────────┘", output);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact, AutoInitShutdown]
|
||||||
|
public void ShowTopLine_True_TabsOnBottom_False_TestTabView_Width4 ()
|
||||||
{
|
{
|
||||||
var tv = GetTabView (out _, out _, false);
|
var tv = GetTabView (out _, out _, false);
|
||||||
tv.Width = 4;
|
tv.Width = 4;
|
||||||
@@ -314,16 +403,36 @@ namespace Terminal.Gui.Views {
|
|||||||
|
|
||||||
tv.Redraw (tv.Bounds);
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
GraphViewTests.AssertDriverContentsAre (@"
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
┌─┐
|
┌─┐
|
||||||
│T│
|
│T│
|
||||||
│ └►
|
│ └►
|
||||||
│hi│
|
│hi│
|
||||||
└──┘", output);
|
└──┘", output);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact, AutoInitShutdown]
|
[Fact, AutoInitShutdown]
|
||||||
public void TestTabView_Width3 ()
|
public void ShowTopLine_False_TabsOnBottom_False_TestTabView_Width4 ()
|
||||||
|
{
|
||||||
|
var tv = GetTabView (out _, out _, false);
|
||||||
|
tv.Width = 4;
|
||||||
|
tv.Height = 5;
|
||||||
|
tv.Style = new TabView.TabStyle { ShowTopLine = false };
|
||||||
|
tv.ApplyStyleChanges ();
|
||||||
|
tv.LayoutSubviews ();
|
||||||
|
|
||||||
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
|
│T│
|
||||||
|
│ └►
|
||||||
|
│hi│
|
||||||
|
│ │
|
||||||
|
└──┘", output);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact, AutoInitShutdown]
|
||||||
|
public void ShowTopLine_True_TabsOnBottom_False_TestTabView_Width3 ()
|
||||||
{
|
{
|
||||||
var tv = GetTabView (out _, out _, false);
|
var tv = GetTabView (out _, out _, false);
|
||||||
tv.Width = 3;
|
tv.Width = 3;
|
||||||
@@ -332,12 +441,325 @@ namespace Terminal.Gui.Views {
|
|||||||
|
|
||||||
tv.Redraw (tv.Bounds);
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
GraphViewTests.AssertDriverContentsAre (@"
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
┌─┐
|
┌┐
|
||||||
|
││
|
||||||
|
│└►
|
||||||
│h│
|
│h│
|
||||||
└─┘", output);
|
└─┘", output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact, AutoInitShutdown]
|
||||||
|
public void ShowTopLine_False_TabsOnBottom_False_TestTabView_Width3 ()
|
||||||
|
{
|
||||||
|
var tv = GetTabView (out _, out _, false);
|
||||||
|
tv.Width = 3;
|
||||||
|
tv.Height = 5;
|
||||||
|
tv.Style = new TabView.TabStyle { ShowTopLine = false };
|
||||||
|
tv.ApplyStyleChanges ();
|
||||||
|
tv.LayoutSubviews ();
|
||||||
|
|
||||||
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
|
││
|
||||||
|
│└►
|
||||||
|
│h│
|
||||||
|
│ │
|
||||||
|
└─┘", output);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact, AutoInitShutdown]
|
||||||
|
public void ShowTopLine_True_TabsOnBottom_True_TestThinTabView_WithLongNames ()
|
||||||
|
{
|
||||||
|
var tv = GetTabView (out var tab1, out var tab2, false);
|
||||||
|
tv.Width = 10;
|
||||||
|
tv.Height = 5;
|
||||||
|
tv.Style = new TabView.TabStyle { TabsOnBottom = true };
|
||||||
|
tv.ApplyStyleChanges ();
|
||||||
|
|
||||||
|
// Ensures that the tab bar subview gets the bounds of the parent TabView
|
||||||
|
tv.LayoutSubviews ();
|
||||||
|
|
||||||
|
// Test two tab names that fit
|
||||||
|
tab1.Text = "12";
|
||||||
|
tab2.Text = "13";
|
||||||
|
|
||||||
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
|
┌────────┐
|
||||||
|
│hi │
|
||||||
|
│ ┌─────┘
|
||||||
|
│12│13
|
||||||
|
└──┘ ", output);
|
||||||
|
|
||||||
|
|
||||||
|
// Test first tab name too long
|
||||||
|
tab1.Text = "12345678910";
|
||||||
|
tab2.Text = "13";
|
||||||
|
|
||||||
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
|
┌────────┐
|
||||||
|
│hi │
|
||||||
|
│ ┌►
|
||||||
|
│1234567│
|
||||||
|
└───────┘ ", output);
|
||||||
|
|
||||||
|
//switch to tab2
|
||||||
|
tv.SelectedTab = tab2;
|
||||||
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
|
┌────────┐
|
||||||
|
│hi2 │
|
||||||
|
◄ ┌─────┘
|
||||||
|
│13│
|
||||||
|
└──┘ ", output);
|
||||||
|
|
||||||
|
|
||||||
|
// now make both tabs too long
|
||||||
|
tab1.Text = "12345678910";
|
||||||
|
tab2.Text = "abcdefghijklmnopq";
|
||||||
|
|
||||||
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
|
┌────────┐
|
||||||
|
│hi2 │
|
||||||
|
◄ ┌┘
|
||||||
|
│abcdefg│
|
||||||
|
└───────┘ ", output);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact, AutoInitShutdown]
|
||||||
|
public void ShowTopLine_False_TabsOnBottom_True_TestThinTabView_WithLongNames ()
|
||||||
|
{
|
||||||
|
var tv = GetTabView (out var tab1, out var tab2, false);
|
||||||
|
tv.Width = 10;
|
||||||
|
tv.Height = 5;
|
||||||
|
tv.Style = new TabView.TabStyle { ShowTopLine = false, TabsOnBottom = true };
|
||||||
|
tv.ApplyStyleChanges ();
|
||||||
|
|
||||||
|
// Ensures that the tab bar subview gets the bounds of the parent TabView
|
||||||
|
tv.LayoutSubviews ();
|
||||||
|
|
||||||
|
// Test two tab names that fit
|
||||||
|
tab1.Text = "12";
|
||||||
|
tab2.Text = "13";
|
||||||
|
|
||||||
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
|
┌────────┐
|
||||||
|
│hi │
|
||||||
|
│ │
|
||||||
|
│ ┌─────┘
|
||||||
|
│12│13 ", output);
|
||||||
|
|
||||||
|
|
||||||
|
tv.SelectedTab = tab2;
|
||||||
|
|
||||||
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
|
┌────────┐
|
||||||
|
│hi2 │
|
||||||
|
│ │
|
||||||
|
└──┐ ┌──┘
|
||||||
|
12│13│ ", output);
|
||||||
|
|
||||||
|
tv.SelectedTab = tab1;
|
||||||
|
|
||||||
|
// Test first tab name too long
|
||||||
|
tab1.Text = "12345678910";
|
||||||
|
tab2.Text = "13";
|
||||||
|
|
||||||
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
|
┌────────┐
|
||||||
|
│hi │
|
||||||
|
│ │
|
||||||
|
│ ┌►
|
||||||
|
│1234567│ ", output);
|
||||||
|
|
||||||
|
//switch to tab2
|
||||||
|
tv.SelectedTab = tab2;
|
||||||
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
|
┌────────┐
|
||||||
|
│hi2 │
|
||||||
|
│ │
|
||||||
|
◄ ┌─────┘
|
||||||
|
│13│ ", output);
|
||||||
|
|
||||||
|
|
||||||
|
// now make both tabs too long
|
||||||
|
tab1.Text = "12345678910";
|
||||||
|
tab2.Text = "abcdefghijklmnopq";
|
||||||
|
|
||||||
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
|
┌────────┐
|
||||||
|
│hi2 │
|
||||||
|
│ │
|
||||||
|
◄ ┌┘
|
||||||
|
│abcdefg│ ", output);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact, AutoInitShutdown]
|
||||||
|
public void ShowTopLine_True_TabsOnBottom_True_TestTabView_Width4 ()
|
||||||
|
{
|
||||||
|
var tv = GetTabView (out _, out _, false);
|
||||||
|
tv.Width = 4;
|
||||||
|
tv.Height = 5;
|
||||||
|
tv.Style = new TabView.TabStyle { TabsOnBottom = true };
|
||||||
|
tv.ApplyStyleChanges ();
|
||||||
|
tv.LayoutSubviews ();
|
||||||
|
|
||||||
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
|
┌──┐
|
||||||
|
│hi│
|
||||||
|
│ ┌►
|
||||||
|
│T│
|
||||||
|
└─┘ ", output);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact, AutoInitShutdown]
|
||||||
|
public void ShowTopLine_False_TabsOnBottom_True_TestTabView_Width4 ()
|
||||||
|
{
|
||||||
|
var tv = GetTabView (out _, out _, false);
|
||||||
|
tv.Width = 4;
|
||||||
|
tv.Height = 5;
|
||||||
|
tv.Style = new TabView.TabStyle { ShowTopLine = false, TabsOnBottom = true };
|
||||||
|
tv.ApplyStyleChanges ();
|
||||||
|
tv.LayoutSubviews ();
|
||||||
|
|
||||||
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
|
┌──┐
|
||||||
|
│hi│
|
||||||
|
│ │
|
||||||
|
│ ┌►
|
||||||
|
│T│ ", output);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact, AutoInitShutdown]
|
||||||
|
public void ShowTopLine_True_TabsOnBottom_True_TestTabView_Width3 ()
|
||||||
|
{
|
||||||
|
var tv = GetTabView (out _, out _, false);
|
||||||
|
tv.Width = 3;
|
||||||
|
tv.Height = 5;
|
||||||
|
tv.Style = new TabView.TabStyle { TabsOnBottom = true };
|
||||||
|
tv.ApplyStyleChanges ();
|
||||||
|
tv.LayoutSubviews ();
|
||||||
|
|
||||||
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
|
┌─┐
|
||||||
|
│h│
|
||||||
|
│┌►
|
||||||
|
││
|
||||||
|
└┘ ", output);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact, AutoInitShutdown]
|
||||||
|
public void ShowTopLine_False_TabsOnBottom_True_TestTabView_Width3 ()
|
||||||
|
{
|
||||||
|
var tv = GetTabView (out _, out _, false);
|
||||||
|
tv.Width = 3;
|
||||||
|
tv.Height = 5;
|
||||||
|
tv.Style = new TabView.TabStyle { ShowTopLine = false, TabsOnBottom = true };
|
||||||
|
tv.ApplyStyleChanges ();
|
||||||
|
tv.LayoutSubviews ();
|
||||||
|
|
||||||
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
|
┌─┐
|
||||||
|
│h│
|
||||||
|
│ │
|
||||||
|
│┌►
|
||||||
|
││ ", output);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact, AutoInitShutdown]
|
||||||
|
public void ShowTopLine_True_TabsOnBottom_False_With_Unicode ()
|
||||||
|
{
|
||||||
|
var tv = GetTabView (out var tab1, out var tab2, false);
|
||||||
|
tv.Width = 20;
|
||||||
|
tv.Height = 5;
|
||||||
|
|
||||||
|
tv.LayoutSubviews ();
|
||||||
|
|
||||||
|
tab1.Text = "Tab0";
|
||||||
|
tab2.Text = "Les Mise" + Char.ConvertFromUtf32 (Int32.Parse ("0301", NumberStyles.HexNumber)) + "rables";
|
||||||
|
|
||||||
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
|
┌────┐
|
||||||
|
│Tab0│
|
||||||
|
│ └─────────────►
|
||||||
|
│hi │
|
||||||
|
└──────────────────┘", output);
|
||||||
|
|
||||||
|
tv.SelectedTab = tab2;
|
||||||
|
|
||||||
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
|
┌──────────────┐
|
||||||
|
│Les Misérables│
|
||||||
|
◄ └───┐
|
||||||
|
│hi2 │
|
||||||
|
└──────────────────┘", output);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact, AutoInitShutdown]
|
||||||
|
public void ShowTopLine_True_TabsOnBottom_True_With_Unicode ()
|
||||||
|
{
|
||||||
|
var tv = GetTabView (out var tab1, out var tab2, false);
|
||||||
|
tv.Width = 20;
|
||||||
|
tv.Height = 5;
|
||||||
|
tv.Style = new TabView.TabStyle { TabsOnBottom = true };
|
||||||
|
tv.ApplyStyleChanges ();
|
||||||
|
|
||||||
|
tv.LayoutSubviews ();
|
||||||
|
|
||||||
|
tab1.Text = "Tab0";
|
||||||
|
tab2.Text = "Les Mise" + Char.ConvertFromUtf32 (Int32.Parse ("0301", NumberStyles.HexNumber)) + "rables";
|
||||||
|
|
||||||
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
|
┌──────────────────┐
|
||||||
|
│hi │
|
||||||
|
│ ┌─────────────►
|
||||||
|
│Tab0│
|
||||||
|
└────┘ ", output);
|
||||||
|
|
||||||
|
tv.SelectedTab = tab2;
|
||||||
|
|
||||||
|
tv.Redraw (tv.Bounds);
|
||||||
|
|
||||||
|
GraphViewTests.AssertDriverContentsWithFrameAre (@"
|
||||||
|
┌──────────────────┐
|
||||||
|
│hi2 │
|
||||||
|
◄ ┌───┘
|
||||||
|
│Les Misérables│
|
||||||
|
└──────────────┘ ", output);
|
||||||
|
}
|
||||||
|
|
||||||
private void InitFakeDriver ()
|
private void InitFakeDriver ()
|
||||||
{
|
{
|
||||||
var driver = new FakeDriver ();
|
var driver = new FakeDriver ();
|
||||||
|
|||||||
Reference in New Issue
Block a user