StatusBarTests.cs 6.7 KB

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