MaterializeTest.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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 MaterializeTest : ReactiveTest
  12. {
  13. [Fact]
  14. public void Materialize_ArgumentChecking()
  15. {
  16. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Materialize<int>(null));
  17. }
  18. [Fact]
  19. public void Materialize_Never()
  20. {
  21. var scheduler = new TestScheduler();
  22. var res = scheduler.Start(() =>
  23. Observable.Never<int>().Materialize()
  24. );
  25. res.Messages.AssertEqual(
  26. );
  27. }
  28. [Fact]
  29. public void Materialize_Empty()
  30. {
  31. var scheduler = new TestScheduler();
  32. var xs = scheduler.CreateHotObservable(
  33. OnNext(150, 1),
  34. OnCompleted<int>(250)
  35. );
  36. var res = scheduler.Start(() =>
  37. xs.Materialize()
  38. );
  39. res.Messages.AssertEqual(
  40. OnNext(250, Notification.CreateOnCompleted<int>()),
  41. OnCompleted<Notification<int>>(250)
  42. );
  43. xs.Subscriptions.AssertEqual(
  44. Subscribe(200, 250)
  45. );
  46. }
  47. [Fact]
  48. public void Materialize_Return()
  49. {
  50. var scheduler = new TestScheduler();
  51. var xs = scheduler.CreateHotObservable(
  52. OnNext(150, 1),
  53. OnNext(210, 2),
  54. OnCompleted<int>(250)
  55. );
  56. var res = scheduler.Start(() =>
  57. xs.Materialize()
  58. );
  59. res.Messages.AssertEqual(
  60. OnNext(210, Notification.CreateOnNext(2)),
  61. OnNext(250, Notification.CreateOnCompleted<int>()),
  62. OnCompleted<Notification<int>>(250)
  63. );
  64. xs.Subscriptions.AssertEqual(
  65. Subscribe(200, 250)
  66. );
  67. }
  68. [Fact]
  69. public void Materialize_Throw()
  70. {
  71. var scheduler = new TestScheduler();
  72. var ex = new Exception();
  73. var xs = scheduler.CreateHotObservable(
  74. OnNext(150, 1),
  75. OnError<int>(250, ex)
  76. );
  77. var res = scheduler.Start(() =>
  78. xs.Materialize()
  79. );
  80. res.Messages.AssertEqual(
  81. OnNext(250, Notification.CreateOnError<int>(ex)),
  82. OnCompleted<Notification<int>>(250)
  83. );
  84. xs.Subscriptions.AssertEqual(
  85. Subscribe(200, 250)
  86. );
  87. }
  88. }
  89. }