IntervalTest.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  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.Linq;
  6. using System.Reactive.Linq;
  7. using System.Threading;
  8. using Microsoft.Reactive.Testing;
  9. using ReactiveTests.Dummies;
  10. using Microsoft.VisualStudio.TestTools.UnitTesting;
  11. using Assert = Xunit.Assert;
  12. namespace ReactiveTests.Tests
  13. {
  14. [TestClass]
  15. public class IntervalTest : ReactiveTest
  16. {
  17. [TestMethod]
  18. public void Interval_TimeSpan_ArgumentChecking()
  19. {
  20. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Interval(TimeSpan.Zero, null));
  21. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Interval(TimeSpan.Zero, DummyScheduler.Instance).Subscribe(null));
  22. ReactiveAssert.Throws<ArgumentOutOfRangeException>(() => Observable.Interval(TimeSpan.FromSeconds(-1)));
  23. ReactiveAssert.Throws<ArgumentOutOfRangeException>(() => Observable.Interval(TimeSpan.FromSeconds(-1), DummyScheduler.Instance));
  24. }
  25. [TestMethod]
  26. public void Interval_TimeSpan_Basic()
  27. {
  28. var scheduler = new TestScheduler();
  29. var res = scheduler.Start(() =>
  30. Observable.Interval(TimeSpan.FromTicks(100), scheduler)
  31. );
  32. res.Messages.AssertEqual(
  33. OnNext(300, 0L),
  34. OnNext(400, 1L),
  35. OnNext(500, 2L),
  36. OnNext(600, 3L),
  37. OnNext(700, 4L),
  38. OnNext(800, 5L),
  39. OnNext(900, 6L)
  40. );
  41. }
  42. [TestMethod]
  43. public void Interval_TimeSpan_Zero()
  44. {
  45. var scheduler = new TestScheduler();
  46. var res = scheduler.Start(() =>
  47. Observable.Interval(TimeSpan.FromTicks(0), scheduler),
  48. 210
  49. );
  50. res.Messages.AssertEqual(
  51. OnNext(201, 0L),
  52. OnNext(202, 1L),
  53. OnNext(203, 2L),
  54. OnNext(204, 3L),
  55. OnNext(205, 4L),
  56. OnNext(206, 5L),
  57. OnNext(207, 6L),
  58. OnNext(208, 7L),
  59. OnNext(209, 8L)
  60. );
  61. }
  62. [TestMethod]
  63. public void Interval_TimeSpan_Zero_DefaultScheduler()
  64. {
  65. var scheduler = new TestScheduler();
  66. var observer = scheduler.CreateObserver<long>();
  67. var completed = new ManualResetEvent(false);
  68. Observable.Interval(TimeSpan.Zero).TakeWhile(i => i < 10).Subscribe(observer.OnNext, () => completed.Set());
  69. completed.WaitOne();
  70. Assert.Equal(10, observer.Messages.Count);
  71. }
  72. [TestMethod]
  73. public void Interval_TimeSpan_Disposed()
  74. {
  75. var scheduler = new TestScheduler();
  76. var res = scheduler.Start(
  77. () => Observable.Interval(TimeSpan.FromTicks(1000), scheduler)
  78. );
  79. res.Messages.AssertEqual(
  80. );
  81. }
  82. [TestMethod]
  83. public void Interval_TimeSpan_ObserverThrows()
  84. {
  85. var scheduler = new TestScheduler();
  86. var xs = Observable.Interval(TimeSpan.FromTicks(1), scheduler);
  87. xs.Subscribe(x => { throw new InvalidOperationException(); });
  88. ReactiveAssert.Throws<InvalidOperationException>(() => scheduler.Start());
  89. }
  90. [TestMethod]
  91. public void Interval_TimeSpan_DefaultScheduler()
  92. {
  93. Assert.True(Observable.Interval(TimeSpan.FromMilliseconds(1)).ToEnumerable().Take(3).SequenceEqual([0L, 1L, 2L]));
  94. }
  95. }
  96. }