BorderTests.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739
  1. using Xunit;
  2. using Xunit.Abstractions;
  3. namespace Terminal.Gui.ViewTests;
  4. public class BorderTests {
  5. readonly ITestOutputHelper _output;
  6. public BorderTests (ITestOutputHelper output)
  7. {
  8. _output = output;
  9. }
  10. [Fact]
  11. public void View_BorderStyle_Defaults ()
  12. {
  13. var view = new View ();
  14. Assert.Equal (LineStyle.None, view.BorderStyle);
  15. Assert.Equal (Thickness.Empty, view.Border.Thickness);
  16. view.Dispose ();
  17. }
  18. [Fact]
  19. public void View_SetBorderStyle ()
  20. {
  21. var view = new View ();
  22. view.BorderStyle = LineStyle.Single;
  23. Assert.Equal (LineStyle.Single, view.BorderStyle);
  24. Assert.Equal (new Thickness (1), view.Border.Thickness);
  25. view.BorderStyle = LineStyle.Double;
  26. Assert.Equal (LineStyle.Double, view.BorderStyle);
  27. Assert.Equal (new Thickness (1), view.Border.Thickness);
  28. view.BorderStyle = LineStyle.None;
  29. Assert.Equal (LineStyle.None, view.BorderStyle);
  30. Assert.Equal (Thickness.Empty, view.Border.Thickness);
  31. view.Dispose ();
  32. }
  33. [Theory, AutoInitShutdown]
  34. [InlineData (0)]
  35. [InlineData (1)]
  36. [InlineData (2)]
  37. [InlineData (3)]
  38. public void Border_With_Title_Size_Height (int height)
  39. {
  40. var win = new Window () {
  41. Title = "1234",
  42. Width = Dim.Fill (),
  43. Height = Dim.Fill ()
  44. };
  45. var rs = Application.Begin (win);
  46. bool firstIteration = false;
  47. ((FakeDriver)Application.Driver).SetBufferSize (20, height);
  48. Application.RunIteration (ref rs, ref firstIteration);
  49. var expected = string.Empty;
  50. switch (height) {
  51. case 0:
  52. //Assert.Equal (new Rect (0, 0, 17, 0), subview.Frame);
  53. expected = @"
  54. ";
  55. break;
  56. case 1:
  57. //Assert.Equal (new Rect (0, 0, 17, 0), subview.Frame);
  58. expected = @"
  59. ────────────────────";
  60. break;
  61. case 2:
  62. //Assert.Equal (new Rect (0, 0, 17, 1), subview.Frame);
  63. expected = @"
  64. ┌┤1234├────────────┐
  65. └──────────────────┘
  66. ";
  67. break;
  68. case 3:
  69. //Assert.Equal (new Rect (0, 0, 17, 2), subview.Frame);
  70. expected = @"
  71. ┌┤1234├────────────┐
  72. │ │
  73. └──────────────────┘
  74. ";
  75. break;
  76. }
  77. _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output);
  78. Application.End (rs);
  79. }
  80. [Theory, AutoInitShutdown]
  81. [InlineData (0)]
  82. [InlineData (1)]
  83. [InlineData (2)]
  84. [InlineData (3)]
  85. [InlineData (4)]
  86. [InlineData (5)]
  87. [InlineData (6)]
  88. [InlineData (7)]
  89. [InlineData (8)]
  90. [InlineData (9)]
  91. [InlineData (10)]
  92. public void Border_With_Title_Size_Width (int width)
  93. {
  94. var win = new Window () {
  95. Title = "1234",
  96. Width = Dim.Fill (),
  97. Height = Dim.Fill ()
  98. };
  99. var rs = Application.Begin (win);
  100. bool firstIteration = false;
  101. ((FakeDriver)Application.Driver).SetBufferSize (width, 3);
  102. Application.RunIteration (ref rs, ref firstIteration);
  103. var expected = string.Empty;
  104. switch (width) {
  105. case 1:
  106. //Assert.Equal (new Rect (0, 0, 17, 0), subview.Frame);
  107. expected = @"
  108. │";
  109. break;
  110. case 2:
  111. //Assert.Equal (new Rect (0, 0, 17, 1), subview.Frame);
  112. expected = @"
  113. ┌┐
  114. ││
  115. └┘";
  116. break;
  117. case 3:
  118. //Assert.Equal (new Rect (0, 0, 17, 2), subview.Frame);
  119. expected = @"
  120. ┌─┐
  121. │ │
  122. └─┘
  123. ";
  124. break;
  125. case 4:
  126. //Assert.Equal (new Rect (0, 0, 17, 3), subview.Frame);
  127. expected = @"
  128. ┌┤├┐
  129. │ │
  130. └──┘";
  131. break;
  132. case 5:
  133. //Assert.Equal (new Rect (0, 0, 17, 3), subview.Frame);
  134. expected = @"
  135. ┌┤1├┐
  136. │ │
  137. └───┘";
  138. break;
  139. case 6:
  140. //Assert.Equal (new Rect (0, 0, 17, 3), subview.Frame);
  141. expected = @"
  142. ┌┤12├┐
  143. │ │
  144. └────┘";
  145. break;
  146. case 7:
  147. //Assert.Equal (new Rect (0, 0, 17, 3), subview.Frame);
  148. expected = @"
  149. ┌┤123├┐
  150. │ │
  151. └─────┘";
  152. break;
  153. case 8:
  154. //Assert.Equal (new Rect (0, 0, 17, 3), subview.Frame);
  155. expected = @"
  156. ┌┤1234├┐
  157. │ │
  158. └──────┘";
  159. break;
  160. case 9:
  161. //Assert.Equal (new Rect (0, 0, 17, 3), subview.Frame);
  162. expected = @"
  163. ┌┤1234├─┐
  164. │ │
  165. └───────┘";
  166. break;
  167. case 10:
  168. //Assert.Equal (new Rect (0, 0, 17, 3), subview.Frame);
  169. expected = @"
  170. ┌┤1234├──┐
  171. │ │
  172. └────────┘";
  173. break;
  174. }
  175. _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output);
  176. }
  177. [Fact, AutoInitShutdown]
  178. public void NoSuperView ()
  179. {
  180. var win = new Window () {
  181. Width = Dim.Fill (),
  182. Height = Dim.Fill ()
  183. };
  184. var rs = Application.Begin (win);
  185. bool firstIteration = false;
  186. ((FakeDriver)Application.Driver).SetBufferSize (3, 3);
  187. Application.RunIteration (ref rs, ref firstIteration);
  188. var expected = @"
  189. ┌─┐
  190. │ │
  191. └─┘";
  192. _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output);
  193. }
  194. [Fact, AutoInitShutdown]
  195. public void HasSuperView ()
  196. {
  197. Application.Top.BorderStyle = LineStyle.Double;
  198. var frame = new FrameView () {
  199. Width = Dim.Fill (),
  200. Height = Dim.Fill ()
  201. };
  202. Application.Top.Add (frame);
  203. var rs = Application.Begin (Application.Top);
  204. bool firstIteration = false;
  205. ((FakeDriver)Application.Driver).SetBufferSize (5, 5);
  206. Application.RunIteration (ref rs, ref firstIteration);
  207. var expected = @"
  208. ╔═══╗
  209. ║┌─┐║
  210. ║│ │║
  211. ║└─┘║
  212. ╚═══╝";
  213. _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output);
  214. Application.End (rs);
  215. }
  216. [Fact, AutoInitShutdown]
  217. public void HasSuperView_Title ()
  218. {
  219. Application.Top.BorderStyle = LineStyle.Double;
  220. var frame = new FrameView () {
  221. Title = "1234",
  222. Width = Dim.Fill (),
  223. Height = Dim.Fill ()
  224. };
  225. Application.Top.Add (frame);
  226. var rs = Application.Begin (Application.Top);
  227. bool firstIteration = false;
  228. ((FakeDriver)Application.Driver).SetBufferSize (10, 4);
  229. Application.RunIteration (ref rs, ref firstIteration);
  230. var expected = @"
  231. ╔════════╗
  232. ║┌┤1234├┐║
  233. ║└──────┘║
  234. ╚════════╝";
  235. _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output);
  236. Application.End (rs);
  237. }
  238. [Theory]
  239. [InlineData (0, 0, 0, 1, 1)]
  240. [InlineData (1, 0, 0, 2, 2)]
  241. [InlineData (2, 0, 0, 3, 3)]
  242. [InlineData (1, 1, 0, 3, 2)]
  243. [InlineData (1, 0, 1, 2, 3)]
  244. [InlineData (1, 1, 1, 3, 3)]
  245. [InlineData (1, 10, 10, 12, 12)]
  246. public void FrameToScreen_SuperView_WithBorder (int superOffset, int frameX, int frameY, int expectedScreenX, int expectedScreenY)
  247. {
  248. var super = new View () {
  249. X = superOffset,
  250. Y = superOffset,
  251. Width = 20,
  252. Height = 20,
  253. BorderStyle = LineStyle.Single
  254. };
  255. var view = new View () {
  256. X = frameX,
  257. Y = frameY,
  258. Width = 10,
  259. Height = 10
  260. };
  261. super.Add (view);
  262. var expected = new Rect (expectedScreenX, expectedScreenY, 10, 10);
  263. var actual = view.FrameToScreen ();
  264. Assert.Equal (expected, actual);
  265. }
  266. [Theory]
  267. [InlineData (0, 0, 0, 2, 2)]
  268. [InlineData (1, 0, 0, 4, 4)]
  269. [InlineData (2, 0, 0, 6, 6)]
  270. [InlineData (1, 1, 0, 5, 4)]
  271. [InlineData (1, 0, 1, 4, 5)]
  272. [InlineData (1, 1, 1, 5, 5)]
  273. [InlineData (1, 10, 10, 14, 14)]
  274. public void FrameToScreen_NestedSuperView_WithBorder (int superOffset, int frameX, int frameY, int expectedScreenX, int expectedScreenY)
  275. {
  276. var superSuper = new View () {
  277. X = superOffset,
  278. Y = superOffset,
  279. Width = 30,
  280. Height = 30,
  281. BorderStyle = LineStyle.Single
  282. };
  283. var super = new View () {
  284. X = superOffset,
  285. Y = superOffset,
  286. Width = 20,
  287. Height = 20,
  288. BorderStyle = LineStyle.Single
  289. };
  290. superSuper.Add (super);
  291. var view = new View () {
  292. X = frameX,
  293. Y = frameY,
  294. Width = 10,
  295. Height = 10
  296. };
  297. super.Add (view);
  298. var expected = new Rect (expectedScreenX, expectedScreenY, 10, 10);
  299. var actual = view.FrameToScreen ();
  300. Assert.Equal (expected, actual);
  301. }
  302. [Theory, AutoInitShutdown]
  303. [InlineData (0)]
  304. [InlineData (1)]
  305. [InlineData (2)]
  306. [InlineData (3)]
  307. [InlineData (4)]
  308. [InlineData (5)]
  309. [InlineData (6)]
  310. [InlineData (7)]
  311. [InlineData (8)]
  312. [InlineData (9)]
  313. [InlineData (10)]
  314. public void Border_With_Title_Border_Double_Thickness_Top_Two_Size_Width (int width)
  315. {
  316. var win = new Window () {
  317. Title = "1234",
  318. Width = Dim.Fill (),
  319. Height = Dim.Fill (),
  320. BorderStyle = LineStyle.Double,
  321. };
  322. win.Border.Thickness.Top = 2;
  323. var rs = Application.Begin (win);
  324. bool firstIteration = false;
  325. ((FakeDriver)Application.Driver).SetBufferSize (width, 4);
  326. Application.RunIteration (ref rs, ref firstIteration);
  327. var expected = string.Empty;
  328. switch (width) {
  329. case 1:
  330. Assert.Equal (new Rect (0, 0, 1, 4), win.Frame);
  331. expected = @"
  332. ║";
  333. break;
  334. case 2:
  335. Assert.Equal (new Rect (0, 0, 2, 4), win.Frame);
  336. expected = @"
  337. ╔╗
  338. ║║
  339. ╚╝";
  340. break;
  341. case 3:
  342. Assert.Equal (new Rect (0, 0, 3, 4), win.Frame);
  343. expected = @"
  344. ╔═╗
  345. ║ ║
  346. ╚═╝";
  347. break;
  348. case 4:
  349. Assert.Equal (new Rect (0, 0, 4, 4), win.Frame);
  350. expected = @"
  351. ╒╕
  352. ╔╛╘╗
  353. ║ ║
  354. ╚══╝";
  355. break;
  356. case 5:
  357. Assert.Equal (new Rect (0, 0, 5, 4), win.Frame);
  358. expected = @"
  359. ╒═╕
  360. ╔╛1╘╗
  361. ║ ║
  362. ╚═══╝";
  363. break;
  364. case 6:
  365. Assert.Equal (new Rect (0, 0, 6, 4), win.Frame);
  366. expected = @"
  367. ╒══╕
  368. ╔╛12╘╗
  369. ║ ║
  370. ╚════╝";
  371. break;
  372. case 7:
  373. Assert.Equal (new Rect (0, 0, 7, 4), win.Frame);
  374. expected = @"
  375. ╒═══╕
  376. ╔╛123╘╗
  377. ║ ║
  378. ╚═════╝";
  379. break;
  380. case 8:
  381. Assert.Equal (new Rect (0, 0, 8, 4), win.Frame);
  382. expected = @"
  383. ╒════╕
  384. ╔╛1234╘╗
  385. ║ ║
  386. ╚══════╝";
  387. break;
  388. case 9:
  389. Assert.Equal (new Rect (0, 0, 9, 4), win.Frame);
  390. expected = @"
  391. ╒════╕
  392. ╔╛1234╘═╗
  393. ║ ║
  394. ╚═══════╝";
  395. break;
  396. case 10:
  397. Assert.Equal (new Rect (0, 0, 10, 4), win.Frame);
  398. expected = @"
  399. ╒════╕
  400. ╔╛1234╘══╗
  401. ║ ║
  402. ╚════════╝";
  403. break;
  404. }
  405. _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output);
  406. Application.End (rs);
  407. }
  408. [Theory, AutoInitShutdown]
  409. [InlineData (0)]
  410. [InlineData (1)]
  411. [InlineData (2)]
  412. [InlineData (3)]
  413. [InlineData (4)]
  414. [InlineData (5)]
  415. [InlineData (6)]
  416. [InlineData (7)]
  417. [InlineData (8)]
  418. [InlineData (9)]
  419. [InlineData (10)]
  420. public void Border_With_Title_Border_Double_Thickness_Top_Three_Size_Width (int width)
  421. {
  422. var win = new Window () {
  423. Title = "1234",
  424. Width = Dim.Fill (),
  425. Height = Dim.Fill (),
  426. BorderStyle = LineStyle.Double,
  427. };
  428. win.Border.Thickness.Top = 3;
  429. var rs = Application.Begin (win);
  430. bool firstIteration = false;
  431. ((FakeDriver)Application.Driver).SetBufferSize (width, 4);
  432. Application.RunIteration (ref rs, ref firstIteration);
  433. var expected = string.Empty;
  434. switch (width) {
  435. case 1:
  436. Assert.Equal (new Rect (0, 0, 1, 4), win.Frame);
  437. expected = @"
  438. ║";
  439. break;
  440. case 2:
  441. Assert.Equal (new Rect (0, 0, 2, 4), win.Frame);
  442. expected = @"
  443. ╔╗
  444. ║║
  445. ╚╝";
  446. break;
  447. case 3:
  448. Assert.Equal (new Rect (0, 0, 3, 4), win.Frame);
  449. expected = @"
  450. ╔═╗
  451. ║ ║
  452. ╚═╝";
  453. break;
  454. case 4:
  455. Assert.Equal (new Rect (0, 0, 4, 4), win.Frame);
  456. expected = @"
  457. ╒╕
  458. ╔╡╞╗
  459. ║╘╛║
  460. ╚══╝";
  461. break;
  462. case 5:
  463. Assert.Equal (new Rect (0, 0, 5, 4), win.Frame);
  464. expected = @"
  465. ╒═╕
  466. ╔╡1╞╗
  467. ║╘═╛║
  468. ╚═══╝";
  469. break;
  470. case 6:
  471. Assert.Equal (new Rect (0, 0, 6, 4), win.Frame);
  472. expected = @"
  473. ╒══╕
  474. ╔╡12╞╗
  475. ║╘══╛║
  476. ╚════╝";
  477. break;
  478. case 7:
  479. Assert.Equal (new Rect (0, 0, 7, 4), win.Frame);
  480. expected = @"
  481. ╒═══╕
  482. ╔╡123╞╗
  483. ║╘═══╛║
  484. ╚═════╝";
  485. break;
  486. case 8:
  487. Assert.Equal (new Rect (0, 0, 8, 4), win.Frame);
  488. expected = @"
  489. ╒════╕
  490. ╔╡1234╞╗
  491. ║╘════╛║
  492. ╚══════╝";
  493. break;
  494. case 9:
  495. Assert.Equal (new Rect (0, 0, 9, 4), win.Frame);
  496. expected = @"
  497. ╒════╕
  498. ╔╡1234╞═╗
  499. ║╘════╛ ║
  500. ╚═══════╝";
  501. break;
  502. case 10:
  503. Assert.Equal (new Rect (0, 0, 10, 4), win.Frame);
  504. expected = @"
  505. ╒════╕
  506. ╔╡1234╞══╗
  507. ║╘════╛ ║
  508. ╚════════╝";
  509. break;
  510. }
  511. _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output);
  512. Application.End (rs);
  513. }
  514. [Theory, AutoInitShutdown]
  515. [InlineData (0)]
  516. [InlineData (1)]
  517. [InlineData (2)]
  518. [InlineData (3)]
  519. [InlineData (4)]
  520. [InlineData (5)]
  521. [InlineData (6)]
  522. [InlineData (7)]
  523. [InlineData (8)]
  524. [InlineData (9)]
  525. [InlineData (10)]
  526. public void Border_With_Title_Border_Double_Thickness_Top_Four_Size_Width (int width)
  527. {
  528. var win = new Window () {
  529. Title = "1234",
  530. Width = Dim.Fill (),
  531. Height = Dim.Fill (),
  532. BorderStyle = LineStyle.Double,
  533. };
  534. win.Border.Thickness.Top = 4;
  535. var rs = Application.Begin (win);
  536. bool firstIteration = false;
  537. ((FakeDriver)Application.Driver).SetBufferSize (width, 5);
  538. Application.RunIteration (ref rs, ref firstIteration);
  539. var expected = string.Empty;
  540. switch (width) {
  541. case 1:
  542. Assert.Equal (new Rect (0, 0, 1, 5), win.Frame);
  543. expected = @"
  544. ║";
  545. break;
  546. case 2:
  547. Assert.Equal (new Rect (0, 0, 2, 5), win.Frame);
  548. expected = @"
  549. ╔╗
  550. ║║
  551. ╚╝";
  552. break;
  553. case 3:
  554. Assert.Equal (new Rect (0, 0, 3, 5), win.Frame);
  555. expected = @"
  556. ╔═╗
  557. ║ ║
  558. ╚═╝";
  559. break;
  560. case 4:
  561. Assert.Equal (new Rect (0, 0, 4, 5), win.Frame);
  562. expected = @"
  563. ╒╕
  564. ╔╡╞╗
  565. ║╘╛║
  566. ╚══╝";
  567. break;
  568. case 5:
  569. Assert.Equal (new Rect (0, 0, 5, 5), win.Frame);
  570. expected = @"
  571. ╒═╕
  572. ╔╡1╞╗
  573. ║╘═╛║
  574. ╚═══╝";
  575. break;
  576. case 6:
  577. Assert.Equal (new Rect (0, 0, 6, 5), win.Frame);
  578. expected = @"
  579. ╒══╕
  580. ╔╡12╞╗
  581. ║╘══╛║
  582. ╚════╝";
  583. break;
  584. case 7:
  585. Assert.Equal (new Rect (0, 0, 7, 5), win.Frame);
  586. expected = @"
  587. ╒═══╕
  588. ╔╡123╞╗
  589. ║╘═══╛║
  590. ╚═════╝";
  591. break;
  592. case 8:
  593. Assert.Equal (new Rect (0, 0, 8, 5), win.Frame);
  594. expected = @"
  595. ╒════╕
  596. ╔╡1234╞╗
  597. ║╘════╛║
  598. ╚══════╝";
  599. break;
  600. case 9:
  601. Assert.Equal (new Rect (0, 0, 9, 5), win.Frame);
  602. expected = @"
  603. ╒════╕
  604. ╔╡1234╞═╗
  605. ║╘════╛ ║
  606. ╚═══════╝";
  607. break;
  608. case 10:
  609. Assert.Equal (new Rect (0, 0, 10, 5), win.Frame);
  610. expected = @"
  611. ╒════╕
  612. ╔╡1234╞══╗
  613. ║╘════╛ ║
  614. ╚════════╝";
  615. break;
  616. }
  617. _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output);
  618. Application.End (rs);
  619. }
  620. [Fact, SetupFakeDriver]
  621. public void Border_Uses_Parent_ColorScheme ()
  622. {
  623. var view = new View () {
  624. Title = "A",
  625. Height = 2,
  626. Width = 5
  627. };
  628. view.Border.Thickness = new Thickness (0, 1, 0, 0);
  629. view.Border.LineStyle = LineStyle.Single;
  630. view.ColorScheme = new ColorScheme () {
  631. Normal = new Attribute (Color.Red, Color.Green),
  632. Focus = new Attribute (Color.Green, Color.Red),
  633. };
  634. Assert.Equal (ColorName.Red, view.Border.GetNormalColor ().Foreground.ColorName);
  635. Assert.Equal (ColorName.Green, view.Border.GetFocusColor ().Foreground.ColorName);
  636. Assert.Equal (view.GetNormalColor(), view.Border.GetNormalColor ());
  637. Assert.Equal (view.GetFocusColor (), view.Border.GetFocusColor ());
  638. view.BeginInit ();
  639. view.EndInit ();
  640. view.Draw ();
  641. var expected = @"─┤A├─";
  642. TestHelpers.AssertDriverContentsAre (expected, _output);
  643. TestHelpers.AssertDriverAttributesAre ("00000", null, view.ColorScheme.Normal);
  644. }
  645. [Fact, SetupFakeDriver]
  646. public void Border_Parent_HasFocus_Title_Uses_FocusAttribute ()
  647. {
  648. var view = new View () {
  649. Title = "A",
  650. Height = 2,
  651. Width = 5
  652. };
  653. view.Border.Thickness = new Thickness (0, 1, 0, 0);
  654. view.Border.LineStyle = LineStyle.Single;
  655. view.ColorScheme = new ColorScheme () {
  656. Normal = new Attribute (Color.Red, Color.Green),
  657. Focus = new Attribute (Color.Green, Color.Red),
  658. };
  659. Assert.NotEqual (view.ColorScheme.Normal.Foreground, view.ColorScheme.Focus.Foreground);
  660. Assert.Equal (ColorName.Red, view.Border.GetNormalColor ().Foreground.ColorName);
  661. Assert.Equal (ColorName.Green, view.Border.GetFocusColor ().Foreground.ColorName);
  662. Assert.Equal (view.GetFocusColor (), view.Border.GetFocusColor ());
  663. view.BeginInit ();
  664. view.EndInit ();
  665. view.Draw ();
  666. var expected = @"─┤A├─";
  667. TestHelpers.AssertDriverContentsAre (expected, _output);
  668. TestHelpers.AssertDriverAttributesAre ("00000", null, view.ColorScheme.Normal);
  669. view.CanFocus = true;
  670. view.SetFocus ();
  671. view.Draw ();
  672. Assert.Equal (view.GetFocusColor (), view.Border.GetFocusColor ());
  673. Assert.Equal (view.ColorScheme.Focus.Foreground, view.Border.GetFocusColor ().Foreground);
  674. Assert.Equal (view.ColorScheme.Normal.Foreground, view.Border.GetNormalColor ().Foreground);
  675. TestHelpers.AssertDriverAttributesAre ("00100", null, view.ColorScheme.Normal, view.GetFocusColor ());
  676. }
  677. }