TreeViewFluentTests.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. using Terminal.Gui;
  2. using TerminalGuiFluentTesting;
  3. using TerminalGuiFluentTestingXunit;
  4. using Xunit.Abstractions;
  5. namespace IntegrationTests.FluentTests;
  6. public class TreeViewFluentTests
  7. {
  8. private readonly TextWriter _out;
  9. public TreeViewFluentTests (ITestOutputHelper outputHelper) { _out = new TestOutputWriter (outputHelper); }
  10. [Theory]
  11. [ClassData (typeof (V2TestDrivers))]
  12. public void TreeView_AllowReOrdering (V2TestDriver d)
  13. {
  14. var tv = new TreeView
  15. {
  16. Width = Dim.Fill (),
  17. Height = Dim.Fill ()
  18. };
  19. TreeNode car;
  20. TreeNode lorry;
  21. TreeNode bike;
  22. var root = new TreeNode ("Root")
  23. {
  24. Children =
  25. [
  26. car = new ("Car"),
  27. lorry = new ("Lorry"),
  28. bike = new ("Bike")
  29. ]
  30. };
  31. tv.AddObject (root);
  32. using GuiTestContext context =
  33. With.A<Window> (40, 10, d)
  34. .Add (tv)
  35. .Focus (tv)
  36. .WaitIteration ()
  37. .ScreenShot ("Before expanding", _out)
  38. .AssertEqual (root, tv.GetObjectOnRow (0))
  39. .Then (() => Assert.Null (tv.GetObjectOnRow (1)))
  40. .Right ()
  41. .ScreenShot ("After expanding", _out)
  42. .AssertMultiple (
  43. () =>
  44. {
  45. Assert.Equal (root, tv.GetObjectOnRow (0));
  46. Assert.Equal (car, tv.GetObjectOnRow (1));
  47. Assert.Equal (lorry, tv.GetObjectOnRow (2));
  48. Assert.Equal (bike, tv.GetObjectOnRow (3));
  49. })
  50. .AssertIsAssignableFrom <ITreeNode>(tv.SelectedObject)
  51. .Then (
  52. () =>
  53. {
  54. // Re order
  55. root.Children = [bike, car, lorry];
  56. tv.RefreshObject (root);
  57. })
  58. .WaitIteration ()
  59. .ScreenShot ("After re-order", _out)
  60. .AssertMultiple (
  61. () =>
  62. {
  63. Assert.Equal (root, tv.GetObjectOnRow (0));
  64. Assert.Equal (bike, tv.GetObjectOnRow (1));
  65. Assert.Equal (car, tv.GetObjectOnRow (2));
  66. Assert.Equal (lorry, tv.GetObjectOnRow (3));
  67. })
  68. .WriteOutLogs (_out);
  69. context.Stop ();
  70. }
  71. [Theory]
  72. [ClassData (typeof (V2TestDrivers))]
  73. public void TreeViewReOrder_PreservesExpansion (V2TestDriver d)
  74. {
  75. var tv = new TreeView
  76. {
  77. Width = Dim.Fill (),
  78. Height = Dim.Fill ()
  79. };
  80. TreeNode car;
  81. TreeNode lorry;
  82. TreeNode bike;
  83. TreeNode mrA;
  84. TreeNode mrB;
  85. TreeNode mrC;
  86. TreeNode mrD;
  87. TreeNode mrE;
  88. var root = new TreeNode ("Root")
  89. {
  90. Children =
  91. [
  92. car = new ("Car")
  93. {
  94. Children =
  95. [
  96. mrA = new ("Mr A"),
  97. mrB = new ("Mr B")
  98. ]
  99. },
  100. lorry = new ("Lorry")
  101. {
  102. Children =
  103. [
  104. mrC = new ("Mr C")
  105. ]
  106. },
  107. bike = new ("Bike")
  108. {
  109. Children =
  110. [
  111. mrD = new ("Mr D"),
  112. mrE = new ("Mr E")
  113. ]
  114. }
  115. ]
  116. };
  117. tv.AddObject (root);
  118. tv.ExpandAll ();
  119. using GuiTestContext context =
  120. With.A<Window> (40, 13, d)
  121. .Add (tv)
  122. .WaitIteration ()
  123. .ScreenShot ("Initial State", _out)
  124. .AssertMultiple (
  125. () =>
  126. {
  127. Assert.Equal (root, tv.GetObjectOnRow (0));
  128. Assert.Equal (car, tv.GetObjectOnRow (1));
  129. Assert.Equal (mrA, tv.GetObjectOnRow (2));
  130. Assert.Equal (mrB, tv.GetObjectOnRow (3));
  131. Assert.Equal (lorry, tv.GetObjectOnRow (4));
  132. Assert.Equal (mrC, tv.GetObjectOnRow (5));
  133. Assert.Equal (bike, tv.GetObjectOnRow (6));
  134. Assert.Equal (mrD, tv.GetObjectOnRow (7));
  135. Assert.Equal (mrE, tv.GetObjectOnRow (8));
  136. })
  137. .Then (
  138. () =>
  139. {
  140. // Re order
  141. root.Children = [bike, car, lorry];
  142. tv.RefreshObject (root);
  143. })
  144. .WaitIteration ()
  145. .ScreenShot ("After re-order", _out)
  146. .AssertMultiple (
  147. () =>
  148. {
  149. Assert.Equal (root, tv.GetObjectOnRow (0));
  150. Assert.Equal (bike, tv.GetObjectOnRow (1));
  151. Assert.Equal (mrD, tv.GetObjectOnRow (2));
  152. Assert.Equal (mrE, tv.GetObjectOnRow (3));
  153. Assert.Equal (car, tv.GetObjectOnRow (4));
  154. Assert.Equal (mrA, tv.GetObjectOnRow (5));
  155. Assert.Equal (mrB, tv.GetObjectOnRow (6));
  156. Assert.Equal (lorry, tv.GetObjectOnRow (7));
  157. Assert.Equal (mrC, tv.GetObjectOnRow (8));
  158. })
  159. .WriteOutLogs (_out);
  160. context.Stop ();
  161. }
  162. }