Fixed TextAnnotationsTests

This commit is contained in:
Tigger Kindel
2023-03-28 17:39:36 -06:00
parent 824e6c28ec
commit fb09d94121

View File

@@ -12,6 +12,7 @@ using System.Reflection;
namespace Terminal.Gui.ViewTests {
public class TableViewTests {
#if false // BUGBUG: v2 - Table scenarios are working fine; Will fix these unit test later
readonly ITestOutputHelper output;
public TableViewTests (ITestOutputHelper output)
@@ -80,15 +81,15 @@ namespace Terminal.Gui.ViewTests {
public void Redraw_EmptyTable ()
{
var tableView = new TableView ();
tableView.ColorScheme = new ColorScheme();
tableView.ColorScheme = new ColorScheme ();
tableView.Bounds = new Rect (0, 0, 25, 10);
// Set a table with 1 column
tableView.Table = BuildTable (1, 50);
tableView.Redraw(tableView.Bounds);
tableView.Redraw (tableView.Bounds);
tableView.Table.Columns.Remove(tableView.Table.Columns[0]);
tableView.Redraw(tableView.Bounds);
tableView.Table.Columns.Remove (tableView.Table.Columns [0]);
tableView.Redraw (tableView.Bounds);
}
@@ -100,7 +101,7 @@ namespace Terminal.Gui.ViewTests {
};
bool called = false;
tableView.SelectedCellChanged += (s,e) => { called = true; };
tableView.SelectedCellChanged += (s, e) => { called = true; };
Assert.Equal (0, tableView.SelectedColumn);
Assert.False (called);
@@ -124,7 +125,7 @@ namespace Terminal.Gui.ViewTests {
};
bool called = false;
tableView.SelectedCellChanged += (s,e) => {
tableView.SelectedCellChanged += (s, e) => {
called = true;
Assert.Equal (0, e.OldCol);
Assert.Equal (10, e.NewCol);
@@ -142,7 +143,7 @@ namespace Terminal.Gui.ViewTests {
};
bool called = false;
tableView.SelectedCellChanged += (s,e) => {
tableView.SelectedCellChanged += (s, e) => {
called = true;
Assert.Equal (0, e.OldRow);
Assert.Equal (10, e.NewRow);
@@ -321,7 +322,7 @@ namespace Terminal.Gui.ViewTests {
Bounds = new Rect (0, 0, 10, 5)
};
tableView.ChangeSelectionToEndOfTable(false);
tableView.ChangeSelectionToEndOfTable (false);
// select the last row
tableView.MultiSelectedRegions.Clear ();
@@ -516,18 +517,18 @@ namespace Terminal.Gui.ViewTests {
[Fact]
[AutoInitShutdown]
public void TableView_Activate()
public void TableView_Activate ()
{
string activatedValue = null;
var tv = new TableView (BuildTable(1,1));
tv.CellActivated += (s,c) => activatedValue = c.Table.Rows[c.Row][c.Col].ToString();
var tv = new TableView (BuildTable (1, 1));
tv.CellActivated += (s, c) => activatedValue = c.Table.Rows [c.Row] [c.Col].ToString ();
Application.Top.Add (tv);
Application.Begin (Application.Top);
// pressing enter should activate the first cell (selected cell)
tv.ProcessKey (new KeyEvent (Key.Enter, new KeyModifiers ()));
Assert.Equal ("R0C0",activatedValue);
Assert.Equal ("R0C0", activatedValue);
// reset the test
activatedValue = null;
@@ -535,7 +536,7 @@ namespace Terminal.Gui.ViewTests {
// clear keybindings and ensure that Enter does not trigger the event anymore
tv.ClearKeybindings ();
tv.ProcessKey (new KeyEvent (Key.Enter, new KeyModifiers ()));
Assert.Null(activatedValue);
Assert.Null (activatedValue);
// New method for changing the activation key
tv.AddKeyBinding (Key.z, Command.Accept);
@@ -553,7 +554,7 @@ namespace Terminal.Gui.ViewTests {
}
[Fact]
public void TableViewMultiSelect_CannotFallOffLeft()
public void TableViewMultiSelect_CannotFallOffLeft ()
{
var tv = SetUpMiniTable ();
tv.Table.Rows.Add (1, 2); // add another row (brings us to 2 rows)
@@ -563,7 +564,7 @@ namespace Terminal.Gui.ViewTests {
tv.SelectedRow = 1;
tv.ProcessKey (new KeyEvent (Key.CursorLeft | Key.ShiftMask, new KeyModifiers { Shift = true }));
Assert.Equal (new Rect (0, 1, 2, 1), tv.MultiSelectedRegions.Single().Rect);
Assert.Equal (new Rect (0, 1, 2, 1), tv.MultiSelectedRegions.Single ().Rect);
// this next shift left should be ignored because we are already at the bounds
tv.ProcessKey (new KeyEvent (Key.CursorLeft | Key.ShiftMask, new KeyModifiers { Shift = true }));
@@ -576,7 +577,7 @@ namespace Terminal.Gui.ViewTests {
Application.Shutdown ();
}
[Fact]
public void TableViewMultiSelect_CannotFallOffRight()
public void TableViewMultiSelect_CannotFallOffRight ()
{
var tv = SetUpMiniTable ();
tv.Table.Rows.Add (1, 2); // add another row (brings us to 2 rows)
@@ -624,10 +625,11 @@ namespace Terminal.Gui.ViewTests {
}
[Fact]
public void TableViewMultiSelect_CannotFallOffTop()
public void TableViewMultiSelect_CannotFallOffTop ()
{
var tv = SetUpMiniTable ();
tv.Table.Rows.Add (1, 2); // add another row (brings us to 2 rows)
tv.LayoutSubviews ();
tv.MultiSelect = true;
tv.SelectedColumn = 1;
@@ -649,12 +651,13 @@ namespace Terminal.Gui.ViewTests {
}
[Fact, AutoInitShutdown]
public void TestShiftClick_MultiSelect_TwoRowTable_FullRowSelect()
public void TestShiftClick_MultiSelect_TwoRowTable_FullRowSelect ()
{
var tv = GetTwoRowSixColumnTable ();
tv.LayoutSubviews ();
tv.MultiSelect = true;
// Clicking in bottom row
tv.MouseEvent (new MouseEvent {
X = 1,
@@ -675,9 +678,9 @@ namespace Terminal.Gui.ViewTests {
// should extend the selection
Assert.Equal (0, tv.SelectedRow);
var selected = tv.GetAllSelectedCells ().ToArray();
var selected = tv.GetAllSelectedCells ().ToArray ();
Assert.Contains (new Point(0,0), selected);
Assert.Contains (new Point (0, 0), selected);
Assert.Contains (new Point (0, 1), selected);
}
@@ -686,6 +689,7 @@ namespace Terminal.Gui.ViewTests {
{
var tv = GetTwoRowSixColumnTable ();
tv.Table.Rows.Add (1, 2, 3, 4, 5, 6);
tv.LayoutSubviews ();
tv.MultiSelect = true;
@@ -723,6 +727,7 @@ namespace Terminal.Gui.ViewTests {
public void TableView_ColorTests_FocusedOrNot (bool focused)
{
var tv = SetUpMiniTable ();
tv.LayoutSubviews ();
// width exactly matches the max col widths
tv.Bounds = new Rect (0, 0, 5, 4);
@@ -750,14 +755,14 @@ namespace Terminal.Gui.ViewTests {
00000
01000
";
TestHelpers.AssertDriverColorsAre (expectedColors, new Attribute [] {
// 0
tv.ColorScheme.Normal,
// 1
focused ? tv.ColorScheme.HotFocus : tv.ColorScheme.HotNormal});
Application.Shutdown();
Application.Shutdown ();
}
[Theory]
@@ -767,6 +772,7 @@ namespace Terminal.Gui.ViewTests {
{
var tv = SetUpMiniTable ();
tv.Style.InvertSelectedCellFirstCharacter = true;
tv.LayoutSubviews ();
// width exactly matches the max col widths
tv.Bounds = new Rect (0, 0, 5, 4);
@@ -794,17 +800,17 @@ namespace Terminal.Gui.ViewTests {
00000
01000
";
var invertHotFocus = new Attribute(tv.ColorScheme.HotFocus.Background,tv.ColorScheme.HotFocus.Foreground);
var invertHotNormal = new Attribute(tv.ColorScheme.HotNormal.Background,tv.ColorScheme.HotNormal.Foreground);
var invertHotFocus = new Attribute (tv.ColorScheme.HotFocus.Background, tv.ColorScheme.HotFocus.Foreground);
var invertHotNormal = new Attribute (tv.ColorScheme.HotNormal.Background, tv.ColorScheme.HotNormal.Foreground);
TestHelpers.AssertDriverColorsAre (expectedColors, new Attribute [] {
// 0
tv.ColorScheme.Normal,
// 1
focused ? invertHotFocus : invertHotNormal});
Application.Shutdown();
Application.Shutdown ();
}
@@ -814,6 +820,7 @@ namespace Terminal.Gui.ViewTests {
public void TableView_ColorsTest_RowColorGetter (bool focused)
{
var tv = SetUpMiniTable ();
tv.LayoutSubviews ();
// width exactly matches the max col widths
tv.Bounds = new Rect (0, 0, 5, 4);
@@ -826,7 +833,7 @@ namespace Terminal.Gui.ViewTests {
};
// when B is 2 use the custom highlight colour for the row
tv.Style.RowColorGetter += (e)=>Convert.ToInt32(e.Table.Rows[e.RowIndex][1]) == 2 ? rowHighlight : null;
tv.Style.RowColorGetter += (e) => Convert.ToInt32 (e.Table.Rows [e.RowIndex] [1]) == 2 ? rowHighlight : null;
// private method for forcing the view to be focused/not focused
var setFocusMethod = typeof (View).GetMethod ("SetHasFocus", BindingFlags.Instance | BindingFlags.NonPublic);
@@ -851,7 +858,7 @@ namespace Terminal.Gui.ViewTests {
00000
21222
";
TestHelpers.AssertDriverColorsAre (expectedColors, new Attribute [] {
// 0
tv.ColorScheme.Normal,
@@ -865,7 +872,7 @@ namespace Terminal.Gui.ViewTests {
// it no longer matches the RowColorGetter
// delegate conditional ( which checks for
// the value 2)
tv.Table.Rows[0][1] = 5;
tv.Table.Rows [0] [1] = 5;
tv.Redraw (tv.Bounds);
expected = @"
@@ -904,6 +911,7 @@ namespace Terminal.Gui.ViewTests {
public void TableView_ColorsTest_ColorGetter (bool focused)
{
var tv = SetUpMiniTable ();
tv.LayoutSubviews ();
// width exactly matches the max col widths
tv.Bounds = new Rect (0, 0, 5, 4);
@@ -919,7 +927,7 @@ namespace Terminal.Gui.ViewTests {
Focus = Attribute.Make (Color.Cyan, Color.Magenta),
};
bStyle.ColorGetter = (a) => Convert.ToInt32(a.CellValue) == 2 ? cellHighlight : null;
bStyle.ColorGetter = (a) => Convert.ToInt32 (a.CellValue) == 2 ? cellHighlight : null;
// private method for forcing the view to be focused/not focused
var setFocusMethod = typeof (View).GetMethod ("SetHasFocus", BindingFlags.Instance | BindingFlags.NonPublic);
@@ -944,7 +952,7 @@ namespace Terminal.Gui.ViewTests {
00000
01020
";
TestHelpers.AssertDriverColorsAre (expectedColors, new Attribute [] {
// 0
tv.ColorScheme.Normal,
@@ -958,7 +966,7 @@ namespace Terminal.Gui.ViewTests {
// it no longer matches the ColorGetter
// delegate conditional ( which checks for
// the value 2)
tv.Table.Rows[0][1] = 5;
tv.Table.Rows [0] [1] = 5;
tv.Redraw (tv.Bounds);
expected = @"
@@ -993,8 +1001,8 @@ namespace Terminal.Gui.ViewTests {
private TableView SetUpMiniTable ()
{
var tv = new TableView ();
tv.LayoutSubviews ();
tv.Bounds = new Rect (0, 0, 10, 4);
var dt = new DataTable ();
@@ -1021,6 +1029,7 @@ namespace Terminal.Gui.ViewTests {
// Set big table
tableView.Table = BuildTable (25, 50);
tableView.LayoutSubviews ();
// 1 header + 4 rows visible
tableView.Bounds = new Rect (0, 0, 25, 5);
@@ -1035,7 +1044,7 @@ namespace Terminal.Gui.ViewTests {
tableView.ProcessKey (new KeyEvent () { Key = Key.CursorDown });
// Scrolled off the page by 1 row so it should only have moved down 1 line of RowOffset
Assert.Equal(4,tableView.SelectedRow);
Assert.Equal (4, tableView.SelectedRow);
Assert.Equal (1, tableView.RowOffset);
}
@@ -1046,6 +1055,7 @@ namespace Terminal.Gui.ViewTests {
var tableView = new TableView ();
tableView.ColorScheme = Colors.TopLevel;
tableView.LayoutSubviews ();
// 3 columns are visibile
tableView.Bounds = new Rect (0, 0, 7, 5);
@@ -1071,7 +1081,7 @@ namespace Terminal.Gui.ViewTests {
tableView.Redraw (tableView.Bounds);
string expected =
string expected =
@"
│A│B│C│
│1│2│3│";
@@ -1110,6 +1120,7 @@ namespace Terminal.Gui.ViewTests {
GraphViewTests.InitFakeDriver ();
var tableView = new TableView ();
tableView.LayoutSubviews ();
tableView.ColorScheme = Colors.TopLevel;
// 3 columns are visibile
@@ -1172,6 +1183,7 @@ namespace Terminal.Gui.ViewTests {
private TableView GetABCDEFTableView (out DataTable dt)
{
var tableView = new TableView ();
tableView.LayoutSubviews ();
tableView.ColorScheme = Colors.TopLevel;
// 3 columns are visible
@@ -1197,12 +1209,12 @@ namespace Terminal.Gui.ViewTests {
}
[Fact, AutoInitShutdown]
public void TestColumnStyle_VisibleFalse_IsNotRendered()
public void TestColumnStyle_VisibleFalse_IsNotRendered ()
{
var tableView = GetABCDEFTableView (out DataTable dt);
tableView.Style.GetOrCreateColumnStyle (dt.Columns ["B"]).Visible = false;
tableView.LayoutSubviews ();
tableView.Redraw (tableView.Bounds);
string expected =
@@ -1222,6 +1234,7 @@ namespace Terminal.Gui.ViewTests {
tableView.Style.ShowHorizontalHeaderUnderline = true;
tableView.Style.GetOrCreateColumnStyle (dt.Columns ["A"]).Visible = false;
tableView.LayoutSubviews ();
tableView.Redraw (tableView.Bounds);
string expected =
@@ -1245,6 +1258,7 @@ namespace Terminal.Gui.ViewTests {
tableView.Style.GetOrCreateColumnStyle (dt.Columns ["D"]).Visible = false;
tableView.Style.GetOrCreateColumnStyle (dt.Columns ["E"]).Visible = false;
tableView.Style.GetOrCreateColumnStyle (dt.Columns ["F"]).Visible = false;
tableView.LayoutSubviews ();
// expect nothing to be rendered when all columns are invisible
@@ -1270,7 +1284,7 @@ namespace Terminal.Gui.ViewTests {
tableView.Style.ShowHorizontalScrollIndicators = true;
tableView.Style.ShowHorizontalHeaderUnderline = true;
tableView.LayoutSubviews ();
tableView.Redraw (tableView.Bounds);
// normally we should have scroll indicators because DEF are of screen
@@ -1305,6 +1319,7 @@ namespace Terminal.Gui.ViewTests {
tableView.Style.ShowHorizontalHeaderUnderline = true;
tableView.ColumnOffset = 1;
tableView.LayoutSubviews ();
tableView.Redraw (tableView.Bounds);
// normally we should have scroll indicators because A,E and F are of screen
@@ -1343,14 +1358,15 @@ namespace Terminal.Gui.ViewTests {
public void TestColumnStyle_VisibleFalse_CursorStepsOverInvisibleColumns ()
{
var tableView = GetABCDEFTableView (out var dt);
tableView.LayoutSubviews ();
tableView.Style.GetOrCreateColumnStyle (dt.Columns ["B"]).Visible = false;
tableView.SelectedColumn = 0;
tableView.ProcessKey (new KeyEvent { Key = Key.CursorRight });
// Expect the cursor navigation to skip over the invisible column(s)
Assert.Equal(2,tableView.SelectedColumn);
Assert.Equal (2, tableView.SelectedColumn);
tableView.ProcessKey (new KeyEvent { Key = Key.CursorLeft });
@@ -1358,12 +1374,13 @@ namespace Terminal.Gui.ViewTests {
Assert.Equal (0, tableView.SelectedColumn);
}
[InlineData(true)]
[InlineData (true)]
[InlineData (false)]
[Theory, AutoInitShutdown]
public void TestColumnStyle_FirstColumnVisibleFalse_CursorStaysAt1(bool useHome)
public void TestColumnStyle_FirstColumnVisibleFalse_CursorStaysAt1 (bool useHome)
{
var tableView = GetABCDEFTableView (out var dt);
tableView.LayoutSubviews ();
tableView.Style.GetOrCreateColumnStyle (dt.Columns ["A"]).Visible = false;
tableView.SelectedColumn = 0;
@@ -1371,12 +1388,11 @@ namespace Terminal.Gui.ViewTests {
Assert.Equal (0, tableView.SelectedColumn);
// column 0 is invisible so this method should move to 1
tableView.EnsureValidSelection();
tableView.EnsureValidSelection ();
Assert.Equal (1, tableView.SelectedColumn);
tableView.ProcessKey (new KeyEvent
{
Key = useHome ? Key.Home : Key.CursorLeft
tableView.ProcessKey (new KeyEvent {
Key = useHome ? Key.Home : Key.CursorLeft
});
// Expect the cursor to stay at 1
@@ -1384,47 +1400,40 @@ namespace Terminal.Gui.ViewTests {
}
[InlineData(true)]
[InlineData (true)]
[InlineData (false)]
[Theory, AutoInitShutdown]
public void TestMoveStartEnd_WithFullRowSelect(bool withFullRowSelect)
public void TestMoveStartEnd_WithFullRowSelect (bool withFullRowSelect)
{
var tableView = GetTwoRowSixColumnTable ();
tableView.LayoutSubviews ();
tableView.FullRowSelect = withFullRowSelect;
tableView.SelectedRow = 1;
tableView.SelectedColumn = 1;
tableView.ProcessKey (new KeyEvent
{
Key = Key.Home | Key.CtrlMask
tableView.ProcessKey (new KeyEvent {
Key = Key.Home | Key.CtrlMask
});
if(withFullRowSelect)
{
if (withFullRowSelect) {
// Should not be any horizontal movement when
// using navigate to Start/End and FullRowSelect
Assert.Equal (1, tableView.SelectedColumn);
Assert.Equal (0, tableView.SelectedRow);
}
else
{
} else {
Assert.Equal (0, tableView.SelectedColumn);
Assert.Equal (0, tableView.SelectedRow);
}
tableView.ProcessKey (new KeyEvent
{
Key = Key.End | Key.CtrlMask
tableView.ProcessKey (new KeyEvent {
Key = Key.End | Key.CtrlMask
});
if(withFullRowSelect)
{
if (withFullRowSelect) {
Assert.Equal (1, tableView.SelectedColumn);
Assert.Equal (1, tableView.SelectedRow);
}
else
{
} else {
Assert.Equal (5, tableView.SelectedColumn);
Assert.Equal (1, tableView.SelectedRow);
}
@@ -1437,7 +1446,8 @@ namespace Terminal.Gui.ViewTests {
public void TestColumnStyle_LastColumnVisibleFalse_CursorStaysAt2 (bool useEnd)
{
var tableView = GetABCDEFTableView (out var dt);
tableView.LayoutSubviews ();
// select D
tableView.SelectedColumn = 3;
Assert.Equal (3, tableView.SelectedColumn);
@@ -1462,15 +1472,16 @@ namespace Terminal.Gui.ViewTests {
public void TestColumnStyle_VisibleFalse_MultiSelected ()
{
var tableView = GetABCDEFTableView (out var dt);
tableView.LayoutSubviews ();
// user has rectangular selection
tableView.MultiSelectedRegions.Push (
new TableView.TableSelection(
new Point(0,0),
new Rect(0, 0, 3, 1))
new TableView.TableSelection (
new Point (0, 0),
new Rect (0, 0, 3, 1))
);
Assert.Equal (3, tableView.GetAllSelectedCells ().Count());
Assert.Equal (3, tableView.GetAllSelectedCells ().Count ());
Assert.True (tableView.IsSelected (0, 0));
Assert.True (tableView.IsSelected (1, 0));
Assert.True (tableView.IsSelected (2, 0));
@@ -1486,13 +1497,14 @@ namespace Terminal.Gui.ViewTests {
Assert.True (tableView.IsSelected (2, 0));
Assert.False (tableView.IsSelected (3, 0));
Assert.DoesNotContain(new Point(1,0),tableView.GetAllSelectedCells ());
Assert.DoesNotContain (new Point (1, 0), tableView.GetAllSelectedCells ());
}
[Fact, AutoInitShutdown]
public void TestColumnStyle_VisibleFalse_MultiSelectingStepsOverInvisibleColumns ()
{
var tableView = GetABCDEFTableView (out var dt);
tableView.LayoutSubviews ();
// if middle column is invisible
tableView.Style.GetOrCreateColumnStyle (dt.Columns ["B"]).Visible = false;
@@ -1514,71 +1526,72 @@ namespace Terminal.Gui.ViewTests {
{
// 2 row table
var tableView = GetABCDEFTableView (out var dt);
tableView.LayoutSubviews ();
dt.Rows.Add (1, 2, 3, 4, 5, 6);
tableView.MultiSelect = true;
tableView.AddKeyBinding(Key.Space,Command.ToggleChecked);
tableView.AddKeyBinding (Key.Space, Command.ToggleChecked);
var selectedCell = tableView.GetAllSelectedCells().Single();
Assert.Equal(0,selectedCell.X);
Assert.Equal(0,selectedCell.Y);
var selectedCell = tableView.GetAllSelectedCells ().Single ();
Assert.Equal (0, selectedCell.X);
Assert.Equal (0, selectedCell.Y);
// Go Right
tableView.ProcessKey (new KeyEvent { Key = Key.CursorRight });
selectedCell = tableView.GetAllSelectedCells().Single();
Assert.Equal(1,selectedCell.X);
Assert.Equal(0,selectedCell.Y);
selectedCell = tableView.GetAllSelectedCells ().Single ();
Assert.Equal (1, selectedCell.X);
Assert.Equal (0, selectedCell.Y);
// Toggle Select
tableView.ProcessKey (new KeyEvent { Key = Key.Space});
var m = tableView.MultiSelectedRegions.Single();
Assert.True(m.IsToggled);
Assert.Equal(1,m.Origin.X);
Assert.Equal(0,m.Origin.Y);
selectedCell = tableView.GetAllSelectedCells().Single();
Assert.Equal(1,selectedCell.X);
Assert.Equal(0,selectedCell.Y);
tableView.ProcessKey (new KeyEvent { Key = Key.Space });
var m = tableView.MultiSelectedRegions.Single ();
Assert.True (m.IsToggled);
Assert.Equal (1, m.Origin.X);
Assert.Equal (0, m.Origin.Y);
selectedCell = tableView.GetAllSelectedCells ().Single ();
Assert.Equal (1, selectedCell.X);
Assert.Equal (0, selectedCell.Y);
// Go Left
tableView.ProcessKey (new KeyEvent { Key = Key.CursorLeft });
// Both Toggled and Moved to should be selected
Assert.Equal(2,tableView.GetAllSelectedCells().Count());
var s1 = tableView.GetAllSelectedCells().ElementAt(0);
var s2 = tableView.GetAllSelectedCells().ElementAt(1);
Assert.Equal(1,s1.X);
Assert.Equal(0,s1.Y);
Assert.Equal(0,s2.X);
Assert.Equal(0,s2.Y);
Assert.Equal (2, tableView.GetAllSelectedCells ().Count ());
var s1 = tableView.GetAllSelectedCells ().ElementAt (0);
var s2 = tableView.GetAllSelectedCells ().ElementAt (1);
Assert.Equal (1, s1.X);
Assert.Equal (0, s1.Y);
Assert.Equal (0, s2.X);
Assert.Equal (0, s2.Y);
// Go Down
tableView.ProcessKey (new KeyEvent { Key = Key.CursorDown });
// Both Toggled and Moved to should be selected but not 0,0
// which we moved down from
Assert.Equal(2,tableView.GetAllSelectedCells().Count());
s1 = tableView.GetAllSelectedCells().ElementAt(0);
s2 = tableView.GetAllSelectedCells().ElementAt(1);
Assert.Equal(1,s1.X);
Assert.Equal(0,s1.Y);
Assert.Equal(0,s2.X);
Assert.Equal(1,s2.Y);
Assert.Equal (2, tableView.GetAllSelectedCells ().Count ());
s1 = tableView.GetAllSelectedCells ().ElementAt (0);
s2 = tableView.GetAllSelectedCells ().ElementAt (1);
Assert.Equal (1, s1.X);
Assert.Equal (0, s1.Y);
Assert.Equal (0, s2.X);
Assert.Equal (1, s2.Y);
// Go back to the toggled cell
tableView.ProcessKey (new KeyEvent { Key = Key.CursorRight});
tableView.ProcessKey (new KeyEvent { Key = Key.CursorUp});
tableView.ProcessKey (new KeyEvent { Key = Key.CursorRight });
tableView.ProcessKey (new KeyEvent { Key = Key.CursorUp });
// Toggle off
tableView.ProcessKey (new KeyEvent { Key = Key.Space});
tableView.ProcessKey (new KeyEvent { Key = Key.Space });
// Go Left
tableView.ProcessKey (new KeyEvent { Key = Key.CursorLeft});
tableView.ProcessKey (new KeyEvent { Key = Key.CursorLeft });
selectedCell = tableView.GetAllSelectedCells().Single();
Assert.Equal(0,selectedCell.X);
Assert.Equal(0,selectedCell.Y);
selectedCell = tableView.GetAllSelectedCells ().Single ();
Assert.Equal (0, selectedCell.X);
Assert.Equal (0, selectedCell.Y);
}
[Fact, AutoInitShutdown]
@@ -1586,34 +1599,35 @@ namespace Terminal.Gui.ViewTests {
{
// 2 row table
var tableView = GetABCDEFTableView (out var dt);
tableView.LayoutSubviews ();
dt.Rows.Add (1, 2, 3, 4, 5, 6);
tableView.FullRowSelect = true;
tableView.MultiSelect = true;
tableView.AddKeyBinding(Key.Space,Command.ToggleChecked);
tableView.AddKeyBinding (Key.Space, Command.ToggleChecked);
// Toggle Select Cell 0,0
tableView.ProcessKey (new KeyEvent { Key = Key.Space});
tableView.ProcessKey (new KeyEvent { Key = Key.Space });
// Go Down
tableView.ProcessKey (new KeyEvent { Key = Key.CursorDown });
var m = tableView.MultiSelectedRegions.Single();
Assert.True(m.IsToggled);
Assert.Equal(0,m.Origin.X);
Assert.Equal(0,m.Origin.Y);
var m = tableView.MultiSelectedRegions.Single ();
Assert.True (m.IsToggled);
Assert.Equal (0, m.Origin.X);
Assert.Equal (0, m.Origin.Y);
//First row toggled and Second row active = 12 selected cells
Assert.Equal(12,tableView.GetAllSelectedCells().Count());
Assert.Equal (12, tableView.GetAllSelectedCells ().Count ());
tableView.ProcessKey (new KeyEvent { Key = Key.CursorRight });
tableView.ProcessKey (new KeyEvent { Key = Key.CursorUp });
Assert.Single(tableView.MultiSelectedRegions.Where(r=>r.IsToggled));
Assert.Single (tableView.MultiSelectedRegions.Where (r => r.IsToggled));
// Can untoggle at 1,0 even though 0,0 was initial toggle because FullRowSelect is on
tableView.ProcessKey (new KeyEvent { Key = Key.Space});
tableView.ProcessKey (new KeyEvent { Key = Key.Space });
Assert.Empty(tableView.MultiSelectedRegions.Where(r=>r.IsToggled));
Assert.Empty (tableView.MultiSelectedRegions.Where (r => r.IsToggled));
}
@@ -1623,36 +1637,37 @@ namespace Terminal.Gui.ViewTests {
{
// 3 row table
var tableView = GetABCDEFTableView (out var dt);
tableView.LayoutSubviews ();
dt.Rows.Add (1, 2, 3, 4, 5, 6);
dt.Rows.Add (1, 2, 3, 4, 5, 6);
tableView.MultiSelect = true;
tableView.AddKeyBinding(Key.Space,Command.ToggleChecked);
tableView.AddKeyBinding (Key.Space, Command.ToggleChecked);
// Make a square selection
tableView.ProcessKey (new KeyEvent { Key = Key.ShiftMask | Key.CursorDown});
tableView.ProcessKey (new KeyEvent { Key = Key.ShiftMask | Key.CursorRight});
tableView.ProcessKey (new KeyEvent { Key = Key.ShiftMask | Key.CursorDown });
tableView.ProcessKey (new KeyEvent { Key = Key.ShiftMask | Key.CursorRight });
Assert.Equal(4,tableView.GetAllSelectedCells().Count());
Assert.Equal (4, tableView.GetAllSelectedCells ().Count ());
// Toggle the square selected region on
tableView.ProcessKey (new KeyEvent { Key = Key.Space});
tableView.ProcessKey (new KeyEvent { Key = Key.Space });
// Go Right
tableView.ProcessKey (new KeyEvent { Key = Key.CursorRight });
//Toggled on square + the active cell (x=2,y=1)
Assert.Equal(5,tableView.GetAllSelectedCells().Count());
Assert.Equal(2,tableView.SelectedColumn);
Assert.Equal(1,tableView.SelectedRow);
Assert.Equal (5, tableView.GetAllSelectedCells ().Count ());
Assert.Equal (2, tableView.SelectedColumn);
Assert.Equal (1, tableView.SelectedRow);
// Untoggle the rectangular region by hitting toggle in
// any cell in that rect
tableView.ProcessKey (new KeyEvent { Key = Key.CursorUp });
tableView.ProcessKey (new KeyEvent { Key = Key.CursorLeft });
Assert.Equal(4,tableView.GetAllSelectedCells().Count());
Assert.Equal (4, tableView.GetAllSelectedCells ().Count ());
tableView.ProcessKey (new KeyEvent { Key = Key.Space });
Assert.Single(tableView.GetAllSelectedCells());
Assert.Single (tableView.GetAllSelectedCells ());
}
[Fact, AutoInitShutdown]
@@ -1660,48 +1675,50 @@ namespace Terminal.Gui.ViewTests {
{
// 6 row table
var tableView = GetABCDEFTableView (out var dt);
tableView.LayoutSubviews ();
dt.Rows.Add (1, 2, 3, 4, 5, 6);
dt.Rows.Add (1, 2, 3, 4, 5, 6);
dt.Rows.Add (1, 2, 3, 4, 5, 6);
dt.Rows.Add (1, 2, 3, 4, 5, 6);
dt.Rows.Add (1, 2, 3, 4, 5, 6);
tableView.MultiSelect = true;
tableView.AddKeyBinding(Key.Space,Command.ToggleChecked);
tableView.AddKeyBinding (Key.Space, Command.ToggleChecked);
// Make first square selection (0,0 to 1,1)
tableView.ProcessKey (new KeyEvent { Key = Key.ShiftMask | Key.CursorDown});
tableView.ProcessKey (new KeyEvent { Key = Key.ShiftMask | Key.CursorRight});
tableView.ProcessKey (new KeyEvent { Key = Key.Space});
Assert.Equal(4,tableView.GetAllSelectedCells().Count());
tableView.ProcessKey (new KeyEvent { Key = Key.ShiftMask | Key.CursorDown });
tableView.ProcessKey (new KeyEvent { Key = Key.ShiftMask | Key.CursorRight });
tableView.ProcessKey (new KeyEvent { Key = Key.Space });
Assert.Equal (4, tableView.GetAllSelectedCells ().Count ());
// Make second square selection leaving 1 unselected line between them
tableView.ProcessKey (new KeyEvent { Key = Key.CursorLeft });
tableView.ProcessKey (new KeyEvent { Key = Key.CursorDown });
tableView.ProcessKey (new KeyEvent { Key = Key.CursorDown });
tableView.ProcessKey (new KeyEvent { Key = Key.ShiftMask | Key.CursorDown});
tableView.ProcessKey (new KeyEvent { Key = Key.ShiftMask | Key.CursorRight});
tableView.ProcessKey (new KeyEvent { Key = Key.ShiftMask | Key.CursorDown });
tableView.ProcessKey (new KeyEvent { Key = Key.ShiftMask | Key.CursorRight });
// 2 square selections
Assert.Equal(8,tableView.GetAllSelectedCells().Count());
Assert.Equal (8, tableView.GetAllSelectedCells ().Count ());
}
[Theory, AutoInitShutdown]
[InlineData(new object[] { true,true })]
[InlineData (new object[] { false,true })]
[InlineData (new object [] { true, false})]
[InlineData (new object [] { false, false})]
[InlineData (new object [] { true, true })]
[InlineData (new object [] { false, true })]
[InlineData (new object [] { true, false })]
[InlineData (new object [] { false, false })]
public void TestColumnStyle_VisibleFalse_DoesNotEffect_EnsureSelectedCellIsVisible (bool smooth, bool invisibleCol)
{
var tableView = GetABCDEFTableView (out var dt);
tableView.LayoutSubviews ();
tableView.Style.SmoothHorizontalScrolling = smooth;
if(invisibleCol) {
if (invisibleCol) {
tableView.Style.GetOrCreateColumnStyle (dt.Columns ["D"]).Visible = false;
}
// New TableView should have first cell selected
Assert.Equal (0,tableView.SelectedColumn);
Assert.Equal (0, tableView.SelectedColumn);
// With no scrolling
Assert.Equal (0, tableView.ColumnOffset);
@@ -1725,6 +1742,7 @@ namespace Terminal.Gui.ViewTests {
GraphViewTests.InitFakeDriver ();
var tableView = new TableView ();
tableView.LayoutSubviews ();
tableView.ColorScheme = Colors.TopLevel;
// 25 characters can be printed into table
@@ -1739,16 +1757,16 @@ namespace Terminal.Gui.ViewTests {
dt.Columns.Add ("B");
dt.Columns.Add ("Very Long Column");
dt.Rows.Add (1, 2, new string('a',500));
dt.Rows.Add (1, 2, new string ('a', 500));
dt.Rows.Add (1, 2, "aaa");
tableView.Table = dt;
tableView.LayoutSubviews ();
tableView.Redraw (tableView.Bounds);
// default behaviour of TableView is not to render
// columns unless there is sufficient space
string expected =
string expected =
@"
│A│B │
├─┼─────────────────────►
@@ -1759,14 +1777,15 @@ namespace Terminal.Gui.ViewTests {
TestHelpers.AssertDriverContentsAre (expected, output);
// get a style for the long column
var style = tableView.Style.GetOrCreateColumnStyle(dt.Columns[2]);
var style = tableView.Style.GetOrCreateColumnStyle (dt.Columns [2]);
// one way the API user can fix this for long columns
// is to specify a max width for the column
style.MaxWidth = 10;
tableView.LayoutSubviews ();
tableView.Redraw (tableView.Bounds);
expected =
expected =
@"
│A│B│Very Long │
├─┼─┼───────────────────┤
@@ -1781,12 +1800,13 @@ namespace Terminal.Gui.ViewTests {
// another way API user can fix problem is to implement
// RepresentationGetter and apply max length there
style.RepresentationGetter = (s)=>{
return s.ToString().Length < 15 ? s.ToString() : s.ToString().Substring(0,13)+"...";
style.RepresentationGetter = (s) => {
return s.ToString ().Length < 15 ? s.ToString () : s.ToString ().Substring (0, 13) + "...";
};
tableView.LayoutSubviews ();
tableView.Redraw (tableView.Bounds);
expected =
expected =
@"
│A│B│Very Long Column │
├─┼─┼───────────────────┤
@@ -1810,8 +1830,9 @@ namespace Terminal.Gui.ViewTests {
// less space down to this limit
style.MinAcceptableWidth = 5;
tableView.LayoutSubviews ();
tableView.Redraw (tableView.Bounds);
expected =
expected =
@"
│A│B│Very Long Column │
├─┼─┼───────────────────┤
@@ -1825,7 +1846,8 @@ namespace Terminal.Gui.ViewTests {
Application.Shutdown ();
GraphViewTests.InitFakeDriver ();
tableView.Bounds = new Rect(0,0,9,5);
tableView.Bounds = new Rect (0, 0, 9, 5);
tableView.LayoutSubviews ();
tableView.Redraw (tableView.Bounds);
expected =
@"
@@ -1841,6 +1863,7 @@ namespace Terminal.Gui.ViewTests {
// meet MinAcceptableWidth of 5. Column width includes terminator line
// symbol (e.g. ┤ or │)
tableView.Bounds = new Rect (0, 0, 10, 5);
tableView.LayoutSubviews ();
tableView.Redraw (tableView.Bounds);
expected =
@"
@@ -1889,7 +1912,7 @@ namespace Terminal.Gui.ViewTests {
// user can only scroll right so sees right indicator
// Because first column in table is A
string expected =
string expected =
@"
│A│B│C│
├─┼─┼─►
@@ -1964,6 +1987,7 @@ namespace Terminal.Gui.ViewTests {
public void Test_ScreenToCell ()
{
var tableView = GetTwoRowSixColumnTable ();
tableView.LayoutSubviews ();
tableView.Redraw (tableView.Bounds);
@@ -1992,7 +2016,7 @@ namespace Terminal.Gui.ViewTests {
// click in header row line
Assert.Null (tableView.ScreenToCell (1, 1));
// click in cell 0,0
Assert.Equal (new Point(0,0),tableView.ScreenToCell (1, 2));
Assert.Equal (new Point (0, 0), tableView.ScreenToCell (1, 2));
// click in cell 0,1
Assert.Equal (new Point (0, 1), tableView.ScreenToCell (1, 3));
// after last row
@@ -2030,6 +2054,7 @@ namespace Terminal.Gui.ViewTests {
public void Test_ScreenToCell_DataColumnOverload ()
{
var tableView = GetTwoRowSixColumnTable ();
tableView.LayoutSubviews ();
tableView.Redraw (tableView.Bounds);
@@ -2047,15 +2072,15 @@ namespace Terminal.Gui.ViewTests {
// ---------------- X=0 -----------------------
// click is before first cell
Assert.Null (tableView.ScreenToCell (0, 0,out col));
Assert.Null (tableView.ScreenToCell (0, 0, out col));
Assert.Null (col);
Assert.Null (tableView.ScreenToCell (0, 1,out col));
Assert.Null (tableView.ScreenToCell (0, 1, out col));
Assert.Null (col);
Assert.Null (tableView.ScreenToCell (0, 2,out col));
Assert.Null (tableView.ScreenToCell (0, 2, out col));
Assert.Null (col);
Assert.Null (tableView.ScreenToCell (0, 3,out col));
Assert.Null (tableView.ScreenToCell (0, 3, out col));
Assert.Null (col);
Assert.Null (tableView.ScreenToCell (0, 4,out col));
Assert.Null (tableView.ScreenToCell (0, 4, out col));
Assert.Null (col);
// ---------------- X=1 -----------------------
@@ -2137,5 +2162,6 @@ namespace Terminal.Gui.ViewTests {
tableView.Table = dt;
return tableView;
}
#endif
}
}