StackExtensionsTests.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. using System;
  2. using System.Collections.Generic;
  3. using Terminal.Gui;
  4. using Xunit;
  5. namespace Terminal.Gui.ApplicationTests {
  6. public class StackExtensionsTests {
  7. [Fact]
  8. public void Stack_Toplevels_CreateToplevels ()
  9. {
  10. Stack<Toplevel> Toplevels = CreateToplevels ();
  11. int index = Toplevels.Count - 1;
  12. foreach (var top in Toplevels) {
  13. if (top.GetType () == typeof (Toplevel)) Assert.Equal ("Top", top.Id);
  14. else Assert.Equal ($"w{index}", top.Id);
  15. index--;
  16. }
  17. var tops = Toplevels.ToArray ();
  18. Assert.Equal ("w4", tops [0].Id);
  19. Assert.Equal ("w3", tops [1].Id);
  20. Assert.Equal ("w2", tops [2].Id);
  21. Assert.Equal ("w1", tops [3].Id);
  22. Assert.Equal ("Top", tops [^1].Id);
  23. }
  24. [Fact]
  25. public void Stack_Toplevels_Replace ()
  26. {
  27. Stack<Toplevel> Toplevels = CreateToplevels ();
  28. var valueToReplace = new Window () { Id = "w1" };
  29. var valueToReplaceWith = new Window () { Id = "new" };
  30. var comparer = new ToplevelEqualityComparer ();
  31. Toplevels.Replace (valueToReplace, valueToReplaceWith, comparer);
  32. var tops = Toplevels.ToArray ();
  33. Assert.Equal ("w4", tops [0].Id);
  34. Assert.Equal ("w3", tops [1].Id);
  35. Assert.Equal ("w2", tops [2].Id);
  36. Assert.Equal ("new", tops [3].Id);
  37. Assert.Equal ("Top", tops [^1].Id);
  38. }
  39. [Fact]
  40. public void Stack_Toplevels_Swap ()
  41. {
  42. Stack<Toplevel> Toplevels = CreateToplevels ();
  43. var valueToSwapFrom = new Window () { Id = "w3" };
  44. var valueToSwapTo = new Window () { Id = "w1" };
  45. var comparer = new ToplevelEqualityComparer ();
  46. Toplevels.Swap (valueToSwapFrom, valueToSwapTo, comparer);
  47. var tops = Toplevels.ToArray ();
  48. Assert.Equal ("w4", tops [0].Id);
  49. Assert.Equal ("w1", tops [1].Id);
  50. Assert.Equal ("w2", tops [2].Id);
  51. Assert.Equal ("w3", tops [3].Id);
  52. Assert.Equal ("Top", tops [^1].Id);
  53. }
  54. [Fact]
  55. public void Stack_Toplevels_MoveNext ()
  56. {
  57. Stack<Toplevel> Toplevels = CreateToplevels ();
  58. Toplevels.MoveNext ();
  59. var tops = Toplevels.ToArray ();
  60. Assert.Equal ("w3", tops [0].Id);
  61. Assert.Equal ("w2", tops [1].Id);
  62. Assert.Equal ("w1", tops [2].Id);
  63. Assert.Equal ("Top", tops [3].Id);
  64. Assert.Equal ("w4", tops [^1].Id);
  65. }
  66. [Fact]
  67. public void Stack_Toplevels_MovePrevious ()
  68. {
  69. Stack<Toplevel> Toplevels = CreateToplevels ();
  70. Toplevels.MovePrevious ();
  71. var tops = Toplevels.ToArray ();
  72. Assert.Equal ("Top", tops [0].Id);
  73. Assert.Equal ("w4", tops [1].Id);
  74. Assert.Equal ("w3", tops [2].Id);
  75. Assert.Equal ("w2", tops [3].Id);
  76. Assert.Equal ("w1", tops [^1].Id);
  77. }
  78. [Fact]
  79. public void ToplevelEqualityComparer_GetHashCode ()
  80. {
  81. Stack<Toplevel> Toplevels = CreateToplevels ();
  82. // Only allows unique keys
  83. var hCodes = new HashSet<int> ();
  84. foreach (var top in Toplevels) Assert.True (hCodes.Add (top.GetHashCode ()));
  85. }
  86. [Fact]
  87. public void Stack_Toplevels_FindDuplicates ()
  88. {
  89. Stack<Toplevel> Toplevels = CreateToplevels ();
  90. var comparer = new ToplevelEqualityComparer ();
  91. Toplevels.Push (new Toplevel () { Id = "w4" });
  92. Toplevels.Push (new Toplevel () { Id = "w1" });
  93. var dup = Toplevels.FindDuplicates (comparer).ToArray ();
  94. Assert.Equal ("w4", dup [0].Id);
  95. Assert.Equal ("w1", dup [^1].Id);
  96. }
  97. [Fact]
  98. public void Stack_Toplevels_Contains ()
  99. {
  100. Stack<Toplevel> Toplevels = CreateToplevels ();
  101. var comparer = new ToplevelEqualityComparer ();
  102. Assert.True (Toplevels.Contains (new Window () { Id = "w2" }, comparer));
  103. Assert.False (Toplevels.Contains (new Toplevel () { Id = "top2" }, comparer));
  104. }
  105. [Fact]
  106. public void Stack_Toplevels_MoveTo ()
  107. {
  108. Stack<Toplevel> Toplevels = CreateToplevels ();
  109. var valueToMove = new Window () { Id = "w1" };
  110. var comparer = new ToplevelEqualityComparer ();
  111. Toplevels.MoveTo (valueToMove, 1, comparer);
  112. var tops = Toplevels.ToArray ();
  113. Assert.Equal ("w4", tops [0].Id);
  114. Assert.Equal ("w1", tops [1].Id);
  115. Assert.Equal ("w3", tops [2].Id);
  116. Assert.Equal ("w2", tops [3].Id);
  117. Assert.Equal ("Top", tops [^1].Id);
  118. }
  119. [Fact]
  120. public void Stack_Toplevels_MoveTo_From_Last_To_Top ()
  121. {
  122. Stack<Toplevel> Toplevels = CreateToplevels ();
  123. var valueToMove = new Window () { Id = "Top" };
  124. var comparer = new ToplevelEqualityComparer ();
  125. Toplevels.MoveTo (valueToMove, 0, comparer);
  126. var tops = Toplevels.ToArray ();
  127. Assert.Equal ("Top", tops [0].Id);
  128. Assert.Equal ("w4", tops [1].Id);
  129. Assert.Equal ("w3", tops [2].Id);
  130. Assert.Equal ("w2", tops [3].Id);
  131. Assert.Equal ("w1", tops [^1].Id);
  132. }
  133. private Stack<Toplevel> CreateToplevels ()
  134. {
  135. var Toplevels = new Stack<Toplevel> ();
  136. Toplevels.Push (new Toplevel () { Id = "Top" });
  137. Toplevels.Push (new Window () { Id = "w1" });
  138. Toplevels.Push (new Window () { Id = "w2" });
  139. Toplevels.Push (new Window () { Id = "w3" });
  140. Toplevels.Push (new Window () { Id = "w4" });
  141. return Toplevels;
  142. }
  143. }
  144. }