FrameTests.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612
  1. using System.Text;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Xml.Linq;
  5. using Xunit;
  6. using Xunit.Abstractions;
  7. //using GraphViewTests = Terminal.Gui.Views.GraphViewTests;
  8. // Alias Console to MockConsole so we don't accidentally use Console
  9. using Console = Terminal.Gui.FakeConsole;
  10. namespace Terminal.Gui.ViewTests {
  11. public class FrameTests {
  12. readonly ITestOutputHelper output;
  13. public FrameTests (ITestOutputHelper output)
  14. {
  15. this.output = output;
  16. }
  17. [Fact]
  18. public void GetFramesThickness ()
  19. {
  20. var view = new View ();
  21. Assert.Equal (Thickness.Empty, view.GetFramesThickness ());
  22. view.Margin.Thickness = new Thickness (1);
  23. Assert.Equal (new Thickness (1), view.GetFramesThickness ());
  24. view.Border.Thickness = new Thickness (1);
  25. Assert.Equal (new Thickness (2), view.GetFramesThickness ());
  26. view.Padding.Thickness = new Thickness (1);
  27. Assert.Equal (new Thickness (3), view.GetFramesThickness ());
  28. view.Padding.Thickness = new Thickness (2);
  29. Assert.Equal (new Thickness (4), view.GetFramesThickness ());
  30. view.Padding.Thickness = new Thickness (1, 2, 3, 4);
  31. Assert.Equal (new Thickness (3, 4, 5, 6), view.GetFramesThickness ());
  32. view.Margin.Thickness = new Thickness (1, 2, 3, 4);
  33. Assert.Equal (new Thickness (3, 5, 7, 9), view.GetFramesThickness ());
  34. view.Dispose ();
  35. }
  36. [Theory, AutoInitShutdown]
  37. [InlineData (0)]
  38. [InlineData (1)]
  39. [InlineData (2)]
  40. [InlineData (3)]
  41. public void Border_With_Title_Size_Height (int height)
  42. {
  43. var win = new Window () {
  44. Title = "1234",
  45. Width = Dim.Fill (),
  46. Height = Dim.Fill ()
  47. };
  48. var rs = Application.Begin (win);
  49. bool firstIteration = false;
  50. ((FakeDriver)Application.Driver).SetBufferSize (20, height);
  51. Application.RunMainLoopIteration (ref rs, ref firstIteration);
  52. var expected = string.Empty;
  53. switch (height) {
  54. case 0:
  55. //Assert.Equal (new Rect (0, 0, 17, 0), subview.Frame);
  56. expected = @"
  57. ";
  58. break;
  59. case 1:
  60. //Assert.Equal (new Rect (0, 0, 17, 0), subview.Frame);
  61. expected = @"
  62. ────────────────────";
  63. break;
  64. case 2:
  65. //Assert.Equal (new Rect (0, 0, 17, 1), subview.Frame);
  66. expected = @"
  67. ┌┤1234├────────────┐
  68. └──────────────────┘
  69. ";
  70. break;
  71. case 3:
  72. //Assert.Equal (new Rect (0, 0, 17, 2), subview.Frame);
  73. expected = @"
  74. ┌┤1234├────────────┐
  75. │ │
  76. └──────────────────┘
  77. ";
  78. break;
  79. }
  80. _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
  81. Application.End (rs);
  82. }
  83. [Theory, AutoInitShutdown]
  84. [InlineData (0)]
  85. [InlineData (1)]
  86. [InlineData (2)]
  87. [InlineData (3)]
  88. [InlineData (4)]
  89. [InlineData (5)]
  90. [InlineData (6)]
  91. [InlineData (7)]
  92. [InlineData (8)]
  93. [InlineData (9)]
  94. [InlineData (10)]
  95. public void Border_With_Title_Size_Width (int width)
  96. {
  97. var win = new Window () {
  98. Title = "1234",
  99. Width = Dim.Fill (),
  100. Height = Dim.Fill ()
  101. };
  102. var rs = Application.Begin (win);
  103. bool firstIteration = false;
  104. ((FakeDriver)Application.Driver).SetBufferSize (width, 3);
  105. Application.RunMainLoopIteration (ref rs, ref firstIteration);
  106. var expected = string.Empty;
  107. switch (width) {
  108. case 1:
  109. //Assert.Equal (new Rect (0, 0, 17, 0), subview.Frame);
  110. expected = @"
  111. │";
  112. break;
  113. case 2:
  114. //Assert.Equal (new Rect (0, 0, 17, 1), subview.Frame);
  115. expected = @"
  116. ┌┐
  117. ││
  118. └┘";
  119. break;
  120. case 3:
  121. //Assert.Equal (new Rect (0, 0, 17, 2), subview.Frame);
  122. expected = @"
  123. ┌─┐
  124. │ │
  125. └─┘
  126. ";
  127. break;
  128. case 4:
  129. //Assert.Equal (new Rect (0, 0, 17, 3), subview.Frame);
  130. expected = @"
  131. ┌┤├┐
  132. │ │
  133. └──┘";
  134. break;
  135. case 5:
  136. //Assert.Equal (new Rect (0, 0, 17, 3), subview.Frame);
  137. expected = @"
  138. ┌┤1├┐
  139. │ │
  140. └───┘";
  141. break;
  142. case 6:
  143. //Assert.Equal (new Rect (0, 0, 17, 3), subview.Frame);
  144. expected = @"
  145. ┌┤12├┐
  146. │ │
  147. └────┘";
  148. break;
  149. case 7:
  150. //Assert.Equal (new Rect (0, 0, 17, 3), subview.Frame);
  151. expected = @"
  152. ┌┤123├┐
  153. │ │
  154. └─────┘";
  155. break;
  156. case 8:
  157. //Assert.Equal (new Rect (0, 0, 17, 3), subview.Frame);
  158. expected = @"
  159. ┌┤1234├┐
  160. │ │
  161. └──────┘";
  162. break;
  163. case 9:
  164. //Assert.Equal (new Rect (0, 0, 17, 3), subview.Frame);
  165. expected = @"
  166. ┌┤1234├─┐
  167. │ │
  168. └───────┘";
  169. break;
  170. case 10:
  171. //Assert.Equal (new Rect (0, 0, 17, 3), subview.Frame);
  172. expected = @"
  173. ┌┤1234├──┐
  174. │ │
  175. └────────┘";
  176. break;
  177. }
  178. _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
  179. }
  180. [Fact, AutoInitShutdown]
  181. public void NoSuperView ()
  182. {
  183. var win = new Window () {
  184. Width = Dim.Fill (),
  185. Height = Dim.Fill ()
  186. };
  187. var rs = Application.Begin (win);
  188. bool firstIteration = false;
  189. ((FakeDriver)Application.Driver).SetBufferSize (3, 3);
  190. Application.RunMainLoopIteration (ref rs, ref firstIteration);
  191. var expected = @"
  192. ┌─┐
  193. │ │
  194. └─┘";
  195. _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
  196. }
  197. [Fact, AutoInitShutdown]
  198. public void HasSuperView ()
  199. {
  200. Application.Top.BorderStyle = LineStyle.Double;
  201. var frame = new FrameView () {
  202. Width = Dim.Fill (),
  203. Height = Dim.Fill ()
  204. };
  205. Application.Top.Add (frame);
  206. var rs = Application.Begin (Application.Top);
  207. bool firstIteration = false;
  208. ((FakeDriver)Application.Driver).SetBufferSize (5, 5);
  209. Application.RunMainLoopIteration (ref rs, ref firstIteration);
  210. var expected = @"
  211. ╔═══╗
  212. ║┌─┐║
  213. ║│ │║
  214. ║└─┘║
  215. ╚═══╝";
  216. _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
  217. Application.End (rs);
  218. }
  219. [Fact, AutoInitShutdown]
  220. public void HasSuperView_Title ()
  221. {
  222. Application.Top.BorderStyle = LineStyle.Double;
  223. var frame = new FrameView () {
  224. Title = "1234",
  225. Width = Dim.Fill (),
  226. Height = Dim.Fill ()
  227. };
  228. Application.Top.Add (frame);
  229. var rs = Application.Begin (Application.Top);
  230. bool firstIteration = false;
  231. ((FakeDriver)Application.Driver).SetBufferSize (10, 4);
  232. Application.RunMainLoopIteration (ref rs, ref firstIteration);
  233. var expected = @"
  234. ╔════════╗
  235. ║┌┤1234├┐║
  236. ║└──────┘║
  237. ╚════════╝";
  238. _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
  239. Application.End (rs);
  240. }
  241. [Theory, AutoInitShutdown]
  242. [InlineData (0)]
  243. [InlineData (1)]
  244. [InlineData (2)]
  245. [InlineData (3)]
  246. [InlineData (4)]
  247. [InlineData (5)]
  248. [InlineData (6)]
  249. [InlineData (7)]
  250. [InlineData (8)]
  251. [InlineData (9)]
  252. [InlineData (10)]
  253. public void Border_With_Title_Border_Double_Thickness_Top_Two_Size_Width (int width)
  254. {
  255. var win = new Window () {
  256. Title = "1234",
  257. Width = Dim.Fill (),
  258. Height = Dim.Fill (),
  259. BorderStyle = LineStyle.Double,
  260. };
  261. win.Border.Thickness.Top = 2;
  262. var rs = Application.Begin (win);
  263. bool firstIteration = false;
  264. ((FakeDriver)Application.Driver).SetBufferSize (width, 4);
  265. Application.RunMainLoopIteration (ref rs, ref firstIteration);
  266. var expected = string.Empty;
  267. switch (width) {
  268. case 1:
  269. Assert.Equal (new Rect (0, 0, 1, 4), win.Frame);
  270. expected = @"
  271. ║";
  272. break;
  273. case 2:
  274. Assert.Equal (new Rect (0, 0, 2, 4), win.Frame);
  275. expected = @"
  276. ╔╗
  277. ║║
  278. ╚╝";
  279. break;
  280. case 3:
  281. Assert.Equal (new Rect (0, 0, 3, 4), win.Frame);
  282. expected = @"
  283. ╔═╗
  284. ║ ║
  285. ╚═╝";
  286. break;
  287. case 4:
  288. Assert.Equal (new Rect (0, 0, 4, 4), win.Frame);
  289. expected = @"
  290. ╒╕
  291. ╔╛╘╗
  292. ║ ║
  293. ╚══╝";
  294. break;
  295. case 5:
  296. Assert.Equal (new Rect (0, 0, 5, 4), win.Frame);
  297. expected = @"
  298. ╒═╕
  299. ╔╛1╘╗
  300. ║ ║
  301. ╚═══╝";
  302. break;
  303. case 6:
  304. Assert.Equal (new Rect (0, 0, 6, 4), win.Frame);
  305. expected = @"
  306. ╒══╕
  307. ╔╛12╘╗
  308. ║ ║
  309. ╚════╝";
  310. break;
  311. case 7:
  312. Assert.Equal (new Rect (0, 0, 7, 4), win.Frame);
  313. expected = @"
  314. ╒═══╕
  315. ╔╛123╘╗
  316. ║ ║
  317. ╚═════╝";
  318. break;
  319. case 8:
  320. Assert.Equal (new Rect (0, 0, 8, 4), win.Frame);
  321. expected = @"
  322. ╒════╕
  323. ╔╛1234╘╗
  324. ║ ║
  325. ╚══════╝";
  326. break;
  327. case 9:
  328. Assert.Equal (new Rect (0, 0, 9, 4), win.Frame);
  329. expected = @"
  330. ╒════╕
  331. ╔╛1234╘═╗
  332. ║ ║
  333. ╚═══════╝";
  334. break;
  335. case 10:
  336. Assert.Equal (new Rect (0, 0, 10, 4), win.Frame);
  337. expected = @"
  338. ╒════╕
  339. ╔╛1234╘══╗
  340. ║ ║
  341. ╚════════╝";
  342. break;
  343. }
  344. _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
  345. Application.End (rs);
  346. }
  347. [Theory, AutoInitShutdown]
  348. [InlineData (0)]
  349. [InlineData (1)]
  350. [InlineData (2)]
  351. [InlineData (3)]
  352. [InlineData (4)]
  353. [InlineData (5)]
  354. [InlineData (6)]
  355. [InlineData (7)]
  356. [InlineData (8)]
  357. [InlineData (9)]
  358. [InlineData (10)]
  359. public void Border_With_Title_Border_Double_Thickness_Top_Three_Size_Width (int width)
  360. {
  361. var win = new Window () {
  362. Title = "1234",
  363. Width = Dim.Fill (),
  364. Height = Dim.Fill (),
  365. BorderStyle = LineStyle.Double,
  366. };
  367. win.Border.Thickness.Top = 3;
  368. var rs = Application.Begin (win);
  369. bool firstIteration = false;
  370. ((FakeDriver)Application.Driver).SetBufferSize (width, 4);
  371. Application.RunMainLoopIteration (ref rs, ref firstIteration);
  372. var expected = string.Empty;
  373. switch (width) {
  374. case 1:
  375. Assert.Equal (new Rect (0, 0, 1, 4), win.Frame);
  376. expected = @"
  377. ║";
  378. break;
  379. case 2:
  380. Assert.Equal (new Rect (0, 0, 2, 4), win.Frame);
  381. expected = @"
  382. ╔╗
  383. ║║
  384. ╚╝";
  385. break;
  386. case 3:
  387. Assert.Equal (new Rect (0, 0, 3, 4), win.Frame);
  388. expected = @"
  389. ╔═╗
  390. ║ ║
  391. ╚═╝";
  392. break;
  393. case 4:
  394. Assert.Equal (new Rect (0, 0, 4, 4), win.Frame);
  395. expected = @"
  396. ╒╕
  397. ╔╡╞╗
  398. ║╘╛║
  399. ╚══╝";
  400. break;
  401. case 5:
  402. Assert.Equal (new Rect (0, 0, 5, 4), win.Frame);
  403. expected = @"
  404. ╒═╕
  405. ╔╡1╞╗
  406. ║╘═╛║
  407. ╚═══╝";
  408. break;
  409. case 6:
  410. Assert.Equal (new Rect (0, 0, 6, 4), win.Frame);
  411. expected = @"
  412. ╒══╕
  413. ╔╡12╞╗
  414. ║╘══╛║
  415. ╚════╝";
  416. break;
  417. case 7:
  418. Assert.Equal (new Rect (0, 0, 7, 4), win.Frame);
  419. expected = @"
  420. ╒═══╕
  421. ╔╡123╞╗
  422. ║╘═══╛║
  423. ╚═════╝";
  424. break;
  425. case 8:
  426. Assert.Equal (new Rect (0, 0, 8, 4), win.Frame);
  427. expected = @"
  428. ╒════╕
  429. ╔╡1234╞╗
  430. ║╘════╛║
  431. ╚══════╝";
  432. break;
  433. case 9:
  434. Assert.Equal (new Rect (0, 0, 9, 4), win.Frame);
  435. expected = @"
  436. ╒════╕
  437. ╔╡1234╞═╗
  438. ║╘════╛ ║
  439. ╚═══════╝";
  440. break;
  441. case 10:
  442. Assert.Equal (new Rect (0, 0, 10, 4), win.Frame);
  443. expected = @"
  444. ╒════╕
  445. ╔╡1234╞══╗
  446. ║╘════╛ ║
  447. ╚════════╝";
  448. break;
  449. }
  450. _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
  451. Application.End (rs);
  452. }
  453. [Theory, AutoInitShutdown]
  454. [InlineData (0)]
  455. [InlineData (1)]
  456. [InlineData (2)]
  457. [InlineData (3)]
  458. [InlineData (4)]
  459. [InlineData (5)]
  460. [InlineData (6)]
  461. [InlineData (7)]
  462. [InlineData (8)]
  463. [InlineData (9)]
  464. [InlineData (10)]
  465. public void Border_With_Title_Border_Double_Thickness_Top_Four_Size_Width (int width)
  466. {
  467. var win = new Window () {
  468. Title = "1234",
  469. Width = Dim.Fill (),
  470. Height = Dim.Fill (),
  471. BorderStyle = LineStyle.Double,
  472. };
  473. win.Border.Thickness.Top = 4;
  474. var rs = Application.Begin (win);
  475. bool firstIteration = false;
  476. ((FakeDriver)Application.Driver).SetBufferSize (width, 5);
  477. Application.RunMainLoopIteration (ref rs, ref firstIteration);
  478. var expected = string.Empty;
  479. switch (width) {
  480. case 1:
  481. Assert.Equal (new Rect (0, 0, 1, 5), win.Frame);
  482. expected = @"
  483. ║";
  484. break;
  485. case 2:
  486. Assert.Equal (new Rect (0, 0, 2, 5), win.Frame);
  487. expected = @"
  488. ╔╗
  489. ║║
  490. ╚╝";
  491. break;
  492. case 3:
  493. Assert.Equal (new Rect (0, 0, 3, 5), win.Frame);
  494. expected = @"
  495. ╔═╗
  496. ║ ║
  497. ╚═╝";
  498. break;
  499. case 4:
  500. Assert.Equal (new Rect (0, 0, 4, 5), win.Frame);
  501. expected = @"
  502. ╒╕
  503. ╔╡╞╗
  504. ║╘╛║
  505. ╚══╝";
  506. break;
  507. case 5:
  508. Assert.Equal (new Rect (0, 0, 5, 5), win.Frame);
  509. expected = @"
  510. ╒═╕
  511. ╔╡1╞╗
  512. ║╘═╛║
  513. ╚═══╝";
  514. break;
  515. case 6:
  516. Assert.Equal (new Rect (0, 0, 6, 5), win.Frame);
  517. expected = @"
  518. ╒══╕
  519. ╔╡12╞╗
  520. ║╘══╛║
  521. ╚════╝";
  522. break;
  523. case 7:
  524. Assert.Equal (new Rect (0, 0, 7, 5), win.Frame);
  525. expected = @"
  526. ╒═══╕
  527. ╔╡123╞╗
  528. ║╘═══╛║
  529. ╚═════╝";
  530. break;
  531. case 8:
  532. Assert.Equal (new Rect (0, 0, 8, 5), win.Frame);
  533. expected = @"
  534. ╒════╕
  535. ╔╡1234╞╗
  536. ║╘════╛║
  537. ╚══════╝";
  538. break;
  539. case 9:
  540. Assert.Equal (new Rect (0, 0, 9, 5), win.Frame);
  541. expected = @"
  542. ╒════╕
  543. ╔╡1234╞═╗
  544. ║╘════╛ ║
  545. ╚═══════╝";
  546. break;
  547. case 10:
  548. Assert.Equal (new Rect (0, 0, 10, 5), win.Frame);
  549. expected = @"
  550. ╒════╕
  551. ╔╡1234╞══╗
  552. ║╘════╛ ║
  553. ╚════════╝";
  554. break;
  555. }
  556. _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
  557. Application.End (rs);
  558. }
  559. }
  560. }