DelaySubscriptionTest.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  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 DelaySubscriptionTest : ReactiveTest
  22. {
  23. [Fact]
  24. public void DelaySubscription_ArgumentChecking()
  25. {
  26. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.DelaySubscription(default(IObservable<int>), DateTimeOffset.Now));
  27. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.DelaySubscription(default(IObservable<int>), DateTimeOffset.Now, Scheduler.Immediate));
  28. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.DelaySubscription(DummyObservable<int>.Instance, DateTimeOffset.Now, default(IScheduler)));
  29. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.DelaySubscription(default(IObservable<int>), TimeSpan.Zero));
  30. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.DelaySubscription(default(IObservable<int>), TimeSpan.Zero, Scheduler.Immediate));
  31. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.DelaySubscription(DummyObservable<int>.Instance, TimeSpan.Zero, default(IScheduler)));
  32. ReactiveAssert.Throws<ArgumentOutOfRangeException>(() => Observable.DelaySubscription(DummyObservable<int>.Instance, TimeSpan.FromSeconds(-1)));
  33. ReactiveAssert.Throws<ArgumentOutOfRangeException>(() => Observable.DelaySubscription(DummyObservable<int>.Instance, TimeSpan.FromSeconds(-1), Scheduler.Immediate));
  34. }
  35. [Fact]
  36. public void DelaySubscription_TimeSpan_Default()
  37. {
  38. var lst = new List<int>();
  39. Observable.Range(0, 10).DelaySubscription(TimeSpan.FromMilliseconds(1)).ForEach(lst.Add);
  40. Assert.True(Enumerable.Range(0, 10).SequenceEqual(lst));
  41. }
  42. [Fact]
  43. public void DelaySubscription_TimeSpan_Simple()
  44. {
  45. var scheduler = new TestScheduler();
  46. var xs = scheduler.CreateColdObservable(
  47. OnNext(50, 42),
  48. OnNext(60, 43),
  49. OnCompleted<int>(70)
  50. );
  51. var res = scheduler.Start(() =>
  52. xs.DelaySubscription(TimeSpan.FromTicks(30), scheduler)
  53. );
  54. res.Messages.AssertEqual(
  55. OnNext(280, 42),
  56. OnNext(290, 43),
  57. OnCompleted<int>(300)
  58. );
  59. xs.Subscriptions.AssertEqual(
  60. Subscribe(230, 300)
  61. );
  62. }
  63. [Fact]
  64. public void DelaySubscription_TimeSpan_Error()
  65. {
  66. var ex = new Exception();
  67. var scheduler = new TestScheduler();
  68. var xs = scheduler.CreateColdObservable(
  69. OnNext(50, 42),
  70. OnNext(60, 43),
  71. OnError<int>(70, ex)
  72. );
  73. var res = scheduler.Start(() =>
  74. xs.DelaySubscription(TimeSpan.FromTicks(30), scheduler)
  75. );
  76. res.Messages.AssertEqual(
  77. OnNext(280, 42),
  78. OnNext(290, 43),
  79. OnError<int>(300, ex)
  80. );
  81. xs.Subscriptions.AssertEqual(
  82. Subscribe(230, 300)
  83. );
  84. }
  85. [Fact]
  86. public void DelaySubscription_DateTimeOffset_Default()
  87. {
  88. var lst = new List<int>();
  89. Observable.Range(0, 10).DelaySubscription(DateTimeOffset.UtcNow.AddMilliseconds(1)).ForEach(lst.Add);
  90. Assert.True(Enumerable.Range(0, 10).SequenceEqual(lst));
  91. }
  92. [Fact]
  93. public void DelaySubscription_DateTimeOffset_Simple()
  94. {
  95. var scheduler = new TestScheduler();
  96. var xs = scheduler.CreateColdObservable(
  97. OnNext(50, 42),
  98. OnNext(60, 43),
  99. OnCompleted<int>(70)
  100. );
  101. var res = scheduler.Start(() =>
  102. xs.DelaySubscription(new DateTimeOffset(230, TimeSpan.Zero), scheduler)
  103. );
  104. res.Messages.AssertEqual(
  105. OnNext(280, 42),
  106. OnNext(290, 43),
  107. OnCompleted<int>(300)
  108. );
  109. xs.Subscriptions.AssertEqual(
  110. Subscribe(230, 300)
  111. );
  112. }
  113. [Fact]
  114. public void DelaySubscription_DateTimeOffset_Error()
  115. {
  116. var ex = new Exception();
  117. var scheduler = new TestScheduler();
  118. var xs = scheduler.CreateColdObservable(
  119. OnNext(50, 42),
  120. OnNext(60, 43),
  121. OnError<int>(70, ex)
  122. );
  123. var res = scheduler.Start(() =>
  124. xs.DelaySubscription(new DateTimeOffset(230, TimeSpan.Zero), scheduler)
  125. );
  126. res.Messages.AssertEqual(
  127. OnNext(280, 42),
  128. OnNext(290, 43),
  129. OnError<int>(300, ex)
  130. );
  131. xs.Subscriptions.AssertEqual(
  132. Subscribe(230, 300)
  133. );
  134. }
  135. }
  136. }