ElementAtTest.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  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 ElementAtTest : ReactiveTest
  19. {
  20. [Fact]
  21. public void ElementAt_ArgumentChecking()
  22. {
  23. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ElementAt(default(IObservable<int>), 2));
  24. ReactiveAssert.Throws<ArgumentOutOfRangeException>(() => Observable.ElementAt(DummyObservable<int>.Instance, -1));
  25. }
  26. [Fact]
  27. public void ElementAt_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.ElementAt(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 ElementAt_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.ElementAt(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 ElementAt_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.ElementAt(3)
  80. );
  81. res.Messages.AssertEqual(
  82. OnError<int>(600, e => e is ArgumentOutOfRangeException)
  83. );
  84. }
  85. [Fact]
  86. public void ElementAt_Error()
  87. {
  88. var scheduler = new TestScheduler();
  89. var ex = new Exception();
  90. var xs = scheduler.CreateHotObservable(
  91. OnNext(280, 42),
  92. OnNext(360, 43),
  93. OnError<int>(420, ex)
  94. );
  95. var res = scheduler.Start(() =>
  96. xs.ElementAt(3)
  97. );
  98. res.Messages.AssertEqual(
  99. OnError<int>(420, ex)
  100. );
  101. xs.Subscriptions.AssertEqual(
  102. Subscribe(200, 420)
  103. );
  104. }
  105. }
  106. }