AbsoluteLayoutTests.cs 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. using Xunit.Abstractions;
  2. //using GraphViewTests = Terminal.Gui.Views.GraphViewTests;
  3. // Alias Console to MockConsole so we don't accidentally use Console
  4. namespace Terminal.Gui.ViewTests;
  5. public class AbsoluteLayoutTests
  6. {
  7. private readonly ITestOutputHelper _output;
  8. public AbsoluteLayoutTests (ITestOutputHelper output) { _output = output; }
  9. [Fact]
  10. [TestRespondersDisposed]
  11. public void AbsoluteLayout_Change_Height_or_Width_Absolute ()
  12. {
  13. var frame = new Rectangle (1, 2, 3, 4);
  14. var newFrame = new Rectangle (1, 2, 30, 40);
  15. var v = new View { Frame = frame };
  16. v.Height = newFrame.Height;
  17. v.Width = newFrame.Width;
  18. Assert.True (v.LayoutStyle == LayoutStyle.Absolute);
  19. Assert.Equal (newFrame, v.Frame);
  20. Assert.Equal (
  21. new Rectangle (0, 0, newFrame.Width, newFrame.Height),
  22. v.Viewport
  23. ); // With Absolute Viewport *is* deterministic before Layout
  24. Assert.Equal (Pos.At (1), v.X);
  25. Assert.Equal (Pos.At (2), v.Y);
  26. Assert.Equal ($"Absolute({newFrame.Height})", v.Height.ToString ());
  27. Assert.Equal ($"Absolute({newFrame.Width})", v.Width.ToString ());
  28. v.Dispose ();
  29. }
  30. [Fact]
  31. [TestRespondersDisposed]
  32. public void AbsoluteLayout_Change_Height_or_Width_MakesComputed ()
  33. {
  34. var v = new View { Frame = Rectangle.Empty };
  35. v.Height = Dim.Fill ();
  36. v.Width = Dim.Fill ();
  37. Assert.True (v.LayoutStyle == LayoutStyle.Computed);
  38. v.Dispose ();
  39. }
  40. [Fact]
  41. [TestRespondersDisposed]
  42. public void AbsoluteLayout_Change_X_or_Y_Absolute ()
  43. {
  44. var frame = new Rectangle (1, 2, 3, 4);
  45. var newFrame = new Rectangle (10, 20, 3, 4);
  46. var v = new View { Frame = frame };
  47. v.X = newFrame.X;
  48. v.Y = newFrame.Y;
  49. Assert.True (v.LayoutStyle == LayoutStyle.Absolute);
  50. Assert.Equal (newFrame, v.Frame);
  51. Assert.Equal (
  52. new Rectangle (0, 0, newFrame.Width, newFrame.Height),
  53. v.Viewport
  54. ); // With Absolute Viewport *is* deterministic before Layout
  55. Assert.Equal ($"Absolute({newFrame.X})", v.X.ToString ());
  56. Assert.Equal ($"Absolute({newFrame.Y})", v.Y.ToString ());
  57. Assert.Equal (Dim.Sized (3), v.Width);
  58. Assert.Equal (Dim.Sized (4), v.Height);
  59. v.Dispose ();
  60. }
  61. [Fact]
  62. [TestRespondersDisposed]
  63. public void AbsoluteLayout_Change_X_or_Y_MakesComputed ()
  64. {
  65. var v = new View { Frame = Rectangle.Empty };
  66. v.X = Pos.Center ();
  67. v.Y = Pos.Center ();
  68. Assert.True (v.LayoutStyle == LayoutStyle.Computed);
  69. v.Dispose ();
  70. }
  71. [Fact]
  72. [TestRespondersDisposed]
  73. public void AbsoluteLayout_Change_X_Y_Height_Width_Absolute ()
  74. {
  75. var v = new View { Frame = Rectangle.Empty };
  76. v.X = 1;
  77. v.Y = 2;
  78. v.Height = 3;
  79. v.Width = 4;
  80. Assert.True (v.LayoutStyle == LayoutStyle.Absolute);
  81. v.Dispose ();
  82. v = new View { Frame = Rectangle.Empty };
  83. v.X = Pos.Center ();
  84. v.Y = Pos.Center ();
  85. v.Width = Dim.Fill ();
  86. v.Height = Dim.Fill ();
  87. Assert.True (v.LayoutStyle == LayoutStyle.Computed);
  88. v.Dispose ();
  89. v = new View { Frame = Rectangle.Empty };
  90. v.X = Pos.Center ();
  91. v.Y = Pos.Center ();
  92. v.Width = Dim.Fill ();
  93. v.Height = Dim.Fill ();
  94. Assert.True (v.LayoutStyle == LayoutStyle.Computed);
  95. v.X = 1;
  96. Assert.True (v.LayoutStyle == LayoutStyle.Computed);
  97. v.Dispose ();
  98. v = new View { Frame = Rectangle.Empty };
  99. v.X = Pos.Center ();
  100. v.Y = Pos.Center ();
  101. v.Width = Dim.Fill ();
  102. v.Height = Dim.Fill ();
  103. Assert.True (v.LayoutStyle == LayoutStyle.Computed);
  104. v.Y = 2;
  105. Assert.True (v.LayoutStyle == LayoutStyle.Computed);
  106. v.Dispose ();
  107. v = new View { Frame = Rectangle.Empty };
  108. v.X = Pos.Center ();
  109. v.Y = Pos.Center ();
  110. v.Width = Dim.Fill ();
  111. v.Height = Dim.Fill ();
  112. Assert.True (v.LayoutStyle == LayoutStyle.Computed);
  113. v.Width = 3;
  114. Assert.True (v.LayoutStyle == LayoutStyle.Computed);
  115. v.Dispose ();
  116. v = new View { Frame = Rectangle.Empty };
  117. v.X = Pos.Center ();
  118. v.Y = Pos.Center ();
  119. v.Width = Dim.Fill ();
  120. v.Height = Dim.Fill ();
  121. Assert.True (v.LayoutStyle == LayoutStyle.Computed);
  122. v.Height = 3;
  123. Assert.True (v.LayoutStyle == LayoutStyle.Computed);
  124. v.Dispose ();
  125. v = new View { Frame = Rectangle.Empty };
  126. v.X = Pos.Center ();
  127. v.Y = Pos.Center ();
  128. v.Width = Dim.Fill ();
  129. v.Height = Dim.Fill ();
  130. Assert.True (v.LayoutStyle == LayoutStyle.Computed);
  131. v.X = 1;
  132. v.Y = 2;
  133. v.Height = 3;
  134. v.Width = 4;
  135. Assert.True (v.LayoutStyle == LayoutStyle.Absolute);
  136. v.Dispose ();
  137. }
  138. [Fact]
  139. [TestRespondersDisposed]
  140. public void AbsoluteLayout_Constructor ()
  141. {
  142. var v = new View ();
  143. Assert.True (v.LayoutStyle == LayoutStyle.Absolute);
  144. v.Dispose ();
  145. var frame = Rectangle.Empty;
  146. v = new View { Frame = frame };
  147. Assert.True (v.LayoutStyle == LayoutStyle.Absolute);
  148. Assert.Equal (frame, v.Frame);
  149. Assert.Equal (
  150. new Rectangle (0, 0, frame.Width, frame.Height),
  151. v.Viewport
  152. ); // With Absolute Viewport *is* deterministic before Layout
  153. Assert.Equal (Pos.At (0), v.X);
  154. Assert.Equal (Pos.At (0), v.Y);
  155. Assert.Equal (Dim.Sized (0), v.Width);
  156. Assert.Equal (Dim.Sized (0), v.Height);
  157. v.Dispose ();
  158. frame = new Rectangle (1, 2, 3, 4);
  159. v = new View { Frame = frame };
  160. Assert.True (v.LayoutStyle == LayoutStyle.Absolute);
  161. Assert.Equal (frame, v.Frame);
  162. Assert.Equal (
  163. new Rectangle (0, 0, frame.Width, frame.Height),
  164. v.Viewport
  165. ); // With Absolute Viewport *is* deterministic before Layout
  166. Assert.Equal (Pos.At (1), v.X);
  167. Assert.Equal (Pos.At (2), v.Y);
  168. Assert.Equal (Dim.Sized (3), v.Width);
  169. Assert.Equal (Dim.Sized (4), v.Height);
  170. v.Dispose ();
  171. v = new View { Frame = frame, Text = "v" };
  172. Assert.True (v.LayoutStyle == LayoutStyle.Absolute);
  173. Assert.Equal (frame, v.Frame);
  174. Assert.Equal (
  175. new Rectangle (0, 0, frame.Width, frame.Height),
  176. v.Viewport
  177. ); // With Absolute Viewport *is* deterministic before Layout
  178. Assert.Equal (Pos.At (1), v.X);
  179. Assert.Equal (Pos.At (2), v.Y);
  180. Assert.Equal (Dim.Sized (3), v.Width);
  181. Assert.Equal (Dim.Sized (4), v.Height);
  182. v.Dispose ();
  183. v = new View { X = frame.X, Y = frame.Y, Text = "v" };
  184. Assert.True (v.LayoutStyle == LayoutStyle.Absolute);
  185. // BUGBUG: v2 - I think the default size should be 0,0 not 1,1
  186. // That is correct it should be 0,0 because AutoSize is false
  187. // and the size wasn't set on the initializer
  188. Assert.Equal (new Rectangle (frame.X, frame.Y, 0, 0), v.Frame);
  189. Assert.Equal (new Rectangle (0, 0, 0, 0), v.Viewport); // With Absolute Viewport *is* deterministic before Layout
  190. Assert.Equal (Pos.At (1), v.X);
  191. Assert.Equal (Pos.At (2), v.Y);
  192. Assert.Equal (Dim.Sized (0), v.Width);
  193. Assert.Equal (Dim.Sized (0), v.Height);
  194. v.Dispose ();
  195. v = new View ();
  196. Assert.True (v.LayoutStyle == LayoutStyle.Absolute);
  197. Assert.Equal (new Rectangle (0, 0, 0, 0), v.Frame);
  198. Assert.Equal (new Rectangle (0, 0, 0, 0), v.Viewport); // With Absolute Viewport *is* deterministic before Layout
  199. Assert.Equal (Pos.At (0), v.X);
  200. Assert.Equal (Pos.At (0), v.Y);
  201. Assert.Equal (Dim.Sized (0), v.Width);
  202. Assert.Equal (Dim.Sized (0), v.Height);
  203. v.Dispose ();
  204. v = new View { X = frame.X, Y = frame.Y, Width = frame.Width, Height = frame.Height };
  205. Assert.True (v.LayoutStyle == LayoutStyle.Absolute);
  206. Assert.Equal (new Rectangle (frame.X, frame.Y, 3, 4), v.Frame);
  207. Assert.Equal (new Rectangle (0, 0, 3, 4), v.Viewport); // With Absolute Viewport *is* deterministic before Layout
  208. Assert.Equal (Pos.At (1), v.X);
  209. Assert.Equal (Pos.At (2), v.Y);
  210. Assert.Equal (Dim.Sized (3), v.Width);
  211. Assert.Equal (Dim.Sized (4), v.Height);
  212. v.Dispose ();
  213. }
  214. [Fact]
  215. [TestRespondersDisposed]
  216. public void AbsoluteLayout_LayoutSubviews ()
  217. {
  218. var superRect = new Rectangle (0, 0, 100, 100);
  219. var super = new View { Frame = superRect, Text = "super" };
  220. Assert.True (super.LayoutStyle == LayoutStyle.Absolute);
  221. var v1 = new View { X = 0, Y = 0, Width = 10, Height = 10 };
  222. Assert.True (v1.LayoutStyle == LayoutStyle.Absolute);
  223. var v2 = new View { X = 10, Y = 10, Width = 10, Height = 10 };
  224. Assert.True (v2.LayoutStyle == LayoutStyle.Absolute);
  225. super.Add (v1, v2);
  226. Assert.True (v1.LayoutStyle == LayoutStyle.Absolute);
  227. Assert.True (v2.LayoutStyle == LayoutStyle.Absolute);
  228. super.LayoutSubviews ();
  229. Assert.Equal (new Rectangle (0, 0, 10, 10), v1.Frame);
  230. Assert.Equal (new Rectangle (10, 10, 10, 10), v2.Frame);
  231. super.Dispose ();
  232. }
  233. }