DelaySubscriptionTest.cs 5.2 KB

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