TimeIntervalTest.cs 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  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. using ReactiveTests.Dummies;
  15. using System.Reflection;
  16. using System.Threading;
  17. using System.Reactive.Disposables;
  18. using System.Reactive.Subjects;
  19. namespace ReactiveTests.Tests
  20. {
  21. public class TimeIntervalTest : ReactiveTest
  22. {
  23. [Fact]
  24. public void TimeInterval_ArgumentChecking()
  25. {
  26. var scheduler = new TestScheduler();
  27. var someObservable = Observable.Empty<int>();
  28. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.TimeInterval(default(IObservable<int>)));
  29. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.TimeInterval(default(IObservable<int>), scheduler));
  30. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.TimeInterval(someObservable, null));
  31. }
  32. [Fact]
  33. public void TimeInterval_Regular()
  34. {
  35. var scheduler = new TestScheduler();
  36. var xs = scheduler.CreateHotObservable(
  37. OnNext(150, 1),
  38. OnNext(210, 2),
  39. OnNext(230, 3),
  40. OnNext(260, 4),
  41. OnNext(300, 5),
  42. OnNext(350, 6),
  43. OnCompleted<int>(400)
  44. );
  45. var res = scheduler.Start(() =>
  46. xs.TimeInterval(scheduler.DisableOptimizations())
  47. );
  48. res.Messages.AssertEqual(
  49. OnNext(210, new TimeInterval<int>(2, TimeSpan.FromTicks(10))),
  50. OnNext(230, new TimeInterval<int>(3, TimeSpan.FromTicks(20))),
  51. OnNext(260, new TimeInterval<int>(4, TimeSpan.FromTicks(30))),
  52. OnNext(300, new TimeInterval<int>(5, TimeSpan.FromTicks(40))),
  53. OnNext(350, new TimeInterval<int>(6, TimeSpan.FromTicks(50))),
  54. OnCompleted<TimeInterval<int>>(400)
  55. );
  56. xs.Subscriptions.AssertEqual(
  57. Subscribe(200, 400)
  58. );
  59. }
  60. [Fact]
  61. public void TimeInterval_Empty()
  62. {
  63. var scheduler = new TestScheduler();
  64. var xs = scheduler.CreateHotObservable(
  65. OnNext(150, 1),
  66. OnCompleted<int>(300)
  67. );
  68. var res = scheduler.Start(() =>
  69. xs.TimeInterval(scheduler.DisableOptimizations())
  70. );
  71. res.Messages.AssertEqual(
  72. OnCompleted<TimeInterval<int>>(300)
  73. );
  74. xs.Subscriptions.AssertEqual(
  75. Subscribe(200, 300)
  76. );
  77. }
  78. [Fact]
  79. public void TimeInterval_Error()
  80. {
  81. var scheduler = new TestScheduler();
  82. var ex = new Exception();
  83. var xs = scheduler.CreateHotObservable(
  84. OnNext(150, 1),
  85. OnError<int>(300, ex)
  86. );
  87. var res = scheduler.Start(() =>
  88. xs.TimeInterval(scheduler.DisableOptimizations())
  89. );
  90. res.Messages.AssertEqual(
  91. OnError<TimeInterval<int>>(300, ex)
  92. );
  93. xs.Subscriptions.AssertEqual(
  94. Subscribe(200, 300)
  95. );
  96. }
  97. [Fact]
  98. public void TimeInterval_Never()
  99. {
  100. var scheduler = new TestScheduler();
  101. var xs = scheduler.CreateHotObservable(
  102. OnNext(150, 1)
  103. );
  104. var res = scheduler.Start(() =>
  105. xs.TimeInterval(scheduler.DisableOptimizations())
  106. );
  107. res.Messages.AssertEqual(
  108. );
  109. xs.Subscriptions.AssertEqual(
  110. Subscribe(200, 1000)
  111. );
  112. }
  113. [Fact]
  114. public void TimeInterval_DefaultScheduler()
  115. {
  116. Assert.True(Observable.Return(1).TimeInterval().Count().First() == 1);
  117. }
  118. [Fact]
  119. public void TimeInterval_WithStopwatch_Regular()
  120. {
  121. var scheduler = new TestScheduler();
  122. var xs = scheduler.CreateHotObservable(
  123. OnNext(150, 1),
  124. OnNext(210, 2),
  125. OnNext(230, 3),
  126. OnNext(260, 4),
  127. OnNext(300, 5),
  128. OnNext(350, 6),
  129. OnCompleted<int>(400)
  130. );
  131. var res = scheduler.Start(() =>
  132. xs.TimeInterval(scheduler)
  133. );
  134. res.Messages.AssertEqual(
  135. OnNext(210, new TimeInterval<int>(2, TimeSpan.FromTicks(10))),
  136. OnNext(230, new TimeInterval<int>(3, TimeSpan.FromTicks(20))),
  137. OnNext(260, new TimeInterval<int>(4, TimeSpan.FromTicks(30))),
  138. OnNext(300, new TimeInterval<int>(5, TimeSpan.FromTicks(40))),
  139. OnNext(350, new TimeInterval<int>(6, TimeSpan.FromTicks(50))),
  140. OnCompleted<TimeInterval<int>>(400)
  141. );
  142. xs.Subscriptions.AssertEqual(
  143. Subscribe(200, 400)
  144. );
  145. }
  146. [Fact]
  147. public void TimeInterval_WithStopwatch_Empty()
  148. {
  149. var scheduler = new TestScheduler();
  150. var xs = scheduler.CreateHotObservable(
  151. OnNext(150, 1),
  152. OnCompleted<int>(300)
  153. );
  154. var res = scheduler.Start(() =>
  155. xs.TimeInterval(scheduler)
  156. );
  157. res.Messages.AssertEqual(
  158. OnCompleted<TimeInterval<int>>(300)
  159. );
  160. xs.Subscriptions.AssertEqual(
  161. Subscribe(200, 300)
  162. );
  163. }
  164. [Fact]
  165. public void TimeInterval_WithStopwatch_Error()
  166. {
  167. var scheduler = new TestScheduler();
  168. var ex = new Exception();
  169. var xs = scheduler.CreateHotObservable(
  170. OnNext(150, 1),
  171. OnError<int>(300, ex)
  172. );
  173. var res = scheduler.Start(() =>
  174. xs.TimeInterval(scheduler)
  175. );
  176. res.Messages.AssertEqual(
  177. OnError<TimeInterval<int>>(300, ex)
  178. );
  179. xs.Subscriptions.AssertEqual(
  180. Subscribe(200, 300)
  181. );
  182. }
  183. [Fact]
  184. public void TimeInterval_WithStopwatch_Never()
  185. {
  186. var scheduler = new TestScheduler();
  187. var xs = scheduler.CreateHotObservable(
  188. OnNext(150, 1)
  189. );
  190. var res = scheduler.Start(() =>
  191. xs.TimeInterval(scheduler)
  192. );
  193. res.Messages.AssertEqual(
  194. );
  195. xs.Subscriptions.AssertEqual(
  196. Subscribe(200, 1000)
  197. );
  198. }
  199. }
  200. }