ScrollBarTests.cs 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943
  1. using Xunit.Abstractions;
  2. using static Unix.Terminal.Delegates;
  3. namespace Terminal.Gui.ViewsTests;
  4. public class ScrollBarTests (ITestOutputHelper output)
  5. {
  6. [Fact]
  7. public void Constructor_Defaults ()
  8. {
  9. var scrollBar = new ScrollBar ();
  10. Assert.False (scrollBar.CanFocus);
  11. Assert.Equal (Orientation.Vertical, scrollBar.Orientation);
  12. Assert.Equal (0, scrollBar.ScrollableContentSize);
  13. Assert.Equal (0, scrollBar.VisibleContentSize);
  14. Assert.Equal (0, scrollBar.GetSliderPosition ());
  15. Assert.Equal (0, scrollBar.Position);
  16. Assert.False (scrollBar.AutoShow);
  17. }
  18. #region AutoHide
  19. [Fact]
  20. [AutoInitShutdown]
  21. public void AutoHide_False_Is_Default_CorrectlyHidesAndShows ()
  22. {
  23. var super = new Toplevel ()
  24. {
  25. Id = "super",
  26. Width = 1,
  27. Height = 20
  28. };
  29. var scrollBar = new ScrollBar
  30. {
  31. };
  32. super.Add (scrollBar);
  33. Assert.False (scrollBar.AutoShow);
  34. Assert.True (scrollBar.Visible);
  35. scrollBar.AutoShow = true;
  36. Assert.True (scrollBar.AutoShow);
  37. Assert.True (scrollBar.Visible);
  38. RunState rs = Application.Begin (super);
  39. // Should Show
  40. scrollBar.ScrollableContentSize = 21;
  41. Application.RunIteration (ref rs);
  42. Assert.True (scrollBar.Visible);
  43. // Should Hide
  44. scrollBar.ScrollableContentSize = 10;
  45. Assert.False (scrollBar.Visible);
  46. super.Dispose ();
  47. }
  48. [Fact]
  49. [AutoInitShutdown]
  50. public void AutoHide_False_CorrectlyHidesAndShows ()
  51. {
  52. var super = new Toplevel ()
  53. {
  54. Id = "super",
  55. Width = 1,
  56. Height = 20
  57. };
  58. var scrollBar = new ScrollBar
  59. {
  60. ScrollableContentSize = 20,
  61. AutoShow = false
  62. };
  63. super.Add (scrollBar);
  64. Assert.False (scrollBar.AutoShow);
  65. Assert.True (scrollBar.Visible);
  66. RunState rs = Application.Begin (super);
  67. // Should Hide if AutoSize = true, but should not hide if AutoSize = false
  68. scrollBar.ScrollableContentSize = 10;
  69. Assert.True (scrollBar.Visible);
  70. super.Dispose ();
  71. }
  72. [Fact]
  73. [AutoInitShutdown]
  74. public void AutoHide_True_Changing_ScrollableContentSize_CorrectlyHidesAndShows ()
  75. {
  76. var super = new Toplevel ()
  77. {
  78. Id = "super",
  79. Width = 1,
  80. Height = 20
  81. };
  82. var scrollBar = new ScrollBar
  83. {
  84. ScrollableContentSize = 20,
  85. };
  86. super.Add (scrollBar);
  87. Assert.False (scrollBar.AutoShow);
  88. Assert.True (scrollBar.Visible);
  89. scrollBar.AutoShow = true;
  90. RunState rs = Application.Begin (super);
  91. Assert.False (scrollBar.Visible);
  92. Assert.Equal (1, scrollBar.Frame.Width);
  93. Assert.Equal (20, scrollBar.Frame.Height);
  94. scrollBar.ScrollableContentSize = 10;
  95. Application.RunIteration (ref rs);
  96. Assert.False (scrollBar.Visible);
  97. scrollBar.ScrollableContentSize = 30;
  98. Application.RunIteration (ref rs);
  99. Assert.True (scrollBar.Visible);
  100. scrollBar.AutoShow = false;
  101. Application.RunIteration (ref rs);
  102. Assert.True (scrollBar.Visible);
  103. scrollBar.ScrollableContentSize = 10;
  104. Application.RunIteration (ref rs);
  105. Assert.True (scrollBar.Visible);
  106. super.Dispose ();
  107. }
  108. [Fact]
  109. [AutoInitShutdown]
  110. public void AutoHide_Change_VisibleContentSize_CorrectlyHidesAndShows ()
  111. {
  112. var super = new Toplevel ()
  113. {
  114. Id = "super",
  115. Width = 1,
  116. Height = 20
  117. };
  118. var scrollBar = new ScrollBar
  119. {
  120. ScrollableContentSize = 20,
  121. VisibleContentSize = 20
  122. };
  123. super.Add (scrollBar);
  124. Assert.False (scrollBar.AutoShow);
  125. Assert.True (scrollBar.Visible);
  126. scrollBar.AutoShow = true;
  127. RunState rs = Application.Begin (super);
  128. Assert.Equal (Orientation.Vertical, scrollBar.Orientation);
  129. Assert.Equal (20, scrollBar.VisibleContentSize);
  130. Assert.False (scrollBar.Visible);
  131. scrollBar.VisibleContentSize = 10;
  132. Application.RunIteration (ref rs);
  133. Assert.True (scrollBar.Visible);
  134. scrollBar.VisibleContentSize = 30;
  135. Application.RunIteration (ref rs);
  136. Assert.False (scrollBar.Visible);
  137. scrollBar.VisibleContentSize = 10;
  138. Application.RunIteration (ref rs);
  139. Assert.True (scrollBar.Visible);
  140. scrollBar.VisibleContentSize = 21;
  141. Application.RunIteration (ref rs);
  142. Assert.False (scrollBar.Visible);
  143. scrollBar.AutoShow = false;
  144. Application.RunIteration (ref rs);
  145. Assert.True (scrollBar.Visible);
  146. scrollBar.VisibleContentSize = 10;
  147. Application.RunIteration (ref rs);
  148. Assert.True (scrollBar.Visible);
  149. super.Dispose ();
  150. }
  151. #endregion AutoHide
  152. #region Orientation
  153. [Fact]
  154. public void OnOrientationChanged_Keeps_Size ()
  155. {
  156. var scroll = new ScrollBar ();
  157. scroll.Layout ();
  158. scroll.ScrollableContentSize = 1;
  159. scroll.Orientation = Orientation.Horizontal;
  160. Assert.Equal (1, scroll.ScrollableContentSize);
  161. }
  162. [Fact]
  163. public void OnOrientationChanged_Sets_Position_To_0 ()
  164. {
  165. View super = new View ()
  166. {
  167. Id = "super",
  168. Width = 10,
  169. Height = 10
  170. };
  171. var scrollBar = new ScrollBar ()
  172. {
  173. };
  174. super.Add (scrollBar);
  175. scrollBar.Layout ();
  176. scrollBar.Position = 1;
  177. scrollBar.Orientation = Orientation.Horizontal;
  178. Assert.Equal (0, scrollBar.GetSliderPosition ());
  179. }
  180. #endregion Orientation
  181. #region Size
  182. // TODO: Add tests.
  183. #endregion Size
  184. #region Position
  185. [Fact]
  186. public void Position_Event_Cancelables ()
  187. {
  188. var changingCount = 0;
  189. var changedCount = 0;
  190. var scrollBar = new ScrollBar { };
  191. scrollBar.ScrollableContentSize = 5;
  192. scrollBar.Frame = new Rectangle (0, 0, 1, 4); // Needs to be at least 4 for slider to move
  193. scrollBar.PositionChanging += (s, e) =>
  194. {
  195. if (changingCount == 0)
  196. {
  197. e.Cancel = true;
  198. }
  199. changingCount++;
  200. };
  201. scrollBar.PositionChanged += (s, e) => changedCount++;
  202. scrollBar.Position = 1;
  203. Assert.Equal (0, scrollBar.Position);
  204. Assert.Equal (1, changingCount);
  205. Assert.Equal (0, changedCount);
  206. scrollBar.Position = 1;
  207. Assert.Equal (1, scrollBar.Position);
  208. Assert.Equal (2, changingCount);
  209. Assert.Equal (1, changedCount);
  210. }
  211. #endregion Position
  212. [Fact]
  213. public void ScrollableContentSize_Cannot_Be_Negative ()
  214. {
  215. var scrollBar = new ScrollBar { Height = 10, ScrollableContentSize = -1 };
  216. Assert.Equal (0, scrollBar.ScrollableContentSize);
  217. scrollBar.ScrollableContentSize = -10;
  218. Assert.Equal (0, scrollBar.ScrollableContentSize);
  219. }
  220. [Fact]
  221. public void ScrollableContentSizeChanged_Event ()
  222. {
  223. var count = 0;
  224. var scrollBar = new ScrollBar ();
  225. scrollBar.ScrollableContentSizeChanged += (s, e) => count++;
  226. scrollBar.ScrollableContentSize = 10;
  227. Assert.Equal (10, scrollBar.ScrollableContentSize);
  228. Assert.Equal (1, count);
  229. }
  230. [Theory]
  231. [SetupFakeDriver]
  232. #region Draw
  233. #region Horizontal
  234. #region Super 10 - ScrollBar 8
  235. [InlineData (
  236. 10,
  237. 1,
  238. 10,
  239. -1,
  240. Orientation.Horizontal,
  241. @"
  242. ┌──────────┐
  243. │◄████████►│
  244. └──────────┘")]
  245. [InlineData (
  246. 10,
  247. 1,
  248. 20,
  249. -1,
  250. Orientation.Horizontal,
  251. @"
  252. ┌──────────┐
  253. │◄████░░░░►│
  254. └──────────┘")]
  255. [InlineData (
  256. 10,
  257. 1,
  258. 20,
  259. 0,
  260. Orientation.Horizontal,
  261. @"
  262. ┌──────────┐
  263. │◄████░░░░►│
  264. └──────────┘")]
  265. [InlineData (
  266. 10,
  267. 1,
  268. 20,
  269. 1,
  270. Orientation.Horizontal,
  271. @"
  272. ┌──────────┐
  273. │◄████░░░░►│
  274. └──────────┘")]
  275. [InlineData (
  276. 10,
  277. 1,
  278. 20,
  279. 2,
  280. Orientation.Horizontal,
  281. @"
  282. ┌──────────┐
  283. │◄░████░░░►│
  284. └──────────┘
  285. ")]
  286. [InlineData (
  287. 10,
  288. 1,
  289. 20,
  290. 3,
  291. Orientation.Horizontal,
  292. @"
  293. ┌──────────┐
  294. │◄░████░░░►│
  295. └──────────┘
  296. ")]
  297. [InlineData (
  298. 10,
  299. 1,
  300. 20,
  301. 4,
  302. Orientation.Horizontal,
  303. @"
  304. ┌──────────┐
  305. │◄░░████░░►│
  306. └──────────┘
  307. ")]
  308. [InlineData (
  309. 10,
  310. 1,
  311. 20,
  312. 5,
  313. Orientation.Horizontal,
  314. @"
  315. ┌──────────┐
  316. │◄░░████░░►│
  317. └──────────┘
  318. ")]
  319. [InlineData (
  320. 10,
  321. 1,
  322. 20,
  323. 6,
  324. Orientation.Horizontal,
  325. @"
  326. ┌──────────┐
  327. │◄░░████░░►│
  328. └──────────┘
  329. ")]
  330. [InlineData (
  331. 10,
  332. 1,
  333. 20,
  334. 7,
  335. Orientation.Horizontal,
  336. @"
  337. ┌──────────┐
  338. │◄░░░████░►│
  339. └──────────┘
  340. ")]
  341. [InlineData (
  342. 10,
  343. 1,
  344. 20,
  345. 8,
  346. Orientation.Horizontal,
  347. @"
  348. ┌──────────┐
  349. │◄░░░████░►│
  350. └──────────┘
  351. ")]
  352. [InlineData (
  353. 10,
  354. 1,
  355. 20,
  356. 9,
  357. Orientation.Horizontal,
  358. @"
  359. ┌──────────┐
  360. │◄░░░░████►│
  361. └──────────┘
  362. ")]
  363. [InlineData (
  364. 10,
  365. 1,
  366. 20,
  367. 10,
  368. Orientation.Horizontal,
  369. @"
  370. ┌──────────┐
  371. │◄░░░░████►│
  372. └──────────┘
  373. ")]
  374. [InlineData (
  375. 10,
  376. 1,
  377. 20,
  378. 19,
  379. Orientation.Horizontal,
  380. @"
  381. ┌──────────┐
  382. │◄░░░░████►│
  383. └──────────┘
  384. ")]
  385. [InlineData (
  386. 10,
  387. 1,
  388. 20,
  389. 20,
  390. Orientation.Horizontal,
  391. @"
  392. ┌──────────┐
  393. │◄░░░░████►│
  394. └──────────┘
  395. ")]
  396. #endregion Super 10 - ScrollBar 8
  397. #region Super 12 - ScrollBar 10
  398. [InlineData (
  399. 12,
  400. 1,
  401. 10,
  402. -1,
  403. Orientation.Horizontal,
  404. @"
  405. ┌────────────┐
  406. │◄██████████►│
  407. └────────────┘")]
  408. [InlineData (
  409. 12,
  410. 1,
  411. 20,
  412. -1,
  413. Orientation.Horizontal,
  414. @"
  415. ┌────────────┐
  416. │◄██████░░░░►│
  417. └────────────┘")]
  418. [InlineData (
  419. 12,
  420. 1,
  421. 20,
  422. 0,
  423. Orientation.Horizontal,
  424. @"
  425. ┌────────────┐
  426. │◄██████░░░░►│
  427. └────────────┘")]
  428. [InlineData (
  429. 12,
  430. 1,
  431. 20,
  432. 1,
  433. Orientation.Horizontal,
  434. @"
  435. ┌────────────┐
  436. │◄██████░░░░►│
  437. └────────────┘")]
  438. [InlineData (
  439. 12,
  440. 1,
  441. 20,
  442. 2,
  443. Orientation.Horizontal,
  444. @"
  445. ┌────────────┐
  446. │◄░██████░░░►│
  447. └────────────┘
  448. ")]
  449. [InlineData (
  450. 12,
  451. 1,
  452. 20,
  453. 3,
  454. Orientation.Horizontal,
  455. @"
  456. ┌────────────┐
  457. │◄░░██████░░►│
  458. └────────────┘
  459. ")]
  460. [InlineData (
  461. 12,
  462. 1,
  463. 20,
  464. 4,
  465. Orientation.Horizontal,
  466. @"
  467. ┌────────────┐
  468. │◄░░██████░░►│
  469. └────────────┘
  470. ")]
  471. [InlineData (
  472. 12,
  473. 1,
  474. 20,
  475. 5,
  476. Orientation.Horizontal,
  477. @"
  478. ┌────────────┐
  479. │◄░░██████░░►│
  480. └────────────┘
  481. ")]
  482. [InlineData (
  483. 12,
  484. 1,
  485. 20,
  486. 6,
  487. Orientation.Horizontal,
  488. @"
  489. ┌────────────┐
  490. │◄░░░██████░►│
  491. └────────────┘
  492. ")]
  493. [InlineData (
  494. 12,
  495. 1,
  496. 20,
  497. 7,
  498. Orientation.Horizontal,
  499. @"
  500. ┌────────────┐
  501. │◄░░░░██████►│
  502. └────────────┘
  503. ")]
  504. [InlineData (
  505. 12,
  506. 1,
  507. 20,
  508. 8,
  509. Orientation.Horizontal,
  510. @"
  511. ┌────────────┐
  512. │◄░░░░██████►│
  513. └────────────┘
  514. ")]
  515. [InlineData (
  516. 12,
  517. 1,
  518. 20,
  519. 9,
  520. Orientation.Horizontal,
  521. @"
  522. ┌────────────┐
  523. │◄░░░░██████►│
  524. └────────────┘
  525. ")]
  526. [InlineData (
  527. 12,
  528. 1,
  529. 20,
  530. 10,
  531. Orientation.Horizontal,
  532. @"
  533. ┌────────────┐
  534. │◄░░░░██████►│
  535. └────────────┘
  536. ")]
  537. [InlineData (
  538. 12,
  539. 1,
  540. 20,
  541. 19,
  542. Orientation.Horizontal,
  543. @"
  544. ┌────────────┐
  545. │◄░░░░██████►│
  546. └────────────┘
  547. ")]
  548. [InlineData (
  549. 12,
  550. 1,
  551. 20,
  552. 20,
  553. Orientation.Horizontal,
  554. @"
  555. ┌────────────┐
  556. │◄░░░░██████►│
  557. └────────────┘
  558. ")]
  559. #endregion Super 12 - ScrollBar 10
  560. [InlineData (
  561. 10,
  562. 3,
  563. 20,
  564. 2,
  565. Orientation.Horizontal,
  566. @"
  567. ┌──────────┐
  568. │ ░████░░░ │
  569. │◄░████░░░►│
  570. │ ░████░░░ │
  571. └──────────┘
  572. ")]
  573. #endregion Horizontal
  574. #region Vertical
  575. [InlineData (
  576. 1,
  577. 10,
  578. 10,
  579. -1,
  580. Orientation.Vertical,
  581. @"
  582. ┌─┐
  583. │▲│
  584. │█│
  585. │█│
  586. │█│
  587. │█│
  588. │█│
  589. │█│
  590. │█│
  591. │█│
  592. │▼│
  593. └─┘")]
  594. [InlineData (
  595. 1,
  596. 10,
  597. 10,
  598. 5,
  599. Orientation.Vertical,
  600. @"
  601. ┌─┐
  602. │▲│
  603. │█│
  604. │█│
  605. │█│
  606. │█│
  607. │█│
  608. │█│
  609. │█│
  610. │█│
  611. │▼│
  612. └─┘")]
  613. [InlineData (
  614. 1,
  615. 10,
  616. 20,
  617. 5,
  618. Orientation.Vertical,
  619. @"
  620. ┌─┐
  621. │▲│
  622. │░│
  623. │░│
  624. │█│
  625. │█│
  626. │█│
  627. │█│
  628. │░│
  629. │░│
  630. │▼│
  631. └─┘")]
  632. [InlineData (
  633. 1,
  634. 12,
  635. 20,
  636. 5,
  637. Orientation.Vertical,
  638. @"
  639. ┌─┐
  640. │▲│
  641. │░│
  642. │░│
  643. │█│
  644. │█│
  645. │█│
  646. │█│
  647. │█│
  648. │█│
  649. │░│
  650. │░│
  651. │▼│
  652. └─┘")]
  653. [InlineData (
  654. 3,
  655. 10,
  656. 20,
  657. 2,
  658. Orientation.Vertical,
  659. @"
  660. ┌───┐
  661. │ ▲ │
  662. │░░░│
  663. │███│
  664. │███│
  665. │███│
  666. │███│
  667. │░░░│
  668. │░░░│
  669. │░░░│
  670. │ ▼ │
  671. └───┘
  672. ")]
  673. #endregion Vertical
  674. public void Draws_Correctly_Default_Settings (int width, int height, int contentSize, int contentPosition, Orientation orientation, string expected)
  675. {
  676. var super = new Window
  677. {
  678. Id = "super",
  679. Width = width + 2,
  680. Height = height + 2,
  681. };
  682. var scrollBar = new ScrollBar
  683. {
  684. AutoShow = false,
  685. Orientation = orientation,
  686. };
  687. if (orientation == Orientation.Vertical)
  688. {
  689. super.SetContentSize (new (width, contentSize));
  690. scrollBar.Width = width;
  691. }
  692. else
  693. {
  694. super.SetContentSize (new (contentSize, height));
  695. scrollBar.Height = height;
  696. }
  697. super.Add (scrollBar);
  698. scrollBar.Position = contentPosition;
  699. super.Layout ();
  700. super.Draw ();
  701. _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output);
  702. }
  703. #endregion Draw
  704. #region Mouse
  705. [Theory]
  706. [CombinatorialData]
  707. [AutoInitShutdown]
  708. public void Mouse_Click_DecrementButton_Decrements ([CombinatorialRange (1, 3, 1)] int increment, Orientation orientation)
  709. {
  710. var top = new Toplevel ()
  711. {
  712. Id = "top",
  713. Width = 10,
  714. Height = 10
  715. };
  716. var scrollBar = new ScrollBar
  717. {
  718. Id = "scrollBar",
  719. Orientation = orientation,
  720. ScrollableContentSize = 20,
  721. Increment = increment
  722. };
  723. top.Add (scrollBar);
  724. RunState rs = Application.Begin (top);
  725. // Scroll to end
  726. scrollBar.Position = 19;
  727. Assert.Equal (10, scrollBar.Position);
  728. Application.RunIteration (ref rs);
  729. Assert.Equal (4, scrollBar.GetSliderPosition ());
  730. Assert.Equal (10, scrollBar.Position);
  731. int initialPos = scrollBar.Position;
  732. Point btnPoint = orientation == Orientation.Vertical
  733. ? new (0, 0)
  734. : new (0, 0);
  735. Application.RaiseMouseEvent (new ()
  736. {
  737. ScreenPosition = btnPoint,
  738. Flags = MouseFlags.Button1Clicked
  739. });
  740. Application.RunIteration (ref rs);
  741. Assert.Equal (initialPos - increment, scrollBar.Position);
  742. Application.ResetState (true);
  743. }
  744. [Theory]
  745. [CombinatorialData]
  746. [AutoInitShutdown]
  747. public void Mouse_Click_IncrementButton_Increments ([CombinatorialRange (1, 3, 1)] int increment, Orientation orientation)
  748. {
  749. var top = new Toplevel ()
  750. {
  751. Id = "top",
  752. Width = 10,
  753. Height = 10
  754. };
  755. var scrollBar = new ScrollBar
  756. {
  757. Id = "scrollBar",
  758. Orientation = orientation,
  759. ScrollableContentSize = 20,
  760. Increment = increment
  761. };
  762. top.Add (scrollBar);
  763. RunState rs = Application.Begin (top);
  764. // Scroll to top
  765. scrollBar.Position = 0;
  766. Application.RunIteration (ref rs);
  767. Assert.Equal (0, scrollBar.GetSliderPosition ());
  768. Assert.Equal (0, scrollBar.Position);
  769. int initialPos = scrollBar.Position;
  770. Point btnPoint = orientation == Orientation.Vertical
  771. ? new (scrollBar.Frame.X, scrollBar.Frame.Height - 1)
  772. : new (scrollBar.Frame.Width - 1, scrollBar.Frame.Y);
  773. Application.RaiseMouseEvent (new ()
  774. {
  775. ScreenPosition = btnPoint,
  776. Flags = MouseFlags.Button1Clicked
  777. });
  778. Application.RunIteration (ref rs);
  779. Assert.Equal (initialPos + increment, scrollBar.Position);
  780. Application.ResetState (true);
  781. }
  782. #endregion Mouse
  783. [Fact (Skip = "Disabled - Will put this feature in View")]
  784. [AutoInitShutdown]
  785. public void KeepContentInAllViewport_True_False ()
  786. {
  787. var view = new View { Width = Dim.Fill (), Height = Dim.Fill () };
  788. view.Padding.Thickness = new (0, 0, 2, 0);
  789. view.SetContentSize (new (view.Viewport.Width, 30));
  790. var scrollBar = new ScrollBar { Width = 2, Height = Dim.Fill (), ScrollableContentSize = view.GetContentSize ().Height };
  791. scrollBar.SliderPositionChanged += (_, e) => view.Viewport = view.Viewport with { Y = e.CurrentValue };
  792. view.Padding.Add (scrollBar);
  793. var top = new Toplevel ();
  794. top.Add (view);
  795. Application.Begin (top);
  796. //Assert.False (scrollBar.KeepContentInAllViewport);
  797. //scrollBar.KeepContentInAllViewport = true;
  798. Assert.Equal (80, view.Padding.Viewport.Width);
  799. Assert.Equal (25, view.Padding.Viewport.Height);
  800. Assert.Equal (2, scrollBar.Viewport.Width);
  801. Assert.Equal (25, scrollBar.Viewport.Height);
  802. Assert.Equal (30, scrollBar.ScrollableContentSize);
  803. //scrollBar.KeepContentInAllViewport = false;
  804. scrollBar.Position = 50;
  805. Assert.Equal (scrollBar.GetSliderPosition (), scrollBar.ScrollableContentSize - 1);
  806. Assert.Equal (scrollBar.GetSliderPosition (), view.Viewport.Y);
  807. Assert.Equal (29, scrollBar.GetSliderPosition ());
  808. Assert.Equal (29, view.Viewport.Y);
  809. top.Dispose ();
  810. }
  811. }