StatusBarTests.cs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. using Xunit.Abstractions;
  2. namespace Terminal.Gui.ViewsTests;
  3. public class StatusBarTests
  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 Run_Action_With_Key_And_Mouse ()
  70. {
  71. var msg = "";
  72. var sb = new StatusBar (
  73. new Shortcut []
  74. {
  75. new (
  76. Application.QuitKey,
  77. $"Quit",
  78. () => msg = "Quiting..."
  79. )
  80. }
  81. );
  82. var iteration = 0;
  83. Application.Iteration += (s, a) =>
  84. {
  85. if (iteration == 0)
  86. {
  87. Assert.Equal ("", msg);
  88. Application.RaiseKeyDownEvent (Application.QuitKey);
  89. }
  90. else if (iteration == 1)
  91. {
  92. Assert.Equal ("Quiting...", msg);
  93. msg = "";
  94. sb.NewMouseEvent (new () { Position = new (0, 0), Flags = MouseFlags.Button1Clicked });
  95. }
  96. else
  97. {
  98. Assert.Equal ("Quiting...", msg);
  99. Application.RequestStop ();
  100. }
  101. iteration++;
  102. };
  103. Application.Run ().Dispose ();
  104. }
  105. [Fact]
  106. public void StatusBar_Constructor_Default ()
  107. {
  108. var sb = new StatusBar ();
  109. Assert.Empty (sb.Subviews);
  110. Assert.True (sb.CanFocus);
  111. Assert.Equal (Colors.ColorSchemes ["Menu"], sb.ColorScheme);
  112. Assert.Equal (0, sb.X);
  113. Assert.Equal ("AnchorEnd()", sb.Y.ToString ());
  114. Assert.Equal (Dim.Fill (), sb.Width);
  115. Assert.Equal (1, sb.Frame.Height);
  116. }
  117. //[Fact]
  118. //public void RemoveAndThenAddStatusBar_ShouldNotChangeWidth ()
  119. //{
  120. // StatusBar statusBar;
  121. // StatusBar statusBar2;
  122. // var w = new Window ();
  123. // statusBar2 = new StatusBar () { Id = "statusBar2" };
  124. // statusBar = new StatusBar () { Id = "statusBar" };
  125. // w.Width = Dim.Fill (0);
  126. // w.Height = Dim.Fill (0);
  127. // w.X = 0;
  128. // w.Y = 0;
  129. // w.Visible = true;
  130. // w.Modal = false;
  131. // w.Title = "";
  132. // statusBar.Width = Dim.Fill (0);
  133. // statusBar.Height = 1;
  134. // statusBar.X = 0;
  135. // statusBar.Y = 0;
  136. // statusBar.Visible = true;
  137. // w.Add (statusBar);
  138. // Assert.Equal (w.StatusBar, statusBar);
  139. // statusBar2.Width = Dim.Fill (0);
  140. // statusBar2.Height = 1;
  141. // statusBar2.X = 0;
  142. // statusBar2.Y = 4;
  143. // statusBar2.Visible = true;
  144. // w.Add (statusBar2);
  145. // Assert.Equal (w.StatusBar, statusBar2);
  146. // var menuBars = w.Subviews.OfType<StatusBar> ().ToArray ();
  147. // Assert.Equal (2, menuBars.Length);
  148. // Assert.Equal (Dim.Fill (0), menuBars [0].Width);
  149. // Assert.Equal (Dim.Fill (0), menuBars [1].Width);
  150. // // Goes wrong here
  151. // w.Remove (statusBar);
  152. // w.Remove (statusBar2);
  153. // w.Add (statusBar);
  154. // w.Add (statusBar2);
  155. // // These assertions fail
  156. // Assert.Equal (Dim.Fill (0), menuBars [0].Width);
  157. // Assert.Equal (Dim.Fill (0), menuBars [1].Width);
  158. //}
  159. }