DelaySubscriptionTest.cs 5.4 KB

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