TreeViewFluentTests.cs 6.2 KB

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