TimestampTest.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  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;
  7. using System.Reactive.Linq;
  8. using Microsoft.Reactive.Testing;
  9. using Microsoft.VisualStudio.TestTools.UnitTesting;
  10. using Assert = Xunit.Assert;
  11. namespace ReactiveTests.Tests
  12. {
  13. [TestClass]
  14. public class TimestampTest : ReactiveTest
  15. {
  16. [TestMethod]
  17. public void Timestamp_ArgumentChecking()
  18. {
  19. var scheduler = new TestScheduler();
  20. var someObservable = Observable.Empty<int>();
  21. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Timestamp(default(IObservable<int>)));
  22. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Timestamp(default(IObservable<int>), scheduler));
  23. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Timestamp(someObservable, null));
  24. }
  25. [TestMethod]
  26. public void Timestamp_Regular()
  27. {
  28. var scheduler = new TestScheduler();
  29. var xs = scheduler.CreateHotObservable(
  30. OnNext(150, 1),
  31. OnNext(210, 2),
  32. OnNext(230, 3),
  33. OnNext(260, 4),
  34. OnNext(300, 5),
  35. OnNext(350, 6),
  36. OnCompleted<int>(400)
  37. );
  38. var res = scheduler.Start(() =>
  39. xs.Timestamp(scheduler)
  40. );
  41. res.Messages.AssertEqual(
  42. OnNext(210, new Timestamped<int>(2, new DateTimeOffset(210, TimeSpan.Zero))),
  43. OnNext(230, new Timestamped<int>(3, new DateTimeOffset(230, TimeSpan.Zero))),
  44. OnNext(260, new Timestamped<int>(4, new DateTimeOffset(260, TimeSpan.Zero))),
  45. OnNext(300, new Timestamped<int>(5, new DateTimeOffset(300, TimeSpan.Zero))),
  46. OnNext(350, new Timestamped<int>(6, new DateTimeOffset(350, TimeSpan.Zero))),
  47. OnCompleted<Timestamped<int>>(400)
  48. );
  49. xs.Subscriptions.AssertEqual(
  50. Subscribe(200, 400)
  51. );
  52. }
  53. [TestMethod]
  54. public void Timestamp_Empty()
  55. {
  56. var scheduler = new TestScheduler();
  57. var xs = scheduler.CreateHotObservable(
  58. OnNext(150, 1),
  59. OnCompleted<int>(400)
  60. );
  61. var res = scheduler.Start(() =>
  62. xs.Timestamp(scheduler)
  63. );
  64. res.Messages.AssertEqual(
  65. OnCompleted<Timestamped<int>>(400)
  66. );
  67. xs.Subscriptions.AssertEqual(
  68. Subscribe(200, 400)
  69. );
  70. }
  71. [TestMethod]
  72. public void Timestamp_Error()
  73. {
  74. var scheduler = new TestScheduler();
  75. var ex = new Exception();
  76. var xs = scheduler.CreateHotObservable(
  77. OnNext(150, 1),
  78. OnError<int>(400, ex)
  79. );
  80. var res = scheduler.Start(() =>
  81. xs.Timestamp(scheduler)
  82. );
  83. res.Messages.AssertEqual(
  84. OnError<Timestamped<int>>(400, ex)
  85. );
  86. xs.Subscriptions.AssertEqual(
  87. Subscribe(200, 400)
  88. );
  89. }
  90. [TestMethod]
  91. public void Timestamp_Never()
  92. {
  93. var scheduler = new TestScheduler();
  94. var xs = scheduler.CreateHotObservable(
  95. OnNext(150, 1)
  96. );
  97. var res = scheduler.Start(() =>
  98. xs.Timestamp(scheduler)
  99. );
  100. res.Messages.AssertEqual(
  101. );
  102. xs.Subscriptions.AssertEqual(
  103. Subscribe(200, 1000)
  104. );
  105. }
  106. [TestMethod]
  107. public void Timestamp_DefaultScheduler()
  108. {
  109. Assert.True(Observable.Return(1).Timestamp().Count().First() == 1);
  110. }
  111. }
  112. }