BorderTests.cs 19 KB

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