mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2026-01-01 16:59:35 +01:00
* Tons of API doc updates * Removed stale test * Removed stale tests * Fixed Skipped Shadow test 1 * Fixed Skipped Shadow test 2 * Fixed Skipped Shadow test 3 * Removed stale test * Removed stale test2 * Explicit unregister of event handler on Application.Driver!.ClearedContents * Added Toplevels to dict * code cleanup * spelling error * Removed stale test3 * Removed stale test4 * Removed stale test5 * added script * tweaked script * tweaked script * Created StressTests project; moved some tests * Created IntegrationTests project; moved some tests * New yml * made old yml just unit tests * Tweaked Button_IsDefault_Raises_Accepted_Correctly * tweaked script * cleaned up ymls * tweakled up ymls * stress tests... * stress tests on ubuntu only * Fixed WindowsDriver in InvokeLeakTest * Fixed WindowsDriver in InvokeLeakTest2 * Added Directory.Packages.props. Added Directory.Build.props * Shortened StressTest time * Removed dupe file. * DemoFiles * Moved all tests to ./Tests dir. * Fixed release build issue * Fixed .sln file * Fixed .sl* files * Fixing ymls * Fixing interation tests * Create link to the file TestHelpers. * Created Tests/UnitTestsParallelizable. Moved all obviously parallelizable tests. Updated yml. * fixing logs * fixing logs2 * fixing logs3 * don't require stress to pass for PRs * Fix a failure? * tweaked script * Coudl this be it? * Moved tons of tests to parallelizable * Fixed some stuff * Script to find duplicate tests * Testing workflows * Updated to v4 * Fix RelativeBasePath issue * Replace powershell to pwsh * Add ignore projects. * Removed dupe unit tests * Code cleanup of tests * Cleaned up test warnings * yml tweak * Moved setter * tweak ymls * just randomly throwing spaghetti at a wall * Enable runing 5 test runners in par * Turned off DEBUG_DISPOSABLE for par tests * RunningUnitTests=true * code cleanup (forcing more Action runs) * DISABLE_DEBUG_IDISPOSABLE * Added View.DebugIDisposable. False by default. * Remobed bogus tareet * Remobed bogus tareet2 * fixed warning * added api doc * fixed warning * fixed warning * fixed warning2 * fixed warning3 * fixed warning4 --------- Co-authored-by: BDisp <bd.bdisp@gmail.com>
This commit is contained in:
325
Tests/UnitTests/Views/TreeTableSourceTests.cs
Normal file
325
Tests/UnitTests/Views/TreeTableSourceTests.cs
Normal file
@@ -0,0 +1,325 @@
|
||||
using System.Text;
|
||||
using UnitTests;
|
||||
using UnitTests;
|
||||
using Xunit.Abstractions;
|
||||
|
||||
namespace Terminal.Gui.ViewsTests;
|
||||
|
||||
public class TreeTableSourceTests : IDisposable
|
||||
{
|
||||
private readonly Rune _origChecked;
|
||||
private readonly Rune _origUnchecked;
|
||||
private readonly ITestOutputHelper _output;
|
||||
|
||||
public TreeTableSourceTests (ITestOutputHelper output)
|
||||
{
|
||||
_output = output;
|
||||
|
||||
_origChecked = Glyphs.CheckStateChecked;
|
||||
_origUnchecked = Glyphs.CheckStateUnChecked;
|
||||
Glyphs.CheckStateChecked = new Rune ('☑');
|
||||
Glyphs.CheckStateUnChecked = new Rune ('☐');
|
||||
}
|
||||
|
||||
public void Dispose ()
|
||||
{
|
||||
Glyphs.CheckStateChecked = _origChecked;
|
||||
Glyphs.CheckStateUnChecked = _origUnchecked;
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[SetupFakeDriver]
|
||||
public void TestTreeTableSource_BasicExpanding_WithKeyboard ()
|
||||
{
|
||||
((FakeDriver)Application.Driver!).SetBufferSize (100, 100);
|
||||
TableView tv = GetTreeTable (out _);
|
||||
|
||||
tv.Style.GetOrCreateColumnStyle (1).MinAcceptableWidth = 1;
|
||||
|
||||
tv.Draw ();
|
||||
|
||||
var expected =
|
||||
@"
|
||||
│Name │Description │
|
||||
├──────────────┼───────────────────────┤
|
||||
│├+Lost Highway│Exciting night road │
|
||||
│└+Route 66 │Great race course │";
|
||||
|
||||
DriverAssert.AssertDriverContentsAre (expected, _output);
|
||||
|
||||
Assert.Equal (2, tv.Table.Rows);
|
||||
|
||||
// top left is selected cell
|
||||
Assert.Equal (0, tv.SelectedRow);
|
||||
Assert.Equal (0, tv.SelectedColumn);
|
||||
|
||||
// when pressing right we should expand the top route
|
||||
tv.NewKeyDownEvent (Key.CursorRight);
|
||||
|
||||
View.SetClipToScreen ();
|
||||
tv.Draw ();
|
||||
|
||||
expected =
|
||||
@"
|
||||
│Name │Description │
|
||||
├─────────────────┼────────────────────┤
|
||||
│├-Lost Highway │Exciting night road │
|
||||
││ ├─Ford Trans-Am│Talking thunderbird │
|
||||
││ └─DeLorean │Time travelling car │
|
||||
│└+Route 66 │Great race course │
|
||||
";
|
||||
|
||||
DriverAssert.AssertDriverContentsAre (expected, _output);
|
||||
|
||||
// when pressing left we should collapse the top route again
|
||||
tv.NewKeyDownEvent (Key.CursorLeft);
|
||||
|
||||
View.SetClipToScreen ();
|
||||
tv.Draw ();
|
||||
|
||||
expected =
|
||||
@"
|
||||
│Name │Description │
|
||||
├──────────────┼───────────────────────┤
|
||||
│├+Lost Highway│Exciting night road │
|
||||
│└+Route 66 │Great race course │
|
||||
";
|
||||
|
||||
DriverAssert.AssertDriverContentsAre (expected, _output);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[SetupFakeDriver]
|
||||
public void TestTreeTableSource_BasicExpanding_WithMouse ()
|
||||
{
|
||||
((FakeDriver)Application.Driver!).SetBufferSize (100, 100);
|
||||
|
||||
TableView tv = GetTreeTable (out _);
|
||||
|
||||
tv.Style.GetOrCreateColumnStyle (1).MinAcceptableWidth = 1;
|
||||
|
||||
View.SetClipToScreen ();
|
||||
tv.Draw ();
|
||||
|
||||
var expected =
|
||||
@"
|
||||
│Name │Description │
|
||||
├──────────────┼───────────────────────┤
|
||||
│├+Lost Highway│Exciting night road │
|
||||
│└+Route 66 │Great race course │";
|
||||
|
||||
DriverAssert.AssertDriverContentsAre (expected, _output);
|
||||
|
||||
Assert.Equal (2, tv.Table.Rows);
|
||||
|
||||
// top left is selected cell
|
||||
Assert.Equal (0, tv.SelectedRow);
|
||||
Assert.Equal (0, tv.SelectedColumn);
|
||||
|
||||
Assert.True (tv.NewMouseEvent (new MouseEventArgs { Position = new (2, 2), Flags = MouseFlags.Button1Clicked }));
|
||||
|
||||
View.SetClipToScreen ();
|
||||
tv.Draw ();
|
||||
|
||||
expected =
|
||||
@"
|
||||
│Name │Description │
|
||||
├─────────────────┼────────────────────┤
|
||||
│├-Lost Highway │Exciting night road │
|
||||
││ ├─Ford Trans-Am│Talking thunderbird │
|
||||
││ └─DeLorean │Time travelling car │
|
||||
│└+Route 66 │Great race course │
|
||||
";
|
||||
|
||||
DriverAssert.AssertDriverContentsAre (expected, _output);
|
||||
|
||||
// Clicking to the right/left of the expand/collapse does nothing
|
||||
tv.NewMouseEvent (new MouseEventArgs { Position = new (3, 2), Flags = MouseFlags.Button1Clicked });
|
||||
tv.Draw ();
|
||||
DriverAssert.AssertDriverContentsAre (expected, _output);
|
||||
tv.NewMouseEvent (new MouseEventArgs { Position = new (1, 2), Flags = MouseFlags.Button1Clicked });
|
||||
tv.Draw ();
|
||||
DriverAssert.AssertDriverContentsAre (expected, _output);
|
||||
|
||||
// Clicking on the + again should collapse
|
||||
tv.NewMouseEvent (new MouseEventArgs { Position = new (2, 2), Flags = MouseFlags.Button1Clicked });
|
||||
View.SetClipToScreen ();
|
||||
tv.Draw ();
|
||||
|
||||
expected =
|
||||
@"
|
||||
│Name │Description │
|
||||
├──────────────┼───────────────────────┤
|
||||
│├+Lost Highway│Exciting night road │
|
||||
│└+Route 66 │Great race course │";
|
||||
|
||||
DriverAssert.AssertDriverContentsAre (expected, _output);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[AutoInitShutdown (configLocation:ConfigLocations.Default)]
|
||||
public void TestTreeTableSource_CombinedWithCheckboxes ()
|
||||
{
|
||||
Toplevel top = new ();
|
||||
TableView tv = GetTreeTable (out TreeView<IDescribedThing> treeSource);
|
||||
|
||||
CheckBoxTableSourceWrapperByIndex checkSource;
|
||||
tv.Table = checkSource = new CheckBoxTableSourceWrapperByIndex (tv, tv.Table);
|
||||
tv.Style.GetOrCreateColumnStyle (2).MinAcceptableWidth = 1;
|
||||
top.Add (tv);
|
||||
Application.Begin (top);
|
||||
|
||||
tv.Draw ();
|
||||
|
||||
var expected =
|
||||
@"
|
||||
│ │Name │Description │
|
||||
├─┼──────────────┼─────────────────────┤
|
||||
│☐│├+Lost Highway│Exciting night road │
|
||||
│☐│└+Route 66 │Great race course │
|
||||
";
|
||||
|
||||
DriverAssert.AssertDriverContentsAre (expected, _output);
|
||||
|
||||
Assert.Equal (2, tv.Table.Rows);
|
||||
|
||||
// top left is selected cell
|
||||
Assert.Equal (0, tv.SelectedRow);
|
||||
Assert.Equal (0, tv.SelectedColumn);
|
||||
|
||||
// when pressing right we move to tree column
|
||||
tv.NewKeyDownEvent (Key.CursorRight);
|
||||
|
||||
// now we are in tree column
|
||||
Assert.Equal (0, tv.SelectedRow);
|
||||
Assert.Equal (1, tv.SelectedColumn);
|
||||
|
||||
Application.RaiseKeyDownEvent (Key.CursorRight);
|
||||
|
||||
View.SetClipToScreen ();
|
||||
tv.Draw ();
|
||||
|
||||
expected =
|
||||
@"
|
||||
|
||||
│ │Name │Description │
|
||||
├─┼─────────────────┼──────────────────┤
|
||||
│☐│├-Lost Highway │Exciting night roa│
|
||||
│☐││ ├─Ford Trans-Am│Talking thunderbir│
|
||||
│☐││ └─DeLorean │Time travelling ca│
|
||||
│☐│└+Route 66 │Great race course │
|
||||
";
|
||||
|
||||
DriverAssert.AssertDriverContentsAre (expected, _output);
|
||||
|
||||
tv.NewKeyDownEvent (Key.CursorDown);
|
||||
tv.NewKeyDownEvent (Key.Space);
|
||||
View.SetClipToScreen ();
|
||||
tv.Draw ();
|
||||
|
||||
expected =
|
||||
@"
|
||||
|
||||
│ │Name │Description │
|
||||
├─┼─────────────────┼──────────────────┤
|
||||
│☐│├-Lost Highway │Exciting night roa│
|
||||
│☑││ ├─Ford Trans-Am│Talking thunderbir│
|
||||
│☐││ └─DeLorean │Time travelling ca│
|
||||
│☐│└+Route 66 │Great race course │
|
||||
";
|
||||
|
||||
DriverAssert.AssertDriverContentsAre (expected, _output);
|
||||
|
||||
IDescribedThing [] selectedObjects = checkSource.CheckedRows.Select (treeSource.GetObjectOnRow).ToArray ();
|
||||
IDescribedThing selected = Assert.Single (selectedObjects);
|
||||
|
||||
Assert.Equal ("Ford Trans-Am", selected.Name);
|
||||
Assert.Equal ("Talking thunderbird car", selected.Description);
|
||||
top.Dispose ();
|
||||
}
|
||||
|
||||
private TableView GetTreeTable (out TreeView<IDescribedThing> tree)
|
||||
{
|
||||
var tableView = new TableView ();
|
||||
tableView.ColorScheme = Colors.ColorSchemes ["TopLevel"];
|
||||
tableView.ColorScheme = Colors.ColorSchemes ["TopLevel"];
|
||||
tableView.Viewport = new Rectangle (0, 0, 40, 6);
|
||||
|
||||
tableView.Style.ShowHorizontalHeaderUnderline = true;
|
||||
tableView.Style.ShowHorizontalHeaderOverline = false;
|
||||
tableView.Style.AlwaysShowHeaders = true;
|
||||
tableView.Style.SmoothHorizontalScrolling = true;
|
||||
|
||||
tree = new TreeView<IDescribedThing> ();
|
||||
tree.AspectGetter = d => d.Name;
|
||||
|
||||
tree.TreeBuilder = new DelegateTreeBuilder<IDescribedThing> (
|
||||
d => d is Road r
|
||||
? r.Traffic
|
||||
: Enumerable.Empty<IDescribedThing> ()
|
||||
);
|
||||
|
||||
tree.AddObject (
|
||||
new Road
|
||||
{
|
||||
Name = "Lost Highway",
|
||||
Description = "Exciting night road",
|
||||
Traffic = new List<Car>
|
||||
{
|
||||
new () { Name = "Ford Trans-Am", Description = "Talking thunderbird car" },
|
||||
new () { Name = "DeLorean", Description = "Time travelling car" }
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
tree.AddObject (
|
||||
new Road
|
||||
{
|
||||
Name = "Route 66",
|
||||
Description = "Great race course",
|
||||
Traffic = new List<Car>
|
||||
{
|
||||
new () { Name = "Pink Compact", Description = "Penelope Pitstop's car" },
|
||||
new () { Name = "Mean Machine", Description = "Dick Dastardly's car" }
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
tableView.Table = new TreeTableSource<IDescribedThing> (
|
||||
tableView,
|
||||
"Name",
|
||||
tree,
|
||||
new Dictionary<string, Func<IDescribedThing, object>> { { "Description", d => d.Description } }
|
||||
);
|
||||
|
||||
tableView.BeginInit ();
|
||||
tableView.EndInit ();
|
||||
tableView.LayoutSubviews ();
|
||||
|
||||
var top = new Toplevel ();
|
||||
top.Add (tableView);
|
||||
top.SetFocus ();
|
||||
Assert.Equal (tableView, top.MostFocused);
|
||||
|
||||
return tableView;
|
||||
}
|
||||
|
||||
private class Car : IDescribedThing
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public string Description { get; set; }
|
||||
}
|
||||
|
||||
private interface IDescribedThing
|
||||
{
|
||||
string Description { get; }
|
||||
string Name { get; }
|
||||
}
|
||||
|
||||
private class Road : IDescribedThing
|
||||
{
|
||||
public List<Car> Traffic { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string Description { get; set; }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user