WindowTests.cs 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. using System;
  2. using Xunit;
  3. using Xunit.Abstractions;
  4. //using GraphViewTests = Terminal.Gui.Views.GraphViewTests;
  5. // Alias Console to MockConsole so we don't accidentally use Console
  6. using Console = Terminal.Gui.FakeConsole;
  7. using NStack;
  8. using Terminal.Gui;
  9. namespace Terminal.Gui.TopLevelTests {
  10. public class WindowTests {
  11. readonly ITestOutputHelper output;
  12. public WindowTests (ITestOutputHelper output)
  13. {
  14. this.output = output;
  15. }
  16. // BUGBUG: v2 - move Title related tests from here to `ViewTests.cs` or to a new `TitleTests.cs`
  17. [Fact]
  18. public void New_Initializes ()
  19. {
  20. // Parameterless
  21. var r = new Window ();
  22. Assert.NotNull (r);
  23. Assert.Equal (ustring.Empty, r.Title);
  24. Assert.Equal (LayoutStyle.Computed, r.LayoutStyle);
  25. Assert.Equal ("Window()({X=0,Y=0,Width=0,Height=0})", r.ToString ());
  26. Assert.True (r.CanFocus);
  27. Assert.False (r.HasFocus);
  28. Assert.Equal (new Rect (0, 0, 0, 0), r.Bounds);
  29. Assert.Equal (new Rect (0, 0, 0, 0), r.Frame);
  30. Assert.Null (r.Focused);
  31. Assert.NotNull (r.ColorScheme);
  32. Assert.Equal (Dim.Fill (0), r.Width);
  33. Assert.Equal (Dim.Fill (0), r.Height);
  34. Assert.Null (r.X);
  35. Assert.Null (r.Y);
  36. Assert.False (r.IsCurrentTop);
  37. Assert.Empty (r.Id);
  38. Assert.False (r.WantContinuousButtonPressed);
  39. Assert.False (r.WantMousePositionReports);
  40. Assert.Null (r.SuperView);
  41. Assert.Null (r.MostFocused);
  42. Assert.Equal (TextDirection.LeftRight_TopBottom, r.TextDirection);
  43. // Empty Rect
  44. r = new Window (Rect.Empty, "title");
  45. Assert.NotNull (r);
  46. Assert.Equal ("title", r.Title);
  47. Assert.Equal (LayoutStyle.Absolute, r.LayoutStyle);
  48. Assert.Equal ("Window(title)({X=0,Y=0,Width=0,Height=0})", r.ToString ());
  49. Assert.True (r.CanFocus);
  50. Assert.False (r.HasFocus);
  51. Assert.Equal (new Rect (0, 0, 0, 0), r.Bounds);
  52. Assert.Equal (new Rect (0, 0, 0, 0), r.Frame);
  53. Assert.Null (r.Focused);
  54. Assert.NotNull (r.ColorScheme);
  55. Assert.Null (r.Width); // All view Dim are initialized now in the IsAdded setter,
  56. Assert.Null (r.Height); // avoiding Dim errors.
  57. Assert.Null (r.X); // All view Pos are initialized now in the IsAdded setter,
  58. Assert.Null (r.Y); // avoiding Pos errors.
  59. Assert.False (r.IsCurrentTop);
  60. Assert.Equal (r.Title, r.Id);
  61. Assert.False (r.WantContinuousButtonPressed);
  62. Assert.False (r.WantMousePositionReports);
  63. Assert.Null (r.SuperView);
  64. Assert.Null (r.MostFocused);
  65. Assert.Equal (TextDirection.LeftRight_TopBottom, r.TextDirection);
  66. // Rect with values
  67. r = new Window (new Rect (1, 2, 3, 4), "title");
  68. Assert.Equal ("title", r.Title);
  69. Assert.NotNull (r);
  70. Assert.Equal (LayoutStyle.Absolute, r.LayoutStyle);
  71. Assert.Equal ("Window(title)({X=1,Y=2,Width=3,Height=4})", r.ToString ());
  72. Assert.True (r.CanFocus);
  73. Assert.False (r.HasFocus);
  74. Assert.Equal (new Rect (0, 0, 3, 4), r.Bounds);
  75. Assert.Equal (new Rect (1, 2, 3, 4), r.Frame);
  76. Assert.Null (r.Focused);
  77. Assert.NotNull (r.ColorScheme);
  78. Assert.Null (r.Width);
  79. Assert.Null (r.Height);
  80. Assert.Null (r.X);
  81. Assert.Null (r.Y);
  82. Assert.False (r.IsCurrentTop);
  83. Assert.Equal (r.Title, r.Id);
  84. Assert.False (r.WantContinuousButtonPressed);
  85. Assert.False (r.WantMousePositionReports);
  86. Assert.Null (r.SuperView);
  87. Assert.Null (r.MostFocused);
  88. Assert.Equal (TextDirection.LeftRight_TopBottom, r.TextDirection);
  89. r.Dispose ();
  90. }
  91. [Fact]
  92. public void Set_Title_Fires_TitleChanging ()
  93. {
  94. var r = new Window ();
  95. Assert.Equal (ustring.Empty, r.Title);
  96. string expectedOld = null;
  97. string expectedDuring = null;
  98. string expectedAfter = null;
  99. bool cancel = false;
  100. r.TitleChanging += (s, args) => {
  101. Assert.Equal (expectedOld, args.OldTitle);
  102. Assert.Equal (expectedDuring, args.NewTitle);
  103. args.Cancel = cancel;
  104. };
  105. expectedOld = string.Empty;
  106. r.Title = expectedDuring = expectedAfter = "title";
  107. Assert.Equal (expectedAfter, r.Title.ToString ());
  108. expectedOld = r.Title.ToString ();
  109. r.Title = expectedDuring = expectedAfter = "a different title";
  110. Assert.Equal (expectedAfter, r.Title.ToString ());
  111. // Now setup cancelling the change and change it back to "title"
  112. cancel = true;
  113. expectedOld = r.Title.ToString ();
  114. r.Title = expectedDuring = "title";
  115. Assert.Equal (expectedAfter, r.Title.ToString ());
  116. r.Dispose ();
  117. }
  118. [Fact]
  119. public void Set_Title_Fires_TitleChanged ()
  120. {
  121. var r = new Window ();
  122. Assert.Equal (ustring.Empty, r.Title);
  123. string expectedOld = null;
  124. string expected = null;
  125. r.TitleChanged += (s, args) => {
  126. Assert.Equal (expectedOld, args.OldTitle);
  127. Assert.Equal (r.Title, args.NewTitle);
  128. };
  129. expected = "title";
  130. expectedOld = r.Title.ToString ();
  131. r.Title = expected;
  132. Assert.Equal (expected, r.Title.ToString ());
  133. }
  134. [Fact, AutoInitShutdown]
  135. public void MenuBar_And_StatusBar_Inside_Window ()
  136. {
  137. var menu = new MenuBar (new MenuBarItem [] {
  138. new MenuBarItem ("File", new MenuItem [] {
  139. new MenuItem ("Open", "", null),
  140. new MenuItem ("Quit", "", null),
  141. }),
  142. new MenuBarItem ("Edit", new MenuItem [] {
  143. new MenuItem ("Copy", "", null),
  144. })
  145. });
  146. var sb = new StatusBar (new StatusItem [] {
  147. new StatusItem (Key.CtrlMask | Key.Q, "~^Q~ Quit", null),
  148. new StatusItem (Key.CtrlMask | Key.O, "~^O~ Open", null),
  149. new StatusItem (Key.CtrlMask | Key.C, "~^C~ Copy", null),
  150. });
  151. var fv = new FrameView ("Frame View") {
  152. Y = 1,
  153. Width = Dim.Fill (),
  154. Height = Dim.Fill (1)
  155. };
  156. var win = new Window ();
  157. win.Add (menu, sb, fv);
  158. var top = Application.Top;
  159. top.Add (win);
  160. Application.Begin (top);
  161. ((FakeDriver)Application.Driver).SetBufferSize (20, 10);
  162. TestHelpers.AssertDriverContentsWithFrameAre (@"
  163. ┌──────────────────┐
  164. │ File Edit │
  165. │┌┤Frame View├────┐│
  166. ││ ││
  167. ││ ││
  168. ││ ││
  169. ││ ││
  170. │└────────────────┘│
  171. │ ^Q Quit │ ^O Open│
  172. └──────────────────┘", output);
  173. ((FakeDriver)Application.Driver).SetBufferSize (40, 20);
  174. TestHelpers.AssertDriverContentsWithFrameAre (@"
  175. ┌──────────────────────────────────────┐
  176. │ File Edit │
  177. │┌┤Frame View├────────────────────────┐│
  178. ││ ││
  179. ││ ││
  180. ││ ││
  181. ││ ││
  182. ││ ││
  183. ││ ││
  184. ││ ││
  185. ││ ││
  186. ││ ││
  187. ││ ││
  188. ││ ││
  189. ││ ││
  190. ││ ││
  191. ││ ││
  192. │└────────────────────────────────────┘│
  193. │ ^Q Quit │ ^O Open │ ^C Copy │
  194. └──────────────────────────────────────┘", output);
  195. ((FakeDriver)Application.Driver).SetBufferSize (20, 10);
  196. TestHelpers.AssertDriverContentsWithFrameAre (@"
  197. ┌──────────────────┐
  198. │ File Edit │
  199. │┌┤Frame View├────┐│
  200. ││ ││
  201. ││ ││
  202. ││ ││
  203. ││ ││
  204. │└────────────────┘│
  205. │ ^Q Quit │ ^O Open│
  206. └──────────────────┘", output);
  207. }
  208. [Fact, AutoInitShutdown]
  209. public void OnCanFocusChanged_Only_Must_ContentView_Forces_SetFocus_After_IsInitialized_Is_True ()
  210. {
  211. var win1 = new Window () { Id = "win1", Width = 10, Height = 1 };
  212. var view1 = new View () { Id = "view1", Width = Dim.Fill (), Height = Dim.Fill (), CanFocus = true };
  213. var win2 = new Window () { Id = "win2", Y = 6, Width = 10, Height = 1 };
  214. var view2 = new View () { Id = "view2", Width = Dim.Fill (), Height = Dim.Fill (), CanFocus = true };
  215. win2.Add (view2);
  216. win1.Add (view1, win2);
  217. Application.Begin (win1);
  218. Assert.True (win1.HasFocus);
  219. Assert.True (view1.HasFocus);
  220. Assert.False (win2.HasFocus);
  221. Assert.False (view2.HasFocus);
  222. }
  223. }
  224. }