StackExtensionsTests.cs 5.0 KB

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