PanelViewTests.cs 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using Xunit;
  7. namespace Terminal.Gui.Views {
  8. public class PanelViewTests {
  9. [Fact]
  10. public void Constructor_Defaults ()
  11. {
  12. var pv = new PanelView ();
  13. Assert.False (pv.CanFocus);
  14. Assert.False (pv.Visible);
  15. Assert.False (pv.UsePanelFrame);
  16. Assert.Null (pv.Child);
  17. pv = new PanelView (new Label ("This is a test."));
  18. Assert.False (pv.CanFocus);
  19. Assert.True (pv.Visible);
  20. Assert.False (pv.UsePanelFrame);
  21. Assert.NotNull (pv.Child);
  22. Assert.NotNull (pv.Border);
  23. Assert.NotNull (pv.Child.Border);
  24. }
  25. [Fact]
  26. public void Child_Sets_To_Null_Remove_From_Subviews_PanelView ()
  27. {
  28. var pv = new PanelView (new Label ("This is a test."));
  29. Assert.NotNull (pv.Child);
  30. Assert.Equal (1, pv.Subviews[0].Subviews.Count);
  31. pv.Child = null;
  32. Assert.Null (pv.Child);
  33. Assert.Equal (0, pv.Subviews [0].Subviews.Count);
  34. }
  35. [Fact]
  36. public void Add_View_Also_Sets_Child ()
  37. {
  38. var pv = new PanelView ();
  39. Assert.Null (pv.Child);
  40. Assert.Equal (0, pv.Subviews [0].Subviews.Count);
  41. pv.Add (new Label ("This is a test."));
  42. Assert.NotNull (pv.Child);
  43. Assert.Equal (1, pv.Subviews [0].Subviews.Count);
  44. }
  45. [Fact]
  46. public void Add_More_Views_Remove_Last_Child_Before__Only_One_Is_Allowed ()
  47. {
  48. var pv = new PanelView (new Label ("This is a test."));
  49. Assert.NotNull (pv.Child);
  50. Assert.Equal (1, pv.Subviews [0].Subviews.Count);
  51. Assert.IsType<Label> (pv.Child);
  52. pv.Add (new TextField ("This is a test."));
  53. Assert.NotNull (pv.Child);
  54. Assert.Equal (1, pv.Subviews [0].Subviews.Count);
  55. Assert.IsNotType<Label> (pv.Child);
  56. Assert.IsType<TextField> (pv.Child);
  57. }
  58. [Fact]
  59. public void Remove_RemoveAll_View_Also_Sets_Child_To_Null ()
  60. {
  61. var pv = new PanelView (new Label ("This is a test."));
  62. Assert.NotNull (pv.Child);
  63. Assert.Equal (1, pv.Subviews [0].Subviews.Count);
  64. pv.Remove (pv.Child);
  65. Assert.Null (pv.Child);
  66. Assert.Equal (0, pv.Subviews [0].Subviews.Count);
  67. pv = new PanelView (new Label ("This is a test."));
  68. Assert.NotNull (pv.Child);
  69. Assert.Equal (1, pv.Subviews [0].Subviews.Count);
  70. pv.RemoveAll ();
  71. Assert.Null (pv.Child);
  72. Assert.Equal (0, pv.Subviews [0].Subviews.Count);
  73. }
  74. [Fact]
  75. [AutoInitShutdown]
  76. public void AdjustContainer_Without_Border ()
  77. {
  78. var top = Application.Top;
  79. var win = new Window ();
  80. var pv = new PanelView (new Label ("This is a test."));
  81. win.Add (pv);
  82. top.Add (win);
  83. Application.Begin (top);
  84. Assert.Equal (new Rect (0, 0, 15, 1), pv.Frame);
  85. Assert.Equal (new Rect (0, 0, 15, 1), pv.Child.Frame);
  86. }
  87. [Fact]
  88. [AutoInitShutdown]
  89. public void AdjustContainer_With_Border_Absolute_Values ()
  90. {
  91. var top = Application.Top;
  92. var win = new Window ();
  93. var pv = new PanelView (new Label ("This is a test.") {
  94. Border = new Border () {
  95. BorderStyle = BorderStyle.Double,
  96. BorderThickness = new Thickness (1, 2, 3, 4),
  97. Padding = new Thickness (1, 2, 3, 4)
  98. }
  99. });
  100. win.Add (pv);
  101. top.Add (win);
  102. Application.Begin (top);
  103. Assert.False (pv.Child.Border.Effect3D);
  104. Assert.Equal (new Rect (0, 0, 25, 15), pv.Frame);
  105. Assert.Equal (new Rect (0, 0, 15, 1), pv.Child.Frame);
  106. pv.Child.Border.Effect3D = true;
  107. Assert.True (pv.Child.Border.Effect3D);
  108. Assert.Equal (new Rect (0, 0, 25, 15), pv.Frame);
  109. Assert.Equal (new Rect (0, 0, 15, 1), pv.Child.Frame);
  110. pv.Child.Border.Effect3DOffset = new Point (-1, -1);
  111. Assert.Equal (new Point (-1, -1), pv.Child.Border.Effect3DOffset);
  112. Assert.Equal (new Rect (0, 0, 25, 15), pv.Frame);
  113. Assert.Equal (new Rect (0, 0, 15, 1), pv.Child.Frame);
  114. }
  115. [Fact]
  116. [AutoInitShutdown]
  117. public void AdjustContainer_With_Border_Computed_Values ()
  118. {
  119. var top = Application.Top;
  120. var win = new Window ();
  121. var pv = new PanelView (new TextView () {
  122. Width = Dim.Fill (),
  123. Height = Dim.Fill (),
  124. Border = new Border () {
  125. BorderStyle = BorderStyle.Double,
  126. BorderThickness = new Thickness (1, 2, 3, 4),
  127. Padding = new Thickness (1, 2, 3, 4)
  128. }
  129. });
  130. var pv1 = new PanelView (new TextView () {
  131. Width = Dim.Fill (1),
  132. Height = Dim.Fill (1),
  133. Border = new Border () {
  134. BorderStyle = BorderStyle.Double,
  135. BorderThickness = new Thickness (1, 2, 3, 4),
  136. Padding = new Thickness (1, 2, 3, 4)
  137. }
  138. });
  139. var pv2 = new PanelView (new TextView () {
  140. Width = Dim.Fill (2),
  141. Height = Dim.Fill (2),
  142. Border = new Border () {
  143. BorderStyle = BorderStyle.Double,
  144. BorderThickness = new Thickness (1, 2, 3, 4),
  145. Padding = new Thickness (1, 2, 3, 4)
  146. }
  147. });
  148. win.Add (pv, pv1, pv2);
  149. top.Add (win);
  150. Application.Begin (top);
  151. Assert.Equal (new Rect (0, 0, 78, 23), pv.Frame);
  152. Assert.Equal (new Rect (0, 0, 68, 9), pv.Child.Frame);
  153. Assert.Equal (new Rect (0, 0, 77, 22), pv1.Frame);
  154. Assert.Equal (new Rect (0, 0, 65, 6), pv1.Child.Frame);
  155. Assert.Equal (new Rect (0, 0, 76, 21), pv2.Frame);
  156. Assert.Equal (new Rect (0, 0, 62, 3), pv2.Child.Frame);
  157. pv.Child.Border.Effect3D = pv1.Child.Border.Effect3D = pv2.Child.Border.Effect3D = true;
  158. Assert.True (pv.Child.Border.Effect3D);
  159. Assert.Equal (new Rect (0, 0, 78, 23), pv.Frame);
  160. Assert.Equal (new Rect (0, 0, 68, 9), pv.Child.Frame);
  161. Assert.Equal (new Rect (0, 0, 77, 22), pv1.Frame);
  162. Assert.Equal (new Rect (0, 0, 65, 6), pv1.Child.Frame);
  163. Assert.Equal (new Rect (0, 0, 76, 21), pv2.Frame);
  164. Assert.Equal (new Rect (0, 0, 62, 3), pv2.Child.Frame);
  165. pv.Child.Border.Effect3DOffset = pv1.Child.Border.Effect3DOffset = pv2.Child.Border.Effect3DOffset = new Point (-1, -1);
  166. Assert.Equal (new Point (-1, -1), pv.Child.Border.Effect3DOffset);
  167. Assert.Equal (new Rect (0, 0, 78, 23), pv.Frame);
  168. Assert.Equal (new Rect (0, 0, 68, 9), pv.Child.Frame);
  169. Assert.Equal (new Rect (0, 0, 77, 22), pv1.Frame);
  170. Assert.Equal (new Rect (0, 0, 65, 6), pv1.Child.Frame);
  171. Assert.Equal (new Rect (0, 0, 76, 21), pv2.Frame);
  172. Assert.Equal (new Rect (0, 0, 62, 3), pv2.Child.Frame);
  173. }
  174. [Fact]
  175. [AutoInitShutdown]
  176. public void UsePanelFrame_False_PanelView_Always_Respect_The_PanelView_Upper_Left_Corner_Position_And_The_Child_Size ()
  177. {
  178. var top = Application.Top;
  179. var win = new Window ();
  180. var pv = new PanelView (new Label ("This is a test.")) {
  181. X = 2,
  182. Y = 4,
  183. Width = 20,
  184. Height = 10
  185. };
  186. var pv1 = new PanelView (new TextField (3, 4, 15, "This is a test.")) {
  187. X = 2,
  188. Y = 4,
  189. Width = 20,
  190. Height = 10
  191. };
  192. var pv2 = new PanelView (new TextView () {
  193. X = 5,
  194. Y = 6,
  195. Width = Dim.Fill (),
  196. Height = Dim.Fill ()
  197. }) {
  198. X = 2,
  199. Y = 4,
  200. Width = 20,
  201. Height = 10
  202. };
  203. win.Add (pv, pv1, pv2);
  204. top.Add (win);
  205. Application.Begin (top);
  206. Assert.False (pv.UsePanelFrame);
  207. Assert.False (pv.Border.Effect3D);
  208. Assert.Equal (pv.Child.Border, pv.Border);
  209. Assert.False (pv1.UsePanelFrame);
  210. Assert.False (pv1.Border.Effect3D);
  211. Assert.Equal (pv1.Child.Border, pv1.Border);
  212. Assert.False (pv2.UsePanelFrame);
  213. Assert.False (pv2.Border.Effect3D);
  214. Assert.Equal (pv2.Child.Border, pv2.Border);
  215. Assert.Equal (new Rect (2, 4, 15, 1), pv.Frame);
  216. Assert.Equal (new Rect (0, 0, 15, 1), pv.Child.Frame);
  217. Assert.Equal (new Rect (2, 4, 18, 5), pv1.Frame);
  218. Assert.Equal (new Rect (3, 4, 15, 1), pv1.Child.Frame);
  219. Assert.Equal (new Rect (2, 4, 76, 19), pv2.Frame);
  220. Assert.Equal (new Rect (5, 6, 71, 13), pv2.Child.Frame);
  221. pv.Border.Effect3D = pv1.Border.Effect3D = pv2.Border.Effect3D = true;
  222. Assert.Equal (new Rect (2, 4, 15, 1), pv.Frame);
  223. Assert.Equal (new Rect (0, 0, 15, 1), pv.Child.Frame);
  224. Assert.Equal (new Rect (2, 4, 18, 5), pv1.Frame);
  225. Assert.Equal (new Rect (3, 4, 15, 1), pv1.Child.Frame);
  226. Assert.Equal (new Rect (2, 4, 76, 19), pv2.Frame);
  227. Assert.Equal (new Rect (5, 6, 71, 13), pv2.Child.Frame);
  228. pv.Border.Effect3DOffset = pv1.Border.Effect3DOffset = pv2.Border.Effect3DOffset = new Point (-1, -1);
  229. Assert.Equal (new Rect (2, 4, 15, 1), pv.Frame);
  230. Assert.Equal (new Rect (0, 0, 15, 1), pv.Child.Frame);
  231. Assert.Equal (new Rect (2, 4, 18, 5), pv1.Frame);
  232. Assert.Equal (new Rect (3, 4, 15, 1), pv1.Child.Frame);
  233. Assert.Equal (new Rect (2, 4, 76, 19), pv2.Frame);
  234. Assert.Equal (new Rect (5, 6, 71, 13), pv2.Child.Frame);
  235. }
  236. [Fact]
  237. [AutoInitShutdown]
  238. public void UsePanelFrame_True_PanelView_Position_And_Size_Are_Used_Depending_On_Effect3DOffset ()
  239. {
  240. var top = Application.Top;
  241. var win = new Window ();
  242. var pv = new PanelView (new TextView () {
  243. X = 2,
  244. Y = 4,
  245. Width = 20,
  246. Height = 10
  247. }) {
  248. X = 5,
  249. Y = 6,
  250. Width = Dim.Fill (),
  251. Height = Dim.Fill (),
  252. UsePanelFrame = true
  253. };
  254. var pv1 = new PanelView (new TextView () {
  255. X = 5,
  256. Y = 6,
  257. Width = Dim.Fill (),
  258. Height = Dim.Fill ()
  259. }) {
  260. X = 2,
  261. Y = 4,
  262. Width = 20,
  263. Height = 10,
  264. UsePanelFrame = true
  265. };
  266. win.Add (pv, pv1);
  267. top.Add (win);
  268. Application.Begin (top);
  269. Assert.Equal (new Rect (5, 6, 73, 17), pv.Frame);
  270. Assert.Equal (new Rect (2, 4, 20, 10), pv.Child.Frame);
  271. Assert.Equal (new Rect (2, 4, 20, 10), pv1.Frame);
  272. Assert.Equal (new Rect (5, 6, 15, 4), pv1.Child.Frame);
  273. pv.Border.Effect3D = pv1.Border.Effect3D = true;
  274. Assert.Equal (new Rect (5, 6, 73, 17), pv.Frame);
  275. Assert.Equal (new Rect (2, 4, 20, 10), pv.Child.Frame);
  276. Assert.Equal (new Rect (2, 4, 20, 10), pv1.Frame);
  277. Assert.Equal (new Rect (5, 6, 15, 4), pv1.Child.Frame);
  278. pv.Border.Effect3DOffset = pv1.Border.Effect3DOffset = new Point (-1, -1);
  279. Assert.Equal (new Rect (6, 7, 73, 17), pv.Frame);
  280. Assert.Equal (new Rect (2, 4, 20, 10), pv.Child.Frame);
  281. Assert.Equal (new Rect (3, 5, 20, 10), pv1.Frame);
  282. Assert.Equal (new Rect (5, 6, 15, 4), pv1.Child.Frame);
  283. }
  284. }
  285. }