ElementAtOrDefaultTest.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  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.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Reactive;
  10. using System.Reactive.Concurrency;
  11. using System.Reactive.Linq;
  12. using Microsoft.Reactive.Testing;
  13. using Xunit;
  14. using ReactiveTests.Dummies;
  15. using System.Reflection;
  16. namespace ReactiveTests.Tests
  17. {
  18. public class ElementAtOrDefaultTest : ReactiveTest
  19. {
  20. [Fact]
  21. public void ElementAtOrDefault_ArgumentChecking()
  22. {
  23. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ElementAtOrDefault(default(IObservable<int>), 2));
  24. ReactiveAssert.Throws<ArgumentOutOfRangeException>(() => Observable.ElementAtOrDefault(DummyObservable<int>.Instance, -1));
  25. }
  26. [Fact]
  27. public void ElementAtOrDefault_First()
  28. {
  29. var scheduler = new TestScheduler();
  30. var xs = scheduler.CreateHotObservable(
  31. OnNext(280, 42),
  32. OnNext(360, 43),
  33. OnNext(470, 44),
  34. OnCompleted<int>(600)
  35. );
  36. var res = scheduler.Start(() =>
  37. xs.ElementAtOrDefault(0)
  38. );
  39. res.Messages.AssertEqual(
  40. OnNext(280, 42),
  41. OnCompleted<int>(280)
  42. );
  43. xs.Subscriptions.AssertEqual(
  44. Subscribe(200, 280)
  45. );
  46. }
  47. [Fact]
  48. public void ElementAtOrDefault_Other()
  49. {
  50. var scheduler = new TestScheduler();
  51. var xs = scheduler.CreateHotObservable(
  52. OnNext(280, 42),
  53. OnNext(360, 43),
  54. OnNext(470, 44),
  55. OnCompleted<int>(600)
  56. );
  57. var res = scheduler.Start(() =>
  58. xs.ElementAtOrDefault(2)
  59. );
  60. res.Messages.AssertEqual(
  61. OnNext(470, 44),
  62. OnCompleted<int>(470)
  63. );
  64. xs.Subscriptions.AssertEqual(
  65. Subscribe(200, 470)
  66. );
  67. }
  68. [Fact]
  69. public void ElementAtOrDefault_OutOfRange()
  70. {
  71. var scheduler = new TestScheduler();
  72. var xs = scheduler.CreateHotObservable(
  73. OnNext(280, 42),
  74. OnNext(360, 43),
  75. OnNext(470, 44),
  76. OnCompleted<int>(600)
  77. );
  78. var res = scheduler.Start(() =>
  79. xs.ElementAtOrDefault(3)
  80. );
  81. res.Messages.AssertEqual(
  82. OnNext(600, 0),
  83. OnCompleted<int>(600)
  84. );
  85. xs.Subscriptions.AssertEqual(
  86. Subscribe(200, 600)
  87. );
  88. }
  89. [Fact]
  90. public void ElementAtOrDefault_Error()
  91. {
  92. var scheduler = new TestScheduler();
  93. var ex = new Exception();
  94. var xs = scheduler.CreateHotObservable(
  95. OnNext(280, 42),
  96. OnNext(360, 43),
  97. OnError<int>(420, ex)
  98. );
  99. var res = scheduler.Start(() =>
  100. xs.ElementAtOrDefault(3)
  101. );
  102. res.Messages.AssertEqual(
  103. OnError<int>(420, ex)
  104. );
  105. xs.Subscriptions.AssertEqual(
  106. Subscribe(200, 420)
  107. );
  108. }
  109. }
  110. }