WindowTests.cs 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. using Xunit.Abstractions;
  2. namespace Terminal.Gui.ViewsTests;
  3. public class WindowTests
  4. {
  5. private readonly ITestOutputHelper _output;
  6. public WindowTests (ITestOutputHelper output) { _output = output; }
  7. [Fact]
  8. [AutoInitShutdown]
  9. public void Activating_MenuBar_By_Alt_Key_Does_Not_Throw ()
  10. {
  11. var menu = new MenuBar (
  12. new MenuBarItem []
  13. {
  14. new (
  15. "Child",
  16. new MenuItem []
  17. {
  18. new ("_Create Child", "", null)
  19. })
  20. });
  21. var win = new Window ();
  22. win.Add (menu);
  23. Application.Top.Add (win);
  24. Application.Begin (Application.Top);
  25. Exception exception = Record.Exception (() => win.NewKeyDownEvent (new Key (KeyCode.AltMask)));
  26. Assert.Null (exception);
  27. }
  28. [Fact]
  29. [AutoInitShutdown]
  30. public void MenuBar_And_StatusBar_Inside_Window ()
  31. {
  32. var menu = new MenuBar (
  33. new MenuBarItem []
  34. {
  35. new (
  36. "File",
  37. new MenuItem []
  38. {
  39. new ("Open", "", null),
  40. new ("Quit", "", null)
  41. }),
  42. new (
  43. "Edit",
  44. new MenuItem []
  45. {
  46. new ("Copy", "", null)
  47. })
  48. });
  49. var sb = new StatusBar (
  50. new StatusItem []
  51. {
  52. new (KeyCode.CtrlMask | KeyCode.Q, "~^Q~ Quit", null),
  53. new (KeyCode.CtrlMask | KeyCode.O, "~^O~ Open", null),
  54. new (KeyCode.CtrlMask | KeyCode.C, "~^C~ Copy", null)
  55. });
  56. var fv = new FrameView ("Frame View")
  57. {
  58. Y = 1,
  59. Width = Dim.Fill (),
  60. Height = Dim.Fill (1)
  61. };
  62. var win = new Window ();
  63. win.Add (menu, sb, fv);
  64. Toplevel top = Application.Top;
  65. top.Add (win);
  66. Application.Begin (top);
  67. ((FakeDriver)Application.Driver).SetBufferSize (20, 10);
  68. TestHelpers.AssertDriverContentsWithFrameAre (
  69. @"
  70. ┌──────────────────┐
  71. │ File Edit │
  72. │┌┤Frame View├────┐│
  73. ││ ││
  74. ││ ││
  75. ││ ││
  76. ││ ││
  77. │└────────────────┘│
  78. │ ^Q Quit │ ^O Open│
  79. └──────────────────┘",
  80. _output);
  81. ((FakeDriver)Application.Driver).SetBufferSize (40, 20);
  82. TestHelpers.AssertDriverContentsWithFrameAre (
  83. @"
  84. ┌──────────────────────────────────────┐
  85. │ File Edit │
  86. │┌┤Frame View├────────────────────────┐│
  87. ││ ││
  88. ││ ││
  89. ││ ││
  90. ││ ││
  91. ││ ││
  92. ││ ││
  93. ││ ││
  94. ││ ││
  95. ││ ││
  96. ││ ││
  97. ││ ││
  98. ││ ││
  99. ││ ││
  100. ││ ││
  101. │└────────────────────────────────────┘│
  102. │ ^Q Quit │ ^O Open │ ^C Copy │
  103. └──────────────────────────────────────┘",
  104. _output);
  105. ((FakeDriver)Application.Driver).SetBufferSize (20, 10);
  106. TestHelpers.AssertDriverContentsWithFrameAre (
  107. @"
  108. ┌──────────────────┐
  109. │ File Edit │
  110. │┌┤Frame View├────┐│
  111. ││ ││
  112. ││ ││
  113. ││ ││
  114. ││ ││
  115. │└────────────────┘│
  116. │ ^Q Quit │ ^O Open│
  117. └──────────────────┘",
  118. _output);
  119. }
  120. [Fact]
  121. public void New_Initializes ()
  122. {
  123. // Parameterless
  124. var r = new Window ();
  125. Assert.NotNull (r);
  126. Assert.Equal (string.Empty, r.Title);
  127. // Toplevels have Width/Height set to Dim.Fill
  128. Assert.Equal (LayoutStyle.Computed, r.LayoutStyle);
  129. // If there's no SuperView, Top, or Driver, the default Fill width is int.MaxValue
  130. Assert.Equal ("Window()(0,0,2147483647,2147483647)", r.ToString ());
  131. Assert.True (r.CanFocus);
  132. Assert.False (r.HasFocus);
  133. Assert.Equal (new Rect (0, 0, 2147483645, 2147483645), r.Bounds);
  134. Assert.Equal (new Rect (0, 0, 2147483647, 2147483647), r.Frame);
  135. Assert.Null (r.Focused);
  136. Assert.NotNull (r.ColorScheme);
  137. Assert.Equal (0, r.X);
  138. Assert.Equal (0, r.Y);
  139. Assert.Equal (Dim.Fill (), r.Width);
  140. Assert.Equal (Dim.Fill (), r.Height);
  141. Assert.False (r.IsCurrentTop);
  142. Assert.Empty (r.Id);
  143. Assert.False (r.WantContinuousButtonPressed);
  144. Assert.False (r.WantMousePositionReports);
  145. Assert.Null (r.SuperView);
  146. Assert.Null (r.MostFocused);
  147. Assert.Equal (TextDirection.LeftRight_TopBottom, r.TextDirection);
  148. // Empty Rect
  149. r = new Window (Rect.Empty) { Title = "title" };
  150. Assert.NotNull (r);
  151. Assert.Equal ("title", r.Title);
  152. Assert.Equal (LayoutStyle.Absolute, r.LayoutStyle);
  153. Assert.Equal ("title", r.Title);
  154. Assert.Equal (LayoutStyle.Absolute, r.LayoutStyle);
  155. Assert.Equal ("Window(title)(0,0,0,0)", r.ToString ());
  156. Assert.True (r.CanFocus);
  157. Assert.False (r.HasFocus);
  158. Assert.Equal (new Rect (0, 0, 0, 0), r.Bounds);
  159. Assert.Equal (new Rect (0, 0, 0, 0), r.Frame);
  160. Assert.Null (r.Focused);
  161. Assert.NotNull (r.ColorScheme);
  162. Assert.Equal (0, r.X);
  163. Assert.Equal (0, r.Y);
  164. Assert.Equal (0, r.Width);
  165. Assert.Equal (0, r.Height);
  166. Assert.False (r.IsCurrentTop);
  167. Assert.Equal (r.Title, r.Id);
  168. Assert.False (r.WantContinuousButtonPressed);
  169. Assert.False (r.WantMousePositionReports);
  170. Assert.Null (r.SuperView);
  171. Assert.Null (r.MostFocused);
  172. Assert.Equal (TextDirection.LeftRight_TopBottom, r.TextDirection);
  173. // Rect with values
  174. r = new Window (new Rect (1, 2, 3, 4)) { Title = "title" };
  175. Assert.Equal ("title", r.Title);
  176. Assert.NotNull (r);
  177. Assert.Equal (LayoutStyle.Absolute, r.LayoutStyle);
  178. Assert.Equal (LayoutStyle.Absolute, r.LayoutStyle);
  179. Assert.Equal ("Window(title)(1,2,3,4)", r.ToString ());
  180. Assert.True (r.CanFocus);
  181. Assert.False (r.HasFocus);
  182. Assert.Equal (new Rect (0, 0, 1, 2), r.Bounds);
  183. Assert.Equal (new Rect (1, 2, 3, 4), r.Frame);
  184. Assert.Null (r.Focused);
  185. Assert.NotNull (r.ColorScheme);
  186. Assert.Equal (1, r.X);
  187. Assert.Equal (2, r.Y);
  188. Assert.Equal (3, r.Width);
  189. Assert.Equal (4, r.Height);
  190. Assert.False (r.IsCurrentTop);
  191. Assert.Equal (r.Title, r.Id);
  192. Assert.False (r.WantContinuousButtonPressed);
  193. Assert.False (r.WantMousePositionReports);
  194. Assert.Null (r.SuperView);
  195. Assert.Null (r.MostFocused);
  196. Assert.Equal (TextDirection.LeftRight_TopBottom, r.TextDirection);
  197. r.Dispose ();
  198. }
  199. [Fact]
  200. [AutoInitShutdown]
  201. public void OnCanFocusChanged_Only_Must_ContentView_Forces_SetFocus_After_IsInitialized_Is_True ()
  202. {
  203. var win1 = new Window { Id = "win1", Width = 10, Height = 1 };
  204. var view1 = new View { Id = "view1", Width = Dim.Fill (), Height = Dim.Fill (), CanFocus = true };
  205. var win2 = new Window { Id = "win2", Y = 6, Width = 10, Height = 1 };
  206. var view2 = new View { Id = "view2", Width = Dim.Fill (), Height = Dim.Fill (), CanFocus = true };
  207. win2.Add (view2);
  208. win1.Add (view1, win2);
  209. Application.Begin (win1);
  210. Assert.True (win1.HasFocus);
  211. Assert.True (view1.HasFocus);
  212. Assert.False (win2.HasFocus);
  213. Assert.False (view2.HasFocus);
  214. }
  215. }