StatusBarTests.cs 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. using Xunit.Abstractions;
  2. namespace Terminal.Gui.ViewsTests;
  3. public class StatusBarTests (ITestOutputHelper output)
  4. {
  5. [Fact]
  6. public void AddItemAt_RemoveItem_Replacing ()
  7. {
  8. var sb = new StatusBar ([
  9. new (Key.O.WithCtrl, "Open", null),
  10. new (Key.S.WithCtrl, "Save", null),
  11. new (Key.Q.WithCtrl, "Quit", null)
  12. ]
  13. );
  14. sb.AddShortcutAt (2, new (Key.C.WithCtrl, "Close", null));
  15. Assert.Equal ("Open", sb.Subviews [0].Title);
  16. Assert.Equal ("Save", sb.Subviews [1].Title);
  17. Assert.Equal ("Close", sb.Subviews [2].Title);
  18. Assert.Equal ("Quit", sb.Subviews [^1].Title);
  19. Assert.Equal ("Save", sb.RemoveShortcut (1).Title);
  20. Assert.Equal ("Open", sb.Subviews [0].Title);
  21. Assert.Equal ("Close", sb.Subviews [1].Title);
  22. Assert.Equal ("Quit", sb.Subviews [^1].Title);
  23. sb.AddShortcutAt (1, new Shortcut (Key.A.WithCtrl, "Save As", null));
  24. Assert.Equal ("Open", sb.Subviews [0].Title);
  25. Assert.Equal ("Save As", sb.Subviews [1].Title);
  26. Assert.Equal ("Quit", sb.Subviews [^1].Title);
  27. }
  28. //[Fact]
  29. //[AutoInitShutdown]
  30. //public void CanExecute_ProcessHotKey ()
  31. //{
  32. // Window win = null;
  33. // var statusBar = new StatusBar (
  34. // new Shortcut []
  35. // {
  36. // new (
  37. // KeyCode.CtrlMask | KeyCode.N,
  38. // "~^N~ New",
  39. // New,
  40. // CanExecuteNew
  41. // ),
  42. // new (
  43. // KeyCode.CtrlMask | KeyCode.C,
  44. // "~^C~ Close",
  45. // Close,
  46. // CanExecuteClose
  47. // )
  48. // }
  49. // );
  50. // Toplevel top = new ();
  51. // top.Add (statusBar);
  52. // bool CanExecuteNew () { return win == null; }
  53. // void New () { win = new (); }
  54. // bool CanExecuteClose () { return win != null; }
  55. // void Close () { win = null; }
  56. // Application.Begin (top);
  57. // Assert.Null (win);
  58. // Assert.True (CanExecuteNew ());
  59. // Assert.False (CanExecuteClose ());
  60. // Assert.True (top.NewKeyDownEvent (Key.N.WithCtrl));
  61. // Application.MainLoop.RunIteration ();
  62. // Assert.NotNull (win);
  63. // Assert.False (CanExecuteNew ());
  64. // Assert.True (CanExecuteClose ());
  65. // top.Dispose ();
  66. //}
  67. [Fact]
  68. [AutoInitShutdown]
  69. public void Redraw_Output ()
  70. {
  71. }
  72. [Fact]
  73. [AutoInitShutdown]
  74. public void Redraw_Output_CTRLQ ()
  75. {
  76. }
  77. [Fact]
  78. [AutoInitShutdown]
  79. public void Run_Action_With_Key_And_Mouse ()
  80. {
  81. var msg = "";
  82. var sb = new StatusBar (
  83. new Shortcut []
  84. {
  85. new (
  86. Application.QuitKey,
  87. $"Quit",
  88. () => msg = "Quiting..."
  89. )
  90. }
  91. );
  92. var iteration = 0;
  93. Application.Iteration += (s, a) =>
  94. {
  95. if (iteration == 0)
  96. {
  97. Assert.Equal ("", msg);
  98. Application.OnKeyDown (Application.QuitKey);
  99. }
  100. else if (iteration == 1)
  101. {
  102. Assert.Equal ("Quiting...", msg);
  103. msg = "";
  104. sb.NewMouseEvent (new () { Position = new (0, 0), Flags = MouseFlags.Button1Clicked });
  105. }
  106. else
  107. {
  108. Assert.Equal ("Quiting...", msg);
  109. Application.RequestStop ();
  110. }
  111. iteration++;
  112. };
  113. Application.Run ().Dispose ();
  114. }
  115. [Fact]
  116. public void StatusBar_Constructor_Default ()
  117. {
  118. var sb = new StatusBar ();
  119. Assert.Empty (sb.Subviews);
  120. Assert.True (sb.CanFocus);
  121. Assert.Equal (Colors.ColorSchemes ["Menu"], sb.ColorScheme);
  122. Assert.Equal (0, sb.X);
  123. Assert.Equal ("AnchorEnd()", sb.Y.ToString ());
  124. Assert.Equal (Dim.Fill (), sb.Width);
  125. Assert.Equal (1, sb.Frame.Height);
  126. }
  127. [Fact]
  128. public void RemoveAndThenAddStatusBar_ShouldNotChangeWidth ()
  129. {
  130. StatusBar statusBar;
  131. StatusBar statusBar2;
  132. var w = new Window ();
  133. statusBar2 = new StatusBar () { Id = "statusBar2" };
  134. statusBar = new StatusBar () { Id = "statusBar" };
  135. w.Width = Dim.Fill (0);
  136. w.Height = Dim.Fill (0);
  137. w.X = 0;
  138. w.Y = 0;
  139. w.Visible = true;
  140. w.Modal = false;
  141. w.Title = "";
  142. statusBar.Width = Dim.Fill (0);
  143. statusBar.Height = 1;
  144. statusBar.X = 0;
  145. statusBar.Y = 0;
  146. statusBar.Visible = true;
  147. w.Add (statusBar);
  148. Assert.Equal (w.StatusBar, statusBar);
  149. statusBar2.Width = Dim.Fill (0);
  150. statusBar2.Height = 1;
  151. statusBar2.X = 0;
  152. statusBar2.Y = 4;
  153. statusBar2.Visible = true;
  154. w.Add (statusBar2);
  155. Assert.Equal (w.StatusBar, statusBar2);
  156. var menuBars = w.Subviews.OfType<StatusBar> ().ToArray ();
  157. Assert.Equal (2, menuBars.Length);
  158. Assert.Equal (Dim.Fill (0), menuBars [0].Width);
  159. Assert.Equal (Dim.Fill (0), menuBars [1].Width);
  160. // Goes wrong here
  161. w.Remove (statusBar);
  162. w.Remove (statusBar2);
  163. w.Add (statusBar);
  164. w.Add (statusBar2);
  165. // These assertions fail
  166. Assert.Equal (Dim.Fill (0), menuBars [0].Width);
  167. Assert.Equal (Dim.Fill (0), menuBars [1].Width);
  168. }
  169. }