2
0

StatusBarTests.cs 6.4 KB

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