StackExtensionsTests.cs 5.4 KB

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