StatusBarTests.cs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. using UnitTests;
  2. using Xunit.Abstractions;
  3. namespace UnitTests.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 += OnApplicationOnIteration;
  85. Application.Run ().Dispose ();
  86. Application.Iteration -= OnApplicationOnIteration;
  87. return;
  88. void OnApplicationOnIteration (object s, IterationEventArgs a)
  89. {
  90. if (iteration == 0)
  91. {
  92. Assert.Equal ("", msg);
  93. Application.RaiseKeyDownEvent (Application.QuitKey);
  94. }
  95. else if (iteration == 1)
  96. {
  97. Assert.Equal ("Quiting...", msg);
  98. msg = "";
  99. sb.NewMouseEvent (new () { Position = new (0, 0), Flags = MouseFlags.Button1Clicked });
  100. }
  101. else
  102. {
  103. Assert.Equal ("Quiting...", msg);
  104. Application.RequestStop ();
  105. }
  106. iteration++;
  107. }
  108. }
  109. [Fact]
  110. public void StatusBar_Constructor_Default ()
  111. {
  112. var sb = new StatusBar ();
  113. Assert.Empty (sb.SubViews);
  114. Assert.True (sb.CanFocus);
  115. Assert.Equal ("Menu", sb.SchemeName);
  116. Assert.Equal (0, sb.X);
  117. Assert.Equal ("AnchorEnd", sb.Y.ToString ());
  118. Assert.Equal (Dim.Fill (), sb.Width);
  119. sb.Layout ();
  120. Assert.Equal (1, sb.Frame.Height);
  121. }
  122. //[Fact]
  123. //public void RemoveAndThenAddStatusBar_ShouldNotChangeWidth ()
  124. //{
  125. // StatusBar statusBar;
  126. // StatusBar statusBar2;
  127. // var w = new Window ();
  128. // statusBar2 = new StatusBar () { Id = "statusBar2" };
  129. // statusBar = new StatusBar () { Id = "statusBar" };
  130. // w.Width = Dim.Fill (0);
  131. // w.Height = Dim.Fill (0);
  132. // w.X = 0;
  133. // w.Y = 0;
  134. // w.Visible = true;
  135. // w.Modal = false;
  136. // w.Title = "";
  137. // statusBar.Width = Dim.Fill (0);
  138. // statusBar.Height = 1;
  139. // statusBar.X = 0;
  140. // statusBar.Y = 0;
  141. // statusBar.Visible = true;
  142. // w.Add (statusBar);
  143. // Assert.Equal (w.StatusBar, statusBar);
  144. // statusBar2.Width = Dim.Fill (0);
  145. // statusBar2.Height = 1;
  146. // statusBar2.X = 0;
  147. // statusBar2.Y = 4;
  148. // statusBar2.Visible = true;
  149. // w.Add (statusBar2);
  150. // Assert.Equal (w.StatusBar, statusBar2);
  151. // var menuBars = w.SubViews.OfType<StatusBar> ().ToArray ();
  152. // Assert.Equal (2, menuBars.Length);
  153. // Assert.Equal (Dim.Fill (0), menuBars [0].Width);
  154. // Assert.Equal (Dim.Fill (0), menuBars [1].Width);
  155. // // Goes wrong here
  156. // w.Remove (statusBar);
  157. // w.Remove (statusBar2);
  158. // w.Add (statusBar);
  159. // w.Add (statusBar2);
  160. // // These assertions fail
  161. // Assert.Equal (Dim.Fill (0), menuBars [0].Width);
  162. // Assert.Equal (Dim.Fill (0), menuBars [1].Width);
  163. //}
  164. }