FrameTests.cs 13 KB

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