DematerializeTest.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  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.Reactive;
  6. using System.Reactive.Linq;
  7. using Microsoft.Reactive.Testing;
  8. using Xunit;
  9. namespace ReactiveTests.Tests
  10. {
  11. public class DematerializeTest : ReactiveTest
  12. {
  13. [Fact]
  14. public void Dematerialize_ArgumentChecking()
  15. {
  16. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Dematerialize<int>(null));
  17. }
  18. [Fact]
  19. public void Dematerialize_Range1()
  20. {
  21. var scheduler = new TestScheduler();
  22. var xs = scheduler.CreateHotObservable(
  23. OnNext(150, Notification.CreateOnNext(41)),
  24. OnNext(210, Notification.CreateOnNext(42)),
  25. OnNext(220, Notification.CreateOnNext(43)),
  26. OnCompleted<Notification<int>>(250)
  27. );
  28. var res = scheduler.Start(() =>
  29. xs.Dematerialize()
  30. );
  31. res.Messages.AssertEqual(
  32. OnNext(210, 42),
  33. OnNext(220, 43),
  34. OnCompleted<int>(250)
  35. );
  36. xs.Subscriptions.AssertEqual(
  37. Subscribe(200, 250)
  38. );
  39. }
  40. [Fact]
  41. public void Dematerialize_Range2()
  42. {
  43. var scheduler = new TestScheduler();
  44. var xs = scheduler.CreateHotObservable(
  45. OnNext(150, Notification.CreateOnNext(41)),
  46. OnNext(210, Notification.CreateOnNext(42)),
  47. OnNext(220, Notification.CreateOnNext(43)),
  48. OnNext(230, Notification.CreateOnCompleted<int>())
  49. );
  50. var res = scheduler.Start(() =>
  51. xs.Dematerialize()
  52. );
  53. res.Messages.AssertEqual(
  54. OnNext(210, 42),
  55. OnNext(220, 43),
  56. OnCompleted<int>(230)
  57. );
  58. xs.Subscriptions.AssertEqual(
  59. Subscribe(200, 230)
  60. );
  61. }
  62. [Fact]
  63. public void Dematerialize_Error1()
  64. {
  65. var scheduler = new TestScheduler();
  66. var ex = new Exception();
  67. var xs = scheduler.CreateHotObservable(
  68. OnNext(150, Notification.CreateOnNext(41)),
  69. OnNext(210, Notification.CreateOnNext(42)),
  70. OnNext(220, Notification.CreateOnNext(43)),
  71. OnError<Notification<int>>(230, ex)
  72. );
  73. var res = scheduler.Start(() =>
  74. xs.Dematerialize()
  75. );
  76. res.Messages.AssertEqual(
  77. OnNext(210, 42),
  78. OnNext(220, 43),
  79. OnError<int>(230, ex)
  80. );
  81. xs.Subscriptions.AssertEqual(
  82. Subscribe(200, 230)
  83. );
  84. }
  85. [Fact]
  86. public void Dematerialize_Error2()
  87. {
  88. var scheduler = new TestScheduler();
  89. var ex = new Exception();
  90. var xs = scheduler.CreateHotObservable(
  91. OnNext(150, Notification.CreateOnNext(41)),
  92. OnNext(210, Notification.CreateOnNext(42)),
  93. OnNext(220, Notification.CreateOnNext(43)),
  94. OnNext(230, Notification.CreateOnError<int>(ex))
  95. );
  96. var res = scheduler.Start(() =>
  97. xs.Dematerialize()
  98. );
  99. res.Messages.AssertEqual(
  100. OnNext(210, 42),
  101. OnNext(220, 43),
  102. OnError<int>(230, ex)
  103. );
  104. xs.Subscriptions.AssertEqual(
  105. Subscribe(200, 230)
  106. );
  107. }
  108. [Fact]
  109. public void Materialize_Dematerialize_Never()
  110. {
  111. var scheduler = new TestScheduler();
  112. var xs = Observable.Never<int>();
  113. var res = scheduler.Start(() =>
  114. xs.Materialize().Dematerialize()
  115. );
  116. res.Messages.AssertEqual(
  117. );
  118. }
  119. [Fact]
  120. public void Materialize_Dematerialize_Empty()
  121. {
  122. var scheduler = new TestScheduler();
  123. var xs = scheduler.CreateHotObservable(
  124. OnNext(150, 1),
  125. OnCompleted<int>(250)
  126. );
  127. var res = scheduler.Start(() =>
  128. xs.Materialize().Dematerialize()
  129. );
  130. res.Messages.AssertEqual(
  131. OnCompleted<int>(250)
  132. );
  133. xs.Subscriptions.AssertEqual(
  134. Subscribe(200, 250)
  135. );
  136. }
  137. [Fact]
  138. public void Materialize_Dematerialize_Return()
  139. {
  140. var scheduler = new TestScheduler();
  141. var xs = scheduler.CreateHotObservable(
  142. OnNext(150, 1),
  143. OnNext(210, 2),
  144. OnCompleted<int>(250)
  145. );
  146. var res = scheduler.Start(() =>
  147. xs.Materialize().Dematerialize()
  148. );
  149. res.Messages.AssertEqual(
  150. OnNext(210, 2),
  151. OnCompleted<int>(250)
  152. );
  153. xs.Subscriptions.AssertEqual(
  154. Subscribe(200, 250)
  155. );
  156. }
  157. [Fact]
  158. public void Materialize_Dematerialize_Throw()
  159. {
  160. var scheduler = new TestScheduler();
  161. var ex = new Exception();
  162. var xs = scheduler.CreateHotObservable(
  163. OnNext(150, 1),
  164. OnError<int>(250, ex)
  165. );
  166. var res = scheduler.Start(() =>
  167. xs.Materialize().Dematerialize()
  168. );
  169. res.Messages.AssertEqual(
  170. OnError<int>(250, ex)
  171. );
  172. xs.Subscriptions.AssertEqual(
  173. Subscribe(200, 250)
  174. );
  175. }
  176. }
  177. }