AsObservableTest.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  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.Reactive.Linq;
  6. using Microsoft.Reactive.Testing;
  7. using Microsoft.VisualStudio.TestTools.UnitTesting;
  8. using Assert = Xunit.Assert;
  9. namespace ReactiveTests.Tests
  10. {
  11. [TestClass]
  12. public class AsObservableTest : ReactiveTest
  13. {
  14. [TestMethod]
  15. public void AsObservable_ArgumentChecking()
  16. {
  17. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.AsObservable<int>(null));
  18. }
  19. [TestMethod]
  20. public void AsObservable_AsObservable()
  21. {
  22. var scheduler = new TestScheduler();
  23. var xs = scheduler.CreateHotObservable(
  24. OnNext(150, 1),
  25. OnNext(220, 2),
  26. OnCompleted<int>(250)
  27. );
  28. var ys = xs.AsObservable().AsObservable();
  29. Assert.NotSame(xs, ys);
  30. var res = scheduler.Start(() =>
  31. ys
  32. );
  33. res.Messages.AssertEqual(
  34. OnNext(220, 2),
  35. OnCompleted<int>(250)
  36. );
  37. xs.Subscriptions.AssertEqual(
  38. Subscribe(200, 250)
  39. );
  40. }
  41. [TestMethod]
  42. public void AsObservable_Hides()
  43. {
  44. var xs = Observable.Empty<int>();
  45. var res = xs.AsObservable();
  46. Assert.NotSame(xs, res);
  47. }
  48. [TestMethod]
  49. public void AsObservable_Never()
  50. {
  51. var scheduler = new TestScheduler();
  52. var xs = Observable.Never<int>();
  53. var res = scheduler.Start(() =>
  54. xs.AsObservable()
  55. );
  56. res.Messages.AssertEqual(
  57. );
  58. }
  59. [TestMethod]
  60. public void AsObservable_Empty()
  61. {
  62. var scheduler = new TestScheduler();
  63. var xs = scheduler.CreateHotObservable(
  64. OnNext(150, 1),
  65. OnCompleted<int>(250)
  66. );
  67. var res = scheduler.Start(() =>
  68. xs.AsObservable()
  69. );
  70. res.Messages.AssertEqual(
  71. OnCompleted<int>(250)
  72. );
  73. xs.Subscriptions.AssertEqual(
  74. Subscribe(200, 250)
  75. );
  76. }
  77. [TestMethod]
  78. public void AsObservable_Throw()
  79. {
  80. var scheduler = new TestScheduler();
  81. var ex = new Exception();
  82. var xs = scheduler.CreateHotObservable(
  83. OnNext(150, 1),
  84. OnError<int>(250, ex)
  85. );
  86. var res = scheduler.Start(() =>
  87. xs.AsObservable()
  88. );
  89. res.Messages.AssertEqual(
  90. OnError<int>(250, ex)
  91. );
  92. xs.Subscriptions.AssertEqual(
  93. Subscribe(200, 250)
  94. );
  95. }
  96. [TestMethod]
  97. public void AsObservable_Return()
  98. {
  99. var scheduler = new TestScheduler();
  100. var xs = scheduler.CreateHotObservable(
  101. OnNext(150, 1),
  102. OnNext(220, 2),
  103. OnCompleted<int>(250)
  104. );
  105. var res = scheduler.Start(() =>
  106. xs.AsObservable()
  107. );
  108. res.Messages.AssertEqual(
  109. OnNext(220, 2),
  110. OnCompleted<int>(250)
  111. );
  112. xs.Subscriptions.AssertEqual(
  113. Subscribe(200, 250)
  114. );
  115. }
  116. [TestMethod]
  117. public void AsObservable_IsNotEager()
  118. {
  119. var scheduler = new TestScheduler();
  120. var subscribed = false;
  121. var xs = Observable.Create<int>(obs =>
  122. {
  123. subscribed = true;
  124. var disp = scheduler.CreateHotObservable(
  125. OnNext(150, 1),
  126. OnNext(220, 2),
  127. OnCompleted<int>(250)
  128. ).Subscribe(obs);
  129. return disp.Dispose;
  130. });
  131. xs.AsObservable();
  132. Assert.False(subscribed);
  133. var res = scheduler.Start(() =>
  134. xs.AsObservable()
  135. );
  136. Assert.True(subscribed);
  137. }
  138. }
  139. }