ListViewTests.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756
  1. using System.Collections;
  2. using System.ComponentModel;
  3. using Xunit.Abstractions;
  4. namespace Terminal.Gui.ViewsTests;
  5. public class ListViewTests
  6. {
  7. private readonly ITestOutputHelper _output;
  8. public ListViewTests (ITestOutputHelper output) { _output = output; }
  9. [Fact]
  10. public void Constructors_Defaults ()
  11. {
  12. var lv = new ListView ();
  13. Assert.Null (lv.Source);
  14. Assert.True (lv.CanFocus);
  15. Assert.Equal (-1, lv.SelectedItem);
  16. lv = new ListView { Source = new ListWrapper (new List<string> { "One", "Two", "Three" }) };
  17. Assert.NotNull (lv.Source);
  18. Assert.Equal (-1, lv.SelectedItem);
  19. lv = new ListView { Source = new NewListDataSource () };
  20. Assert.NotNull (lv.Source);
  21. Assert.Equal (-1, lv.SelectedItem);
  22. lv = new ListView
  23. {
  24. Y = 1, Width = 10, Height = 20, Source = new ListWrapper (new List<string> { "One", "Two", "Three" })
  25. };
  26. Assert.NotNull (lv.Source);
  27. Assert.Equal (-1, lv.SelectedItem);
  28. Assert.Equal (new Rectangle (0, 1, 10, 20), lv.Frame);
  29. lv = new ListView { Y = 1, Width = 10, Height = 20, Source = new NewListDataSource () };
  30. Assert.NotNull (lv.Source);
  31. Assert.Equal (-1, lv.SelectedItem);
  32. Assert.Equal (new Rectangle (0, 1, 10, 20), lv.Frame);
  33. }
  34. [Fact]
  35. [AutoInitShutdown]
  36. public void Ensures_Visibility_SelectedItem_On_MoveDown_And_MoveUp ()
  37. {
  38. List<string> source = new ();
  39. for (var i = 0; i < 20; i++)
  40. {
  41. source.Add ($"Line{i}");
  42. }
  43. var lv = new ListView { Width = Dim.Fill (), Height = Dim.Fill (), Source = new ListWrapper (source) };
  44. var win = new Window ();
  45. win.Add (lv);
  46. Application.Top.Add (win);
  47. Application.Begin (Application.Top);
  48. ((FakeDriver)Application.Driver).SetBufferSize (12, 12);
  49. Application.Refresh ();
  50. Assert.Equal (-1, lv.SelectedItem);
  51. TestHelpers.AssertDriverContentsWithFrameAre (
  52. @"
  53. ┌──────────┐
  54. │Line0 │
  55. │Line1 │
  56. │Line2 │
  57. │Line3 │
  58. │Line4 │
  59. │Line5 │
  60. │Line6 │
  61. │Line7 │
  62. │Line8 │
  63. │Line9 │
  64. └──────────┘",
  65. _output
  66. );
  67. Assert.True (lv.ScrollDown (10));
  68. lv.Draw ();
  69. Assert.Equal (-1, lv.SelectedItem);
  70. TestHelpers.AssertDriverContentsWithFrameAre (
  71. @"
  72. ┌──────────┐
  73. │Line10 │
  74. │Line11 │
  75. │Line12 │
  76. │Line13 │
  77. │Line14 │
  78. │Line15 │
  79. │Line16 │
  80. │Line17 │
  81. │Line18 │
  82. │Line19 │
  83. └──────────┘",
  84. _output
  85. );
  86. Assert.True (lv.MoveDown ());
  87. lv.Draw ();
  88. Assert.Equal (0, lv.SelectedItem);
  89. TestHelpers.AssertDriverContentsWithFrameAre (
  90. @"
  91. ┌──────────┐
  92. │Line0 │
  93. │Line1 │
  94. │Line2 │
  95. │Line3 │
  96. │Line4 │
  97. │Line5 │
  98. │Line6 │
  99. │Line7 │
  100. │Line8 │
  101. │Line9 │
  102. └──────────┘",
  103. _output
  104. );
  105. Assert.True (lv.MoveEnd ());
  106. lv.Draw ();
  107. Assert.Equal (19, lv.SelectedItem);
  108. TestHelpers.AssertDriverContentsWithFrameAre (
  109. @"
  110. ┌──────────┐
  111. │Line19 │
  112. │ │
  113. │ │
  114. │ │
  115. │ │
  116. │ │
  117. │ │
  118. │ │
  119. │ │
  120. │ │
  121. └──────────┘",
  122. _output
  123. );
  124. Assert.True (lv.ScrollUp (20));
  125. lv.Draw ();
  126. Assert.Equal (19, lv.SelectedItem);
  127. TestHelpers.AssertDriverContentsWithFrameAre (
  128. @"
  129. ┌──────────┐
  130. │Line0 │
  131. │Line1 │
  132. │Line2 │
  133. │Line3 │
  134. │Line4 │
  135. │Line5 │
  136. │Line6 │
  137. │Line7 │
  138. │Line8 │
  139. │Line9 │
  140. └──────────┘",
  141. _output
  142. );
  143. Assert.True (lv.MoveDown ());
  144. lv.Draw ();
  145. Assert.Equal (19, lv.SelectedItem);
  146. TestHelpers.AssertDriverContentsWithFrameAre (
  147. @"
  148. ┌──────────┐
  149. │Line10 │
  150. │Line11 │
  151. │Line12 │
  152. │Line13 │
  153. │Line14 │
  154. │Line15 │
  155. │Line16 │
  156. │Line17 │
  157. │Line18 │
  158. │Line19 │
  159. └──────────┘",
  160. _output
  161. );
  162. Assert.True (lv.ScrollUp (20));
  163. lv.Draw ();
  164. Assert.Equal (19, lv.SelectedItem);
  165. TestHelpers.AssertDriverContentsWithFrameAre (
  166. @"
  167. ┌──────────┐
  168. │Line0 │
  169. │Line1 │
  170. │Line2 │
  171. │Line3 │
  172. │Line4 │
  173. │Line5 │
  174. │Line6 │
  175. │Line7 │
  176. │Line8 │
  177. │Line9 │
  178. └──────────┘",
  179. _output
  180. );
  181. Assert.True (lv.MoveDown ());
  182. lv.Draw ();
  183. Assert.Equal (19, lv.SelectedItem);
  184. TestHelpers.AssertDriverContentsWithFrameAre (
  185. @"
  186. ┌──────────┐
  187. │Line10 │
  188. │Line11 │
  189. │Line12 │
  190. │Line13 │
  191. │Line14 │
  192. │Line15 │
  193. │Line16 │
  194. │Line17 │
  195. │Line18 │
  196. │Line19 │
  197. └──────────┘",
  198. _output
  199. );
  200. Assert.True (lv.MoveHome ());
  201. lv.Draw ();
  202. Assert.Equal (0, lv.SelectedItem);
  203. TestHelpers.AssertDriverContentsWithFrameAre (
  204. @"
  205. ┌──────────┐
  206. │Line0 │
  207. │Line1 │
  208. │Line2 │
  209. │Line3 │
  210. │Line4 │
  211. │Line5 │
  212. │Line6 │
  213. │Line7 │
  214. │Line8 │
  215. │Line9 │
  216. └──────────┘",
  217. _output
  218. );
  219. Assert.True (lv.ScrollDown (20));
  220. lv.Draw ();
  221. Assert.Equal (0, lv.SelectedItem);
  222. TestHelpers.AssertDriverContentsWithFrameAre (
  223. @"
  224. ┌──────────┐
  225. │Line19 │
  226. │ │
  227. │ │
  228. │ │
  229. │ │
  230. │ │
  231. │ │
  232. │ │
  233. │ │
  234. │ │
  235. └──────────┘",
  236. _output
  237. );
  238. Assert.True (lv.MoveUp ());
  239. lv.Draw ();
  240. Assert.Equal (0, lv.SelectedItem);
  241. TestHelpers.AssertDriverContentsWithFrameAre (
  242. @"
  243. ┌──────────┐
  244. │Line0 │
  245. │Line1 │
  246. │Line2 │
  247. │Line3 │
  248. │Line4 │
  249. │Line5 │
  250. │Line6 │
  251. │Line7 │
  252. │Line8 │
  253. │Line9 │
  254. └──────────┘",
  255. _output
  256. );
  257. }
  258. [Fact]
  259. [AutoInitShutdown]
  260. public void EnsureSelectedItemVisible_SelectedItem ()
  261. {
  262. List<string> source = new ();
  263. for (var i = 0; i < 10; i++)
  264. {
  265. source.Add ($"Item {i}");
  266. }
  267. var lv = new ListView { Width = 10, Height = 5, Source = new ListWrapper (source) };
  268. Application.Top.Add (lv);
  269. Application.Begin (Application.Top);
  270. TestHelpers.AssertDriverContentsWithFrameAre (
  271. @"
  272. Item 0
  273. Item 1
  274. Item 2
  275. Item 3
  276. Item 4",
  277. _output
  278. );
  279. // EnsureSelectedItemVisible is auto enabled on the OnSelectedChanged
  280. lv.SelectedItem = 6;
  281. Application.Refresh ();
  282. TestHelpers.AssertDriverContentsWithFrameAre (
  283. @"
  284. Item 2
  285. Item 3
  286. Item 4
  287. Item 5
  288. Item 6",
  289. _output
  290. );
  291. }
  292. [Fact]
  293. [AutoInitShutdown]
  294. public void EnsureSelectedItemVisible_Top ()
  295. {
  296. List<string> source = new () { "First", "Second" };
  297. var lv = new ListView { Width = Dim.Fill (), Height = 1, Source = new ListWrapper (source) };
  298. lv.SelectedItem = 1;
  299. Application.Top.Add (lv);
  300. Application.Begin (Application.Top);
  301. Assert.Equal ("Second ", GetContents (0));
  302. Assert.Equal (new string (' ', 7), GetContents (1));
  303. lv.MoveUp ();
  304. lv.Draw ();
  305. Assert.Equal ("First ", GetContents (0));
  306. Assert.Equal (new string (' ', 7), GetContents (1));
  307. string GetContents (int line)
  308. {
  309. var item = "";
  310. for (var i = 0; i < 7; i++)
  311. {
  312. item += Application.Driver.Contents [line, i].Rune;
  313. }
  314. return item;
  315. }
  316. }
  317. [Fact]
  318. public void KeyBindings_Command ()
  319. {
  320. List<string> source = new () { "One", "Two", "Three" };
  321. var lv = new ListView { Height = 2, AllowsMarking = true, Source = new ListWrapper (source) };
  322. lv.BeginInit ();
  323. lv.EndInit ();
  324. Assert.Equal (-1, lv.SelectedItem);
  325. Assert.True (lv.NewKeyDownEvent (Key.CursorDown));
  326. Assert.Equal (0, lv.SelectedItem);
  327. Assert.True (lv.NewKeyDownEvent (Key.CursorUp));
  328. Assert.Equal (0, lv.SelectedItem);
  329. Assert.True (lv.NewKeyDownEvent (Key.PageDown));
  330. Assert.Equal (2, lv.SelectedItem);
  331. Assert.Equal (2, lv.TopItem);
  332. Assert.True (lv.NewKeyDownEvent (Key.PageUp));
  333. Assert.Equal (0, lv.SelectedItem);
  334. Assert.Equal (0, lv.TopItem);
  335. Assert.False (lv.Source.IsMarked (lv.SelectedItem));
  336. Assert.True (lv.NewKeyDownEvent (Key.Space));
  337. Assert.True (lv.Source.IsMarked (lv.SelectedItem));
  338. var opened = false;
  339. lv.OpenSelectedItem += (s, _) => opened = true;
  340. Assert.True (lv.NewKeyDownEvent (Key.Enter));
  341. Assert.True (opened);
  342. Assert.True (lv.NewKeyDownEvent (Key.End));
  343. Assert.Equal (2, lv.SelectedItem);
  344. Assert.True (lv.NewKeyDownEvent (Key.Home));
  345. Assert.Equal (0, lv.SelectedItem);
  346. }
  347. [Fact]
  348. public void HotKey_Command_SetsFocus ()
  349. {
  350. var view = new ListView ();
  351. view.CanFocus = true;
  352. Assert.False (view.HasFocus);
  353. view.InvokeCommand (Command.HotKey);
  354. Assert.True (view.HasFocus);
  355. }
  356. [Fact]
  357. public void HotKey_Command_Does_Not_Accept ()
  358. {
  359. var listView = new ListView ();
  360. var accepted = false;
  361. listView.Accept += OnAccept;
  362. listView.InvokeCommand (Command.HotKey);
  363. Assert.False (accepted);
  364. return;
  365. void OnAccept (object sender, CancelEventArgs e) { accepted = true; }
  366. }
  367. [Fact]
  368. public void Accept_Command_Accepts_and_Opens_Selected_Item ()
  369. {
  370. List<string> source = ["One", "Two", "Three"];
  371. var listView = new ListView {Source = new ListWrapper (source) };
  372. listView.SelectedItem = 0;
  373. var accepted = false;
  374. var opened = false;
  375. string selectedValue = string.Empty;
  376. listView.Accept += Accept;
  377. listView.OpenSelectedItem += OpenSelectedItem;
  378. listView.InvokeCommand (Command.Accept);
  379. Assert.True (accepted);
  380. Assert.True (opened);
  381. Assert.Equal (source [0], selectedValue);
  382. return;
  383. void OpenSelectedItem (object sender, ListViewItemEventArgs e)
  384. {
  385. opened = true;
  386. selectedValue = e.Value.ToString ();
  387. }
  388. void Accept (object sender, CancelEventArgs e) { accepted = true; }
  389. }
  390. [Fact]
  391. public void Accept_Cancel_Event_Prevents_OpenSelectedItem ()
  392. {
  393. List<string> source = ["One", "Two", "Three"];
  394. var listView = new ListView { Source = new ListWrapper (source) };
  395. listView.SelectedItem = 0;
  396. var accepted = false;
  397. var opened = false;
  398. string selectedValue = string.Empty;
  399. listView.Accept += Accept;
  400. listView.OpenSelectedItem += OpenSelectedItem;
  401. listView.InvokeCommand (Command.Accept);
  402. Assert.True (accepted);
  403. Assert.False (opened);
  404. Assert.Equal (string.Empty, selectedValue);
  405. return;
  406. void OpenSelectedItem (object sender, ListViewItemEventArgs e)
  407. {
  408. opened = true;
  409. selectedValue = e.Value.ToString ();
  410. }
  411. void Accept (object sender, CancelEventArgs e)
  412. {
  413. accepted = true;
  414. e.Cancel = true;
  415. }
  416. }
  417. /// <summary>
  418. /// Tests that when none of the Commands in a chained keybinding are possible the
  419. /// <see cref="View.NewKeyDownEvent"/> returns the appropriate result
  420. /// </summary>
  421. [Fact]
  422. public void ListViewProcessKeyReturnValue_WithMultipleCommands ()
  423. {
  424. var lv = new ListView { Source = new ListWrapper (new List<string> { "One", "Two", "Three", "Four" }) };
  425. Assert.NotNull (lv.Source);
  426. // first item should be deselected by default
  427. Assert.Equal (-1, lv.SelectedItem);
  428. // bind shift down to move down twice in control
  429. lv.KeyBindings.Add (Key.CursorDown.WithShift, Command.LineDown, Command.LineDown);
  430. var ev = Key.CursorDown.WithShift;
  431. Assert.True (lv.NewKeyDownEvent (ev), "The first time we move down 2 it should be possible");
  432. // After moving down twice from -1 we should be at 'Two'
  433. Assert.Equal (1, lv.SelectedItem);
  434. // clear the items
  435. lv.SetSource (null);
  436. // Press key combo again - return should be false this time as none of the Commands are allowable
  437. Assert.False (lv.NewKeyDownEvent (ev), "We cannot move down so will not respond to this");
  438. }
  439. [Fact]
  440. public void ListViewSelectThenDown ()
  441. {
  442. var lv = new ListView { Source = new ListWrapper (new List<string> { "One", "Two", "Three" }) };
  443. lv.AllowsMarking = true;
  444. Assert.NotNull (lv.Source);
  445. // first item should be deselected by default
  446. Assert.Equal (-1, lv.SelectedItem);
  447. // nothing is ticked
  448. Assert.False (lv.Source.IsMarked (0));
  449. Assert.False (lv.Source.IsMarked (1));
  450. Assert.False (lv.Source.IsMarked (2));
  451. lv.KeyBindings.Add (Key.Space.WithShift, Command.Select, Command.LineDown);
  452. var ev = Key.Space.WithShift;
  453. // view should indicate that it has accepted and consumed the event
  454. Assert.True (lv.NewKeyDownEvent (ev));
  455. // first item should now be selected
  456. Assert.Equal (0, lv.SelectedItem);
  457. // none of the items should be ticked
  458. Assert.False (lv.Source.IsMarked (0));
  459. Assert.False (lv.Source.IsMarked (1));
  460. Assert.False (lv.Source.IsMarked (2));
  461. // Press key combo again
  462. Assert.True (lv.NewKeyDownEvent (ev));
  463. // second item should now be selected
  464. Assert.Equal (1, lv.SelectedItem);
  465. // first item only should be ticked
  466. Assert.True (lv.Source.IsMarked (0));
  467. Assert.False (lv.Source.IsMarked (1));
  468. Assert.False (lv.Source.IsMarked (2));
  469. // Press key combo again
  470. Assert.True (lv.NewKeyDownEvent (ev));
  471. Assert.Equal (2, lv.SelectedItem);
  472. Assert.True (lv.Source.IsMarked (0));
  473. Assert.True (lv.Source.IsMarked (1));
  474. Assert.False (lv.Source.IsMarked (2));
  475. // Press key combo again
  476. Assert.True (lv.NewKeyDownEvent (ev));
  477. Assert.Equal (2, lv.SelectedItem); // cannot move down any further
  478. Assert.True (lv.Source.IsMarked (0));
  479. Assert.True (lv.Source.IsMarked (1));
  480. Assert.True (lv.Source.IsMarked (2)); // but can toggle marked
  481. // Press key combo again
  482. Assert.True (lv.NewKeyDownEvent (ev));
  483. Assert.Equal (2, lv.SelectedItem); // cannot move down any further
  484. Assert.True (lv.Source.IsMarked (0));
  485. Assert.True (lv.Source.IsMarked (1));
  486. Assert.False (lv.Source.IsMarked (2)); // untoggle toggle marked
  487. }
  488. [Fact]
  489. public void ListWrapper_StartsWith ()
  490. {
  491. var lw = new ListWrapper (new List<string> { "One", "Two", "Three" });
  492. Assert.Equal (1, lw.StartsWith ("t"));
  493. Assert.Equal (1, lw.StartsWith ("tw"));
  494. Assert.Equal (2, lw.StartsWith ("th"));
  495. Assert.Equal (1, lw.StartsWith ("T"));
  496. Assert.Equal (1, lw.StartsWith ("TW"));
  497. Assert.Equal (2, lw.StartsWith ("TH"));
  498. lw = new ListWrapper (new List<string> { "One", "Two", "Three" });
  499. Assert.Equal (1, lw.StartsWith ("t"));
  500. Assert.Equal (1, lw.StartsWith ("tw"));
  501. Assert.Equal (2, lw.StartsWith ("th"));
  502. Assert.Equal (1, lw.StartsWith ("T"));
  503. Assert.Equal (1, lw.StartsWith ("TW"));
  504. Assert.Equal (2, lw.StartsWith ("TH"));
  505. }
  506. [Fact]
  507. public void OnEnter_Does_Not_Throw_Exception ()
  508. {
  509. var lv = new ListView ();
  510. var top = new View ();
  511. top.Add (lv);
  512. Exception exception = Record.Exception (lv.SetFocus);
  513. Assert.Null (exception);
  514. }
  515. [Fact]
  516. [AutoInitShutdown]
  517. public void RowRender_Event ()
  518. {
  519. var rendered = false;
  520. List<string> source = new () { "one", "two", "three" };
  521. var lv = new ListView { Width = Dim.Fill (), Height = Dim.Fill () };
  522. lv.RowRender += (s, _) => rendered = true;
  523. Application.Top.Add (lv);
  524. Application.Begin (Application.Top);
  525. Assert.False (rendered);
  526. lv.SetSource (source);
  527. lv.Draw ();
  528. Assert.True (rendered);
  529. }
  530. [Fact]
  531. public void SelectedItem_Get_Set ()
  532. {
  533. var lv = new ListView { Source = new ListWrapper (new List<string> { "One", "Two", "Three" }) };
  534. Assert.Equal (-1, lv.SelectedItem);
  535. Assert.Throws<ArgumentException> (() => lv.SelectedItem = 3);
  536. Exception exception = Record.Exception (() => lv.SelectedItem = -1);
  537. Assert.Null (exception);
  538. }
  539. [Fact]
  540. public void SetSource_Preserves_ListWrapper_Instance_If_Not_Null ()
  541. {
  542. var lv = new ListView { Source = new ListWrapper (new List<string> { "One", "Two" }) };
  543. Assert.NotNull (lv.Source);
  544. lv.SetSource (null);
  545. Assert.NotNull (lv.Source);
  546. lv.Source = null;
  547. Assert.Null (lv.Source);
  548. lv = new ListView { Source = new ListWrapper (new List<string> { "One", "Two" }) };
  549. Assert.NotNull (lv.Source);
  550. lv.SetSourceAsync (null);
  551. Assert.NotNull (lv.Source);
  552. }
  553. [Fact]
  554. public void SettingEmptyKeybindingThrows ()
  555. {
  556. var lv = new ListView { Source = new ListWrapper (new List<string> { "One", "Two", "Three" }) };
  557. Assert.Throws<ArgumentException> (() => lv.KeyBindings.Add (Key.Space));
  558. }
  559. private class NewListDataSource : IListDataSource
  560. {
  561. public int Count => throw new NotImplementedException ();
  562. public int Length => throw new NotImplementedException ();
  563. public bool IsMarked (int item) { throw new NotImplementedException (); }
  564. public void Render (
  565. ListView container,
  566. ConsoleDriver driver,
  567. bool selected,
  568. int item,
  569. int col,
  570. int line,
  571. int width,
  572. int start = 0
  573. )
  574. {
  575. throw new NotImplementedException ();
  576. }
  577. public void SetMark (int item, bool value) { throw new NotImplementedException (); }
  578. public IList ToList () { return new List<string> { "One", "Two", "Three" }; }
  579. }
  580. // No longer needed given PR #2920
  581. // [Fact, AutoInitShutdown]
  582. // public void Clicking_On_Border_Is_Ignored ()
  583. // {
  584. // var selected = "";
  585. // var lv = new ListView {
  586. // Height = 5,
  587. // Width = 7,
  588. // BorderStyle = LineStyle.Single
  589. // };
  590. // lv.SetSource (new List<string> { "One", "Two", "Three", "Four" });
  591. // lv.SelectedItemChanged += (s, e) => selected = e.Value.ToString ();
  592. // Application.Top.Add (lv);
  593. // Application.Begin (Application.Top);
  594. // Assert.Equal (new Thickness (1), lv.Border.Thickness);
  595. // Assert.Equal (-1, lv.SelectedItem);
  596. // Assert.Equal ("", lv.Text);
  597. // TestHelpers.AssertDriverContentsWithFrameAre (@"
  598. //┌─────┐
  599. //│One │
  600. //│Two │
  601. //│Three│
  602. //└─────┘", output);
  603. // Assert.True (lv.OnMouseEvent (new MouseEvent {
  604. // X = 0,
  605. // Y = 0,
  606. // Flags = MouseFlags.Button1Clicked
  607. // }));
  608. // Assert.Equal ("", selected);
  609. // Assert.Equal (-1, lv.SelectedItem);
  610. // Assert.True (lv.OnMouseEvent (new MouseEvent {
  611. // X = 0,
  612. // Y = 1,
  613. // Flags = MouseFlags.Button1Clicked
  614. // }));
  615. // Assert.Equal ("One", selected);
  616. // Assert.Equal (0, lv.SelectedItem);
  617. // Assert.True (lv.OnMouseEvent (new MouseEvent {
  618. // X = 0,
  619. // Y = 2,
  620. // Flags = MouseFlags.Button1Clicked
  621. // }));
  622. // Assert.Equal ("Two", selected);
  623. // Assert.Equal (1, lv.SelectedItem);
  624. // Assert.True (lv.OnMouseEvent (new MouseEvent {
  625. // X = 0,
  626. // Y = 3,
  627. // Flags = MouseFlags.Button1Clicked
  628. // }));
  629. // Assert.Equal ("Three", selected);
  630. // Assert.Equal (2, lv.SelectedItem);
  631. // Assert.True (lv.OnMouseEvent (new MouseEvent {
  632. // X = 0,
  633. // Y = 4,
  634. // Flags = MouseFlags.Button1Clicked
  635. // }));
  636. // Assert.Equal ("Three", selected);
  637. // Assert.Equal (2, lv.SelectedItem);
  638. // }
  639. }