BasicFluentAssertionTests.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. using System.Text;
  2. using Terminal.Gui;
  3. using TerminalGuiFluentTesting;
  4. using Xunit.Abstractions;
  5. namespace IntegrationTests.FluentTests;
  6. public class BasicFluentAssertionTests
  7. {
  8. private readonly TextWriter _out;
  9. public class TestOutputWriter : TextWriter
  10. {
  11. private readonly ITestOutputHelper _output;
  12. public TestOutputWriter (ITestOutputHelper output) { _output = output; }
  13. public override void WriteLine (string? value) { _output.WriteLine (value ?? string.Empty); }
  14. public override Encoding Encoding => Encoding.UTF8;
  15. }
  16. public BasicFluentAssertionTests (ITestOutputHelper outputHelper) { _out = new TestOutputWriter (outputHelper); }
  17. [Theory]
  18. [ClassData (typeof (V2TestDrivers))]
  19. public void GuiTestContext_StartsAndStopsWithoutError (V2TestDriver d)
  20. {
  21. using GuiTestContext context = With.A<Window> (40, 10,d);
  22. // No actual assertions are needed — if no exceptions are thrown, it's working
  23. context.Stop ();
  24. }
  25. [Theory]
  26. [ClassData (typeof (V2TestDrivers))]
  27. public void GuiTestContext_ForgotToStop (V2TestDriver d)
  28. {
  29. using GuiTestContext context = With.A<Window> (40, 10, d);
  30. }
  31. [Theory]
  32. [ClassData (typeof (V2TestDrivers))]
  33. public void TestWindowsResize (V2TestDriver d)
  34. {
  35. var lbl = new Label
  36. {
  37. Width = Dim.Fill ()
  38. };
  39. using GuiTestContext c = With.A<Window> (40, 10, d)
  40. .Add (lbl)
  41. .Then (() => Assert.Equal (38, lbl.Frame.Width)) // Window has 2 border
  42. .ResizeConsole (20, 20)
  43. .Then (() => Assert.Equal (18, lbl.Frame.Width))
  44. .WriteOutLogs (_out)
  45. .Stop ();
  46. }
  47. [Theory]
  48. [ClassData (typeof (V2TestDrivers))]
  49. public void ContextMenu_CrashesOnRight (V2TestDriver d)
  50. {
  51. var clicked = false;
  52. var ctx = new ContextMenu ();
  53. var menuItems = new MenuBarItem (
  54. [
  55. new ("_New File", string.Empty, () => { clicked = true; })
  56. ]
  57. );
  58. using GuiTestContext c = With.A<Window> (40, 10, d)
  59. .WithContextMenu (ctx, menuItems)
  60. .ScreenShot ("Before open menu", _out)
  61. // Click in main area inside border
  62. .RightClick (1, 1)
  63. .ScreenShot ("After open menu", _out)
  64. .LeftClick (3, 3)
  65. .Stop ()
  66. .WriteOutLogs (_out);
  67. Assert.True (clicked);
  68. }
  69. [Theory]
  70. [ClassData (typeof (V2TestDrivers))]
  71. public void ContextMenu_OpenSubmenu (V2TestDriver d)
  72. {
  73. var clicked = false;
  74. var ctx = new ContextMenu ();
  75. var menuItems = new MenuBarItem (
  76. [
  77. new MenuItem ("One", "", null),
  78. new MenuItem ("Two", "", null),
  79. new MenuItem ("Three", "", null),
  80. new MenuBarItem (
  81. "Four",
  82. [
  83. new MenuItem ("SubMenu1", "", null),
  84. new MenuItem ("SubMenu2", "", ()=>clicked=true),
  85. new MenuItem ("SubMenu3", "", null),
  86. new MenuItem ("SubMenu4", "", null),
  87. new MenuItem ("SubMenu5", "", null),
  88. new MenuItem ("SubMenu6", "", null),
  89. new MenuItem ("SubMenu7", "", null)
  90. ]
  91. ),
  92. new MenuItem ("Five", "", null),
  93. new MenuItem ("Six", "", null)
  94. ]
  95. );
  96. using GuiTestContext c = With.A<Window> (40, 10,d)
  97. .WithContextMenu (ctx, menuItems)
  98. .ScreenShot ("Before open menu", _out)
  99. // Click in main area inside border
  100. .RightClick (1, 1)
  101. .ScreenShot ("After open menu", _out)
  102. .Down ()
  103. .Down ()
  104. .Down ()
  105. .Right()
  106. .ScreenShot ("After open submenu", _out)
  107. .Down ()
  108. .Enter ()
  109. .ScreenShot ("Menu should be closed after selecting", _out)
  110. .Stop ()
  111. .WriteOutLogs (_out);
  112. Assert.True (clicked);
  113. }
  114. }