AppendTest.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. // Licensed to the .NET Foundation under one or more agreements.
  2. // The .NET Foundation licenses this file to you under the Apache 2.0 License.
  3. // See the LICENSE file in the project root for more information.
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Reactive;
  10. using System.Reactive.Concurrency;
  11. using System.Reactive.Linq;
  12. using Microsoft.Reactive.Testing;
  13. using Xunit;
  14. namespace ReactiveTests.Tests
  15. {
  16. public class AppendTest : ReactiveTest
  17. {
  18. [Fact]
  19. public void Append_ArgumentChecking()
  20. {
  21. var scheduler = new TestScheduler();
  22. var someObservable = Observable.Empty<int>();
  23. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Append(default(IObservable<int>), 1));
  24. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Append(default(IObservable<int>), 1, scheduler));
  25. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Append(someObservable, 1, default(IScheduler)));
  26. }
  27. [Fact]
  28. public void Append()
  29. {
  30. var scheduler = new TestScheduler();
  31. var xs = scheduler.CreateHotObservable(
  32. OnNext(150, 1),
  33. OnNext(220, 2),
  34. OnCompleted<int>(250)
  35. );
  36. var res = scheduler.Start(() =>
  37. xs.Append(3)
  38. );
  39. res.Messages.AssertEqual(
  40. OnNext(220, 2),
  41. OnNext(250, 3),
  42. OnCompleted<int>(250)
  43. );
  44. }
  45. [Fact]
  46. public void Append_Null()
  47. {
  48. var scheduler = new TestScheduler();
  49. var xs = scheduler.CreateHotObservable(
  50. OnNext(150, "1"),
  51. OnNext(220, "2"),
  52. OnCompleted<string>(250)
  53. );
  54. var res = scheduler.Start(() =>
  55. xs.Append(null)
  56. );
  57. res.Messages.AssertEqual(
  58. OnNext(220, "2"),
  59. OnNext(250, (string)null),
  60. OnCompleted<string>(250)
  61. );
  62. }
  63. [Fact]
  64. public void Append_Scheduler()
  65. {
  66. var scheduler = new TestScheduler();
  67. var xs = scheduler.CreateHotObservable(
  68. OnNext(150, 1),
  69. OnNext(220, 2),
  70. OnCompleted<int>(250)
  71. );
  72. var res = scheduler.Start(() =>
  73. xs.Append(3, scheduler)
  74. );
  75. res.Messages.AssertEqual(
  76. OnNext(220, 2),
  77. OnNext(251, 3),
  78. OnCompleted<int>(252)
  79. );
  80. }
  81. [Fact]
  82. public void Append_Many()
  83. {
  84. var scheduler = new TestScheduler();
  85. var xs = scheduler.CreateHotObservable(
  86. OnNext(150, 1),
  87. OnNext(220, 2),
  88. OnCompleted<int>(250)
  89. );
  90. var res = scheduler.Start(() =>
  91. xs.Append(3).Append(4).Append(5)
  92. );
  93. res.Messages.AssertEqual(
  94. OnNext(220, 2),
  95. OnNext(250, 3),
  96. OnNext(250, 4),
  97. OnNext(250, 5),
  98. OnCompleted<int>(250)
  99. );
  100. }
  101. [Fact]
  102. public void Append_Many_Take()
  103. {
  104. var scheduler = new TestScheduler();
  105. var xs = scheduler.CreateHotObservable(
  106. OnNext(150, 1),
  107. OnNext(220, 2),
  108. OnCompleted<int>(250)
  109. );
  110. var res = scheduler.Start(() =>
  111. xs.Append(3).Append(4).Append(5).Take(2)
  112. );
  113. res.Messages.AssertEqual(
  114. OnNext(220, 2),
  115. OnNext(250, 3),
  116. OnCompleted<int>(250)
  117. );
  118. }
  119. [Fact]
  120. public void Append_Many_Scheduler()
  121. {
  122. var scheduler = new TestScheduler();
  123. var xs = scheduler.CreateHotObservable(
  124. OnNext(150, 1),
  125. OnNext(220, 2),
  126. OnCompleted<int>(250)
  127. );
  128. var res = scheduler.Start(() =>
  129. xs.Append(3, scheduler).Append(4, scheduler).Append(5, scheduler)
  130. );
  131. res.Messages.AssertEqual(
  132. OnNext(220, 2),
  133. OnNext(251, 3),
  134. OnNext(253, 4),
  135. OnNext(255, 5),
  136. OnCompleted<int>(256)
  137. );
  138. }
  139. [Fact]
  140. public void Append_Many_Take_Scheduler()
  141. {
  142. var scheduler = new TestScheduler();
  143. var xs = scheduler.CreateHotObservable(
  144. OnNext(150, 1),
  145. OnNext(220, 2),
  146. OnCompleted<int>(250)
  147. );
  148. var res = scheduler.Start(() =>
  149. xs.Append(3, scheduler).Append(4, scheduler).Append(5, scheduler).Take(2)
  150. );
  151. res.Messages.AssertEqual(
  152. OnNext(220, 2),
  153. OnNext(251, 3),
  154. OnCompleted<int>(251)
  155. );
  156. }
  157. }
  158. }