LayoutQueueTests.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using Avalonia.Layout;
  4. using Xunit;
  5. namespace Avalonia.Base.UnitTests.Layout
  6. {
  7. public class LayoutQueueTests
  8. {
  9. [Fact]
  10. public void Should_Enqueue()
  11. {
  12. var target = new LayoutQueue<string>(_ => true);
  13. var refQueue = new Queue<string>();
  14. var items = new[] { "1", "2", "3" };
  15. foreach (var item in items)
  16. {
  17. target.Enqueue(item);
  18. refQueue.Enqueue(item);
  19. }
  20. Assert.Equal(refQueue, target);
  21. }
  22. [Fact]
  23. public void Should_Dequeue()
  24. {
  25. var target = new LayoutQueue<string>(_ => true);
  26. var refQueue = new Queue<string>();
  27. var items = new[] { "1", "2", "3" };
  28. foreach (var item in items)
  29. {
  30. target.Enqueue(item);
  31. refQueue.Enqueue(item);
  32. }
  33. while (refQueue.Count > 0)
  34. {
  35. Assert.Equal(refQueue.Dequeue(), target.Dequeue());
  36. }
  37. }
  38. [Fact]
  39. public void Should_Enqueue_UniqueElements()
  40. {
  41. var target = new LayoutQueue<string>(_ => true);
  42. var items = new[] { "1", "2", "3", "1" };
  43. foreach (var item in items)
  44. {
  45. target.Enqueue(item);
  46. }
  47. Assert.Equal(3, target.Count);
  48. Assert.Equal(items.Take(3), target);
  49. }
  50. [Fact]
  51. public void Shouldnt_Enqueue_More_Than_Limit_In_Loop()
  52. {
  53. var target = new LayoutQueue<string>(_ => true);
  54. //1
  55. target.Enqueue("Foo");
  56. Assert.Equal(1, target.Count);
  57. target.BeginLoop(3);
  58. target.Dequeue();
  59. //2
  60. target.Enqueue("Foo");
  61. target.Dequeue();
  62. //3
  63. target.Enqueue("Foo");
  64. Assert.Equal(1, target.Count);
  65. target.Dequeue();
  66. //4 more than limit shouldn't be added
  67. target.Enqueue("Foo");
  68. Assert.Equal(0, target.Count);
  69. }
  70. [Fact]
  71. public void Shouldnt_Count_Unique_Enqueue_For_Limit_In_Loop()
  72. {
  73. var target = new LayoutQueue<string>(_ => true);
  74. //1
  75. target.Enqueue("Foo");
  76. Assert.Equal(1, target.Count);
  77. target.BeginLoop(3);
  78. target.Dequeue();
  79. //2
  80. target.Enqueue("Foo");
  81. target.Enqueue("Foo");
  82. target.Dequeue();
  83. //3
  84. target.Enqueue("Foo");
  85. target.Enqueue("Foo");
  86. Assert.Equal(1, target.Count);
  87. target.Dequeue();
  88. //4 more than limit shouldn't be added
  89. target.Enqueue("Foo");
  90. Assert.Equal(0, target.Count);
  91. }
  92. [Fact]
  93. public void Should_Enqueue_When_Condition_True_After_Loop_When_Limit_Met()
  94. {
  95. var target = new LayoutQueue<string>(_ => true);
  96. //1
  97. target.Enqueue("Foo");
  98. Assert.Equal(1, target.Count);
  99. target.BeginLoop(3);
  100. target.Dequeue();
  101. //2
  102. target.Enqueue("Foo");
  103. target.Dequeue();
  104. //3
  105. target.Enqueue("Foo");
  106. Assert.Equal(1, target.Count);
  107. target.Dequeue();
  108. //4 more than limit shouldn't be added to queue
  109. target.Enqueue("Foo");
  110. Assert.Equal(0, target.Count);
  111. target.EndLoop();
  112. //after loop should be added once
  113. Assert.Equal(1, target.Count);
  114. Assert.Equal("Foo", target.First());
  115. }
  116. [Fact]
  117. public void Shouldnt_Enqueue_When_Condition_False_After_Loop_When_Limit_Met()
  118. {
  119. var target = new LayoutQueue<string>(_ => false);
  120. //1
  121. target.Enqueue("Foo");
  122. Assert.Equal(1, target.Count);
  123. target.BeginLoop(3);
  124. target.Dequeue();
  125. //2
  126. target.Enqueue("Foo");
  127. target.Dequeue();
  128. //3
  129. target.Enqueue("Foo");
  130. Assert.Equal(1, target.Count);
  131. target.Dequeue();
  132. //4 more than limit shouldn't be added
  133. target.Enqueue("Foo");
  134. Assert.Equal(0, target.Count);
  135. target.EndLoop();
  136. Assert.Equal(0, target.Count);
  137. }
  138. }
  139. }