BorderTests.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635
  1. using System;
  2. using System.Reflection.Emit;
  3. using Xunit;
  4. using Xunit.Abstractions;
  5. using Rune = System.Rune;
  6. namespace Terminal.Gui.ViewTests {
  7. public class BorderTests {
  8. readonly ITestOutputHelper output;
  9. public BorderTests (ITestOutputHelper output)
  10. {
  11. this.output = output;
  12. }
  13. [Fact, AutoInitShutdown]
  14. public void Constructor_Defaults ()
  15. {
  16. var b = new Border ();
  17. Assert.Equal (BorderStyle.None, b.BorderStyle);
  18. Assert.False (b.DrawMarginFrame);
  19. Assert.Equal (Thickness.Empty, b.BorderThickness);
  20. Assert.Equal (Color.Black, b.ForgroundColor);
  21. Assert.Equal (Color.Black, b.BackgroundColor);
  22. Assert.Equal (Thickness.Empty, b.PaddingThickness);
  23. Assert.False (b.Effect3D);
  24. Assert.Equal (new Point (1, 1), b.Effect3DOffset);
  25. Assert.Null (b.Effect3DBrush);
  26. }
  27. //[Fact]
  28. //public void BorderStyle_Different_None_Ensures_DrawMarginFrame_To_True ()
  29. //{
  30. // var b = new Border () {
  31. // BorderStyle = BorderStyle.Single,
  32. // DrawMarginFrame = false
  33. // };
  34. // Assert.True (b.DrawMarginFrame);
  35. // b.BorderStyle = BorderStyle.None;
  36. // Assert.True (b.DrawMarginFrame);
  37. // b.DrawMarginFrame = false;
  38. // Assert.False (b.DrawMarginFrame);
  39. //}
  40. //[Fact, AutoInitShutdown]
  41. // public void ActualWidth_ActualHeight ()
  42. // {
  43. // var v = new View (new Rect (5, 10, 60, 20), "", new Border ());
  44. //[Fact]
  45. //public void ToplevelContainer_LayoutStyle_Computed_Constuctor_ ()
  46. //{
  47. // var tc = new Border.ToplevelContainer (new Border ());
  48. // Assert.Equal (LayoutStyle.Computed, tc.LayoutStyle);
  49. //}
  50. //[Fact]
  51. //public void ToplevelContainer_LayoutStyle_Absolute_Constuctor_ ()
  52. //{
  53. // var tc = new Border.ToplevelContainer (new Rect (1, 2, 3, 4), new Border ());
  54. // Assert.Equal (LayoutStyle.Absolute, tc.LayoutStyle);
  55. //}
  56. //[Fact]
  57. //public void GetSumThickness_Test ()
  58. //{
  59. // var b = new Border () {
  60. // BorderThickness = new Thickness (1, 2, 3, 4),
  61. // Padding = new Thickness (4, 3, 2, 1)
  62. // };
  63. // Assert.Equal (new Thickness (5, 5, 5, 5), b.GetSumThickness ());
  64. //}
  65. //[Fact]
  66. //[AutoInitShutdown]
  67. //public void DrawContent_With_Child_Border ()
  68. //{
  69. // var top = Application.Top;
  70. // var driver = (FakeDriver)Application.Driver;
  71. // [Fact]
  72. // [AutoInitShutdown]
  73. // public void DrawContent_With_Child_Border ()
  74. // {
  75. // var top = Application.Top;
  76. // var driver = (FakeDriver)Application.Driver;
  77. // top.LayoutSubviews ();
  78. // label.Redraw (label.Bounds);
  79. // var frame = label.Frame;
  80. // var drawMarginFrame = label.Border.DrawMarginFrame ? 1 : 0;
  81. // var sumThickness = label.Border.GetSumThickness ();
  82. // var padding = label.Border.Padding;
  83. // var effect3DOffset = label.Border.Effect3DOffset;
  84. // var borderStyle = label.Border.BorderStyle;
  85. // // Check the upper BorderThickness
  86. // for (int r = frame.Y - drawMarginFrame - sumThickness.Top;
  87. // r < frame.Y - drawMarginFrame - padding.Top; r++) {
  88. // for (int c = frame.X - drawMarginFrame - sumThickness.Left;
  89. // c < frame.Right + drawMarginFrame + sumThickness.Right; c++) {
  90. // var color = (Attribute)driver.Contents [r, c, 1];
  91. // Assert.Equal (Color.Red, color.Background);
  92. // }
  93. // }
  94. // // Check the left BorderThickness
  95. // for (int r = frame.Y - drawMarginFrame - padding.Top;
  96. // r < frame.Bottom + drawMarginFrame + padding.Bottom; r++) {
  97. // for (int c = frame.X - drawMarginFrame - sumThickness.Left;
  98. // c < frame.X - drawMarginFrame - padding.Left; c++) {
  99. // var color = (Attribute)driver.Contents [r, c, 1];
  100. // Assert.Equal (Color.Red, color.Background);
  101. // }
  102. // }
  103. // // Check the right BorderThickness
  104. // for (int r = frame.Y - drawMarginFrame - padding.Top;
  105. // r < frame.Bottom + drawMarginFrame + padding.Bottom; r++) {
  106. // for (int c = frame.Right + drawMarginFrame + padding.Right;
  107. // c < frame.Right + drawMarginFrame - sumThickness.Right; c++) {
  108. // var color = (Attribute)driver.Contents [r, c, 1];
  109. // Assert.Equal (Color.Red, color.Background);
  110. // }
  111. // }
  112. // // Check the lower BorderThickness
  113. // for (int r = frame.Bottom + drawMarginFrame + padding.Bottom;
  114. // r < frame.Bottom + drawMarginFrame + sumThickness.Bottom; r++) {
  115. // for (int c = frame.X - drawMarginFrame - sumThickness.Left;
  116. // c < frame.Right + drawMarginFrame + sumThickness.Right; c++) {
  117. // var color = (Attribute)driver.Contents [r, c, 1];
  118. // Assert.Equal (Color.Red, color.Background);
  119. // }
  120. // }
  121. // // Check the upper Padding
  122. // for (int r = frame.Y - drawMarginFrame - padding.Top;
  123. // r < frame.Y - drawMarginFrame; r++) {
  124. // for (int c = frame.X - drawMarginFrame - padding.Left;
  125. // c < frame.Right + drawMarginFrame + padding.Right; c++) {
  126. // var color = (Attribute)driver.Contents [r, c, 1];
  127. // Assert.Equal (Color.BrightGreen, color.Background);
  128. // }
  129. // }
  130. // // Check the left Padding
  131. // for (int r = frame.Y - drawMarginFrame;
  132. // r < frame.Bottom + drawMarginFrame; r++) {
  133. // for (int c = frame.X - drawMarginFrame - padding.Left;
  134. // c < frame.X - drawMarginFrame; c++) {
  135. // var color = (Attribute)driver.Contents [r, c, 1];
  136. // Assert.Equal (Color.BrightGreen, color.Background);
  137. // }
  138. // }
  139. // // Check the right Padding
  140. // for (int r = frame.Y - drawMarginFrame;
  141. // r < frame.Bottom + drawMarginFrame; r++) {
  142. // for (int c = frame.Right + drawMarginFrame;
  143. // c < frame.Right + drawMarginFrame - padding.Right; c++) {
  144. // var color = (Attribute)driver.Contents [r, c, 1];
  145. // Assert.Equal (Color.BrightGreen, color.Background);
  146. // }
  147. // }
  148. // // Check the lower Padding
  149. // for (int r = frame.Bottom + drawMarginFrame;
  150. // r < frame.Bottom + drawMarginFrame + padding.Bottom; r++) {
  151. // for (int c = frame.X - drawMarginFrame - padding.Left;
  152. // c < frame.Right + drawMarginFrame + padding.Right; c++) {
  153. // var color = (Attribute)driver.Contents [r, c, 1];
  154. // Assert.Equal (Color.BrightGreen, color.Background);
  155. // }
  156. // }
  157. // Rune hLine = drawMarginFrame > 0 ? (borderStyle == BorderStyle.Single
  158. // ? driver.HLine : (borderStyle == BorderStyle.Double ? driver.HDLine : ' ')) : ' ';
  159. // Rune vLine = drawMarginFrame > 0 ? (borderStyle == BorderStyle.Single
  160. // ? driver.VLine : (borderStyle == BorderStyle.Double ? driver.VDLine : ' ')) : ' ';
  161. // Rune uRCorner = drawMarginFrame > 0 ? (borderStyle == BorderStyle.Single
  162. // ? driver.URCorner : (borderStyle == BorderStyle.Double ? driver.URDCorner : ' ')) : ' ';
  163. // Rune uLCorner = drawMarginFrame > 0 ? (borderStyle == BorderStyle.Single
  164. // ? driver.ULCorner : (borderStyle == BorderStyle.Double ? driver.ULDCorner : ' ')) : ' ';
  165. // Rune lLCorner = drawMarginFrame > 0 ? (borderStyle == BorderStyle.Single
  166. // ? driver.LLCorner : (borderStyle == BorderStyle.Double ? driver.LLDCorner : ' ')) : ' ';
  167. // Rune lRCorner = drawMarginFrame > 0 ? (borderStyle == BorderStyle.Single
  168. // ? driver.LRCorner : (borderStyle == BorderStyle.Double ? driver.LRDCorner : ' ')) : ' ';
  169. // var text = "";
  170. // // Check the MarginFrame
  171. // for (int r = frame.Y - drawMarginFrame;
  172. // r < frame.Bottom + drawMarginFrame; r++) {
  173. // for (int c = frame.X - drawMarginFrame;
  174. // c <= frame.Right + drawMarginFrame - 1; c++) {
  175. // var color = (Attribute)driver.Contents [r, c, 1];
  176. // var rune = (Rune)driver.Contents [r, c, 0];
  177. // Assert.Equal (Color.Black, color.Background);
  178. // if (c == frame.X - drawMarginFrame && r == frame.Y - drawMarginFrame) {
  179. // Assert.Equal (uLCorner, rune);
  180. // } else if (c == frame.Right && r == frame.Y - drawMarginFrame) {
  181. // Assert.Equal (uRCorner, rune);
  182. // } else if (c == frame.X - drawMarginFrame && r == frame.Bottom) {
  183. // Assert.Equal (lLCorner, rune);
  184. // } else if (c == frame.Right && r == frame.Bottom) {
  185. // Assert.Equal (lRCorner, rune);
  186. // } else if (c >= frame.X && (r == frame.Y - drawMarginFrame
  187. // || r == frame.Bottom)) {
  188. // Assert.Equal (hLine, rune);
  189. // } else if ((c == frame.X - drawMarginFrame || c == frame.Right)
  190. // && r >= frame.Y && r <= frame.Bottom - drawMarginFrame) {
  191. // Assert.Equal (vLine, rune);
  192. // } else {
  193. // text += rune.ToString ();
  194. // }
  195. // }
  196. // }
  197. // Assert.Equal ("This is a test", text.Trim ());
  198. // var color = (Attribute)driver.Contents [r, c, 1];
  199. // var rune = (Rune)driver.Contents [r, c, 0];
  200. // if (r == frame.Y - drawMarginFrame || r == frame.Bottom + drawMarginFrame - 1
  201. // || c == frame.X - drawMarginFrame || c == frame.Right + drawMarginFrame - 1) {
  202. // Assert.Equal (Color.BrightGreen, color.Background);
  203. // } else {
  204. // Assert.Equal (Color.Black, color.Background);
  205. // }
  206. // if (c == frame.X - drawMarginFrame && r == frame.Y - drawMarginFrame) {
  207. // Assert.Equal (uLCorner, rune);
  208. // } else if (c == frame.Right && r == frame.Y - drawMarginFrame) {
  209. // Assert.Equal (uRCorner, rune);
  210. // } else if (c == frame.X - drawMarginFrame && r == frame.Bottom) {
  211. // Assert.Equal (lLCorner, rune);
  212. // } else if (c == frame.Right && r == frame.Bottom) {
  213. // Assert.Equal (lRCorner, rune);
  214. // } else if (c >= frame.X && (r == frame.Y - drawMarginFrame
  215. // || r == frame.Bottom)) {
  216. // Assert.Equal (hLine, rune);
  217. // } else if ((c == frame.X - drawMarginFrame || c == frame.Right)
  218. // && r >= frame.Y && r <= frame.Bottom - drawMarginFrame) {
  219. // Assert.Equal (vLine, rune);
  220. // } else {
  221. // text += rune.ToString ();
  222. // }
  223. // }
  224. // }
  225. // Assert.Equal ("This is a test", text.Trim ());
  226. // var color = (Attribute)driver.Contents [r, c, 1];
  227. // Assert.Equal (Color.DarkGray, color.Background);
  228. // }
  229. // }
  230. // // Check the left Effect3D
  231. // for (int r = frame.Y - drawMarginFrame - sumThickness.Top + effect3DOffset.Y;
  232. // r < frame.Bottom + drawMarginFrame + sumThickness.Bottom + effect3DOffset.Y; r++) {
  233. // for (int c = frame.X - drawMarginFrame - sumThickness.Left + effect3DOffset.X;
  234. // c < frame.X - drawMarginFrame - sumThickness.Left; c++) {
  235. // var color = (Attribute)driver.Contents [r, c, 1];
  236. // Assert.Equal (Color.DarkGray, color.Background);
  237. // }
  238. // }
  239. // // Check the right Effect3D
  240. // for (int r = frame.Y - drawMarginFrame - sumThickness.Top + effect3DOffset.Y;
  241. // r < frame.Bottom + drawMarginFrame + sumThickness.Bottom + effect3DOffset.Y; r++) {
  242. // for (int c = frame.Right + drawMarginFrame + sumThickness.Right;
  243. // c < frame.Right + drawMarginFrame + sumThickness.Right + effect3DOffset.X; c++) {
  244. // var color = (Attribute)driver.Contents [r, c, 1];
  245. // Assert.Equal (Color.DarkGray, color.Background);
  246. // }
  247. // }
  248. // // Check the lower Effect3D
  249. // for (int r = frame.Bottom + drawMarginFrame + sumThickness.Bottom;
  250. // r < frame.Bottom + drawMarginFrame + sumThickness.Bottom + effect3DOffset.Y; r++) {
  251. // for (int c = frame.X - drawMarginFrame - sumThickness.Left + effect3DOffset.X;
  252. // c < frame.Right + drawMarginFrame + sumThickness.Right + effect3DOffset.X; c++) {
  253. // var color = (Attribute)driver.Contents [r, c, 1];
  254. // Assert.Equal (Color.DarkGray, color.Background);
  255. // }
  256. // }
  257. // // Check the Child frame
  258. // for (int r = frame.Y; r < frame.Y + frame.Height; r++) {
  259. // for (int c = frame.X; c < frame.X + frame.Width; c++) {
  260. // var color = (Attribute)driver.Contents [r, c, 1];
  261. // Assert.Equal (Color.BrightGreen, color.Foreground);
  262. // Assert.Equal (Color.Black, color.Background);
  263. // }
  264. // }
  265. //}
  266. //[Fact]
  267. //[AutoInitShutdown]
  268. //public void DrawContent_With_Parent_Border ()
  269. //{
  270. // var top = Application.Top;
  271. // var driver = (FakeDriver)Application.Driver;
  272. // [Fact]
  273. // [AutoInitShutdown]
  274. // public void DrawContent_With_Parent_Border ()
  275. // {
  276. // var top = Application.Top;
  277. // var driver = (FakeDriver)Application.Driver;
  278. // top.LayoutSubviews ();
  279. // frameView.Redraw (frameView.Bounds);
  280. // var frame = frameView.Frame;
  281. // var drawMarginFrame = frameView.Border.DrawMarginFrame ? 1 : 0;
  282. // var borderThickness = frameView.Border.BorderThickness;
  283. // var padding = frameView.Border.Padding;
  284. // var effect3DOffset = frameView.Border.Effect3DOffset;
  285. // var borderStyle = frameView.Border.BorderStyle;
  286. // // Check the upper BorderThickness
  287. // for (int r = frame.Y;
  288. // r < Math.Min (frame.Y + borderThickness.Top, frame.Bottom); r++) {
  289. // for (int c = frame.X;
  290. // c < frame.Right; c++) {
  291. // var color = (Attribute)driver.Contents [r, c, 1];
  292. // Assert.Equal (Color.Red, color.Background);
  293. // }
  294. // }
  295. // // Check the left BorderThickness
  296. // for (int r = Math.Min (frame.Y + borderThickness.Top, frame.Bottom);
  297. // r < frame.Bottom - borderThickness.Bottom; r++) {
  298. // for (int c = frame.X;
  299. // c < Math.Min (frame.X + borderThickness.Left, frame.Right); c++) {
  300. // var color = (Attribute)driver.Contents [r, c, 1];
  301. // Assert.Equal (Color.Red, color.Background);
  302. // }
  303. // }
  304. // // Check the right BorderThickness
  305. // for (int r = Math.Min (frame.Y + borderThickness.Top, frame.Bottom);
  306. // r < frame.Bottom - borderThickness.Bottom; r++) {
  307. // for (int c = Math.Max (frame.Right - borderThickness.Right, frame.X);
  308. // c < frame.Right; c++) {
  309. // var color = (Attribute)driver.Contents [r, c, 1];
  310. // Assert.Equal (Color.Red, color.Background);
  311. // }
  312. // }
  313. // // Check the lower BorderThickness
  314. // for (int r = Math.Max (frame.Bottom - borderThickness.Bottom, frame.Y);
  315. // r < frame.Bottom; r++) {
  316. // for (int c = frame.X;
  317. // c < frame.Right; c++) {
  318. // var color = (Attribute)driver.Contents [r, c, 1];
  319. // Assert.Equal (Color.Red, color.Background);
  320. // }
  321. // }
  322. // //TODO: Re-do padding tests
  323. // //// Check the upper Padding
  324. // //for (int r = frame.Y + borderThickness.Top;
  325. // // r < Math.Min (frame.Y + sumThickness.Top, frame.Bottom - borderThickness.Bottom); r++) {
  326. // // for (int c = frame.X + borderThickness.Left;
  327. // // c < frame.Right - borderThickness.Right; c++) {
  328. // // var color = (Attribute)driver.Contents [r, c, 1];
  329. // // Assert.Equal (Color.BrightGreen, color.Background);
  330. // // }
  331. // //}
  332. // //// Check the left Padding
  333. // //for (int r = frame.Y + sumThickness.Top;
  334. // // r < frame.Bottom - sumThickness.Bottom; r++) {
  335. // // for (int c = frame.X + borderThickness.Left;
  336. // // c < Math.Min (frame.X + sumThickness.Left, frame.Right - borderThickness.Right); c++) {
  337. // // var color = (Attribute)driver.Contents [r, c, 1];
  338. // // Assert.Equal (Color.BrightGreen, color.Background);
  339. // // }
  340. // //}
  341. // //// Check the right Padding
  342. // //// Draw the right Padding
  343. // //for (int r = frame.Y + sumThickness.Top;
  344. // // r < frame.Bottom - sumThickness.Bottom; r++) {
  345. // // for (int c = Math.Max (frame.Right - sumThickness.Right, frame.X + sumThickness.Left);
  346. // // c < Math.Max (frame.Right - borderThickness.Right, frame.X + sumThickness.Left); c++) {
  347. // // var color = (Attribute)driver.Contents [r, c, 1];
  348. // // Assert.Equal (Color.BrightGreen, color.Background);
  349. // // }
  350. // //}
  351. // //// Check the lower Padding
  352. // //for (int r = Math.Max (frame.Bottom - sumThickness.Bottom, frame.Y + borderThickness.Top);
  353. // // r < frame.Bottom - borderThickness.Bottom; r++) {
  354. // // for (int c = frame.X + borderThickness.Left;
  355. // // c < frame.Right - borderThickness.Right; c++) {
  356. // // var color = (Attribute)driver.Contents [r, c, 1];
  357. // // Assert.Equal (Color.BrightGreen, color.Background);
  358. // // }
  359. // //}
  360. // Rune hLine = drawMarginFrame > 0 ? (borderStyle == BorderStyle.Single
  361. // ? driver.HLine : (borderStyle == BorderStyle.Double ? driver.HDLine : ' ')) : ' ';
  362. // Rune vLine = drawMarginFrame > 0 ? (borderStyle == BorderStyle.Single
  363. // ? driver.VLine : (borderStyle == BorderStyle.Double ? driver.VDLine : ' ')) : ' ';
  364. // Rune uRCorner = drawMarginFrame > 0 ? (borderStyle == BorderStyle.Single
  365. // ? driver.URCorner : (borderStyle == BorderStyle.Double ? driver.URDCorner : ' ')) : ' ';
  366. // Rune uLCorner = drawMarginFrame > 0 ? (borderStyle == BorderStyle.Single
  367. // ? driver.ULCorner : (borderStyle == BorderStyle.Double ? driver.ULDCorner : ' ')) : ' ';
  368. // Rune lLCorner = drawMarginFrame > 0 ? (borderStyle == BorderStyle.Single
  369. // ? driver.LLCorner : (borderStyle == BorderStyle.Double ? driver.LLDCorner : ' ')) : ' ';
  370. // Rune lRCorner = drawMarginFrame > 0 ? (borderStyle == BorderStyle.Single
  371. // ? driver.LRCorner : (borderStyle == BorderStyle.Double ? driver.LRDCorner : ' ')) : ' ';
  372. // // TODO: redo margin tests
  373. // //var text = "";
  374. // //// Check the MarginFrame
  375. // //for (int r = frame.Y + sumThickness.Top;
  376. // // r < frame.Bottom - sumThickness.Bottom; r++) {
  377. // // for (int c = frame.X + sumThickness.Left;
  378. // // c <= frame.Right - sumThickness.Right - 1; c++) {
  379. // // var color = (Attribute)driver.Contents [r, c, 1];
  380. // // var rune = (Rune)driver.Contents [r, c, 0];
  381. // // Assert.Equal (Color.Black, color.Background);
  382. // // if (c == frame.X + sumThickness.Left && r == frame.Y + sumThickness.Top) {
  383. // // Assert.Equal (uLCorner, rune);
  384. // // } else if (c == frame.Right - drawMarginFrame - sumThickness.Right
  385. // // && r == frame.Y + sumThickness.Top) {
  386. // // Assert.Equal (uRCorner, rune);
  387. // // } else if (c == frame.X + sumThickness.Left
  388. // // && r == frame.Bottom - drawMarginFrame - sumThickness.Bottom) {
  389. // // Assert.Equal (lLCorner, rune);
  390. // // } else if (c == frame.Right - drawMarginFrame - sumThickness.Right
  391. // // && r == frame.Bottom - drawMarginFrame - sumThickness.Bottom) {
  392. // // Assert.Equal (lRCorner, rune);
  393. // // } else if (c > frame.X + sumThickness.Left
  394. // // && (r == frame.Y + sumThickness.Top
  395. // // || r == frame.Bottom - drawMarginFrame - sumThickness.Bottom)) {
  396. // // Assert.Equal (hLine, rune);
  397. // // } else if ((c == frame.X + sumThickness.Left
  398. // // || c == frame.Right - drawMarginFrame - sumThickness.Right)
  399. // // && r >= frame.Y + drawMarginFrame + sumThickness.Top) {
  400. // // Assert.Equal (vLine, rune);
  401. // // } else {
  402. // // text += rune.ToString ();
  403. // // }
  404. // // }
  405. // //}
  406. // //Assert.Equal ("This is a test", text.Trim ());
  407. // var color = (Attribute)driver.Contents [r, c, 1];
  408. // var rune = (Rune)driver.Contents [r, c, 0];
  409. // Assert.Equal (Color.Black, color.Background);
  410. // if (c == frame.X + sumThickness.Left && r == frame.Y + sumThickness.Top) {
  411. // Assert.Equal (uLCorner, rune);
  412. // } else if (c == frame.Right - drawMarginFrame - sumThickness.Right
  413. // && r == frame.Y + sumThickness.Top) {
  414. // Assert.Equal (uRCorner, rune);
  415. // } else if (c == frame.X + sumThickness.Left
  416. // && r == frame.Bottom - drawMarginFrame - sumThickness.Bottom) {
  417. // Assert.Equal (lLCorner, rune);
  418. // } else if (c == frame.Right - drawMarginFrame - sumThickness.Right
  419. // && r == frame.Bottom - drawMarginFrame - sumThickness.Bottom) {
  420. // Assert.Equal (lRCorner, rune);
  421. // } else if (c > frame.X + sumThickness.Left
  422. // && (r == frame.Y + sumThickness.Top
  423. // || r == frame.Bottom - drawMarginFrame - sumThickness.Bottom)) {
  424. // Assert.Equal (hLine, rune);
  425. // } else if ((c == frame.X + sumThickness.Left
  426. // || c == frame.Right - drawMarginFrame - sumThickness.Right)
  427. // && r >= frame.Y + drawMarginFrame + sumThickness.Top) {
  428. // Assert.Equal (vLine, rune);
  429. // } else {
  430. // text += rune.ToString ();
  431. // }
  432. // }
  433. // }
  434. // Assert.Equal ("This is a test", text.Trim ());
  435. // // Check the upper Effect3D
  436. // for (int r = frame.Y + effect3DOffset.Y;
  437. // r < frame.Y; r++) {
  438. // for (int c = frame.X + effect3DOffset.X;
  439. // c < frame.Right + effect3DOffset.X; c++) {
  440. // // var color = (Attribute)driver.Contents [r, c, 1];
  441. // // Assert.Equal (Color.DarkGray, color.Background);
  442. // // }
  443. // //}
  444. // //// Check the left Effect3D
  445. // //for (int r = frame.Y + effect3DOffset.Y;
  446. // // r < frame.Bottom + effect3DOffset.Y; r++) {
  447. // // for (int c = frame.X + effect3DOffset.X;
  448. // // c < frame.X; c++) {
  449. // // var color = (Attribute)driver.Contents [r, c, 1];
  450. // // Assert.Equal (Color.DarkGray, color.Background);
  451. // // }
  452. // //}
  453. // //// Check the right Effect3D
  454. // //for (int r = frame.Y + effect3DOffset.Y;
  455. // // r < frame.Bottom + effect3DOffset.Y; r++) {
  456. // // for (int c = frame.Right;
  457. // // c < frame.Right + effect3DOffset.X; c++) {
  458. // // var color = (Attribute)driver.Contents [r, c, 1];
  459. // // Assert.Equal (Color.DarkGray, color.Background);
  460. // // }
  461. // //}
  462. // //// Check the lower Effect3D
  463. // //for (int r = frame.Bottom;
  464. // // r < frame.Bottom + effect3DOffset.Y; r++) {
  465. // // for (int c = frame.X + effect3DOffset.X;
  466. // // c < frame.Right + effect3DOffset.X; c++) {
  467. // // var color = (Attribute)driver.Contents [r, c, 1];
  468. // // Assert.Equal (Color.DarkGray, color.Background);
  469. // // }
  470. // //}
  471. // //// Check the Child frame
  472. // //for (int r = frame.Y + drawMarginFrame + sumThickness.Top;
  473. // // r < frame.Bottom - drawMarginFrame - sumThickness.Bottom; r++) {
  474. // // for (int c = frame.X + drawMarginFrame + sumThickness.Left;
  475. // // c < frame.Right - drawMarginFrame - sumThickness.Right; c++) {
  476. // // var color = (Attribute)driver.Contents [r, c, 1];
  477. // // Assert.Equal (Color.BrightGreen, color.Foreground);
  478. // // Assert.Equal (Color.Black, color.Background);
  479. // // }
  480. // //}
  481. //}
  482. [Fact, AutoInitShutdown]
  483. public void BorderOnControlWithNoChildren ()
  484. {
  485. var label = new TextField ("Loading...") {
  486. Border = new Border () {
  487. BorderStyle = BorderStyle.Single,
  488. DrawMarginFrame = true,
  489. PaddingThickness = new Thickness (1),
  490. ForgroundColor = Color.White
  491. }
  492. };
  493. Application.Top.Add (label);
  494. Assert.Null (Record.Exception (() => label.Redraw (label.Bounds)));
  495. }
  496. // [Fact, AutoInitShutdown]
  497. // public void BorderStyle_And_DrawMarginFrame_Gets_Sets ()
  498. // {
  499. // var lblTop = new Label ("At 0,0");
  500. // var lblFrame = new Label ("Centered") { X = Pos.Center (), Y = Pos.Center () };
  501. // var frame = new FrameView () { Y = 1, Width = 20, Height = 3 };
  502. // var lblFill = new Label () { Width = Dim.Fill(),Height = Dim.Fill(), Visible = false };
  503. // var fillText = new System.Text.StringBuilder ();
  504. // for (int i = 0; i < frame.Bounds.Height; i++) {
  505. // if (i > 0) {
  506. // fillText.AppendLine ("");
  507. // }
  508. // for (int j = 0; j < frame.Bounds.Width; j++) {
  509. // fillText.Append ("█");
  510. // }
  511. // }
  512. // lblFill.Text = fillText.ToString ();
  513. // frame.Add (lblFill, lblFrame);
  514. // var lblBottom = new Label ("At 0,4") { Y = 4 };
  515. // Application.Top.Add (lblTop, frame, lblBottom);
  516. // Application.Begin (Application.Top);
  517. // Assert.Equal (BorderStyle.Single, frame.Border.BorderStyle);
  518. // Assert.True (frame.Border.DrawMarginFrame);
  519. // TestHelpers.AssertDriverContentsWithFrameAre (@"
  520. //At 0,0
  521. //┌──────────────────┐
  522. //│ Centered │
  523. //└──────────────────┘
  524. //At 0,4 ", output);
  525. // frame.Border.BorderStyle = BorderStyle.None;
  526. // Application.Refresh ();
  527. // Assert.True (frame.Border.DrawMarginFrame);
  528. // TestHelpers.AssertDriverContentsWithFrameAre (@"
  529. //At 0,0
  530. // Centered
  531. //At 0,4 ", output);
  532. //// frame.Border.DrawMarginFrame = false;
  533. //// lblFill.Visible = true;
  534. //// Application.Refresh ();
  535. //// TestHelpers.AssertDriverContentsWithFrameAre (@"
  536. ////At 0,0
  537. ////████████████████████
  538. ////██████Centered██████
  539. ////████████████████████
  540. ////At 0,4 ", output);
  541. //}
  542. }
  543. }