FirstTest.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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.Linq;
  6. using System.Reactive.Linq;
  7. using Microsoft.Reactive.Testing;
  8. using ReactiveTests.Dummies;
  9. using Microsoft.VisualStudio.TestTools.UnitTesting;
  10. using Assert = Xunit.Assert;
  11. namespace ReactiveTests.Tests
  12. {
  13. [TestClass]
  14. public class FirstTest : ReactiveTest
  15. {
  16. [TestMethod]
  17. public void First_ArgumentChecking()
  18. {
  19. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.First(default(IObservable<int>)));
  20. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.First(default(IObservable<int>), _ => true));
  21. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.First(DummyObservable<int>.Instance, default));
  22. }
  23. [TestMethod]
  24. public void First_Empty()
  25. {
  26. ReactiveAssert.Throws<InvalidOperationException>(() => Observable.Empty<int>().First());
  27. }
  28. [TestMethod]
  29. public void FirstPredicate_Empty()
  30. {
  31. ReactiveAssert.Throws<InvalidOperationException>(() => Observable.Empty<int>().First(_ => true));
  32. }
  33. [TestMethod]
  34. public void First_Return()
  35. {
  36. var value = 42;
  37. Assert.Equal(value, Observable.Return(value).First());
  38. }
  39. [TestMethod]
  40. public void FirstPredicate_Return()
  41. {
  42. var value = 42;
  43. Assert.Equal(value, Observable.Return(value).First(i => i % 2 == 0));
  44. }
  45. [TestMethod]
  46. public void FirstPredicate_Return_NoMatch()
  47. {
  48. var value = 42;
  49. ReactiveAssert.Throws<InvalidOperationException>(() => Observable.Return(value).First(i => i % 2 != 0));
  50. }
  51. [TestMethod]
  52. public void First_Throw()
  53. {
  54. var ex = new Exception();
  55. var xs = Observable.Throw<int>(ex);
  56. ReactiveAssert.Throws(ex, () => xs.First());
  57. }
  58. [TestMethod]
  59. public void FirstPredicate_Throw()
  60. {
  61. var ex = new Exception();
  62. var xs = Observable.Throw<int>(ex);
  63. ReactiveAssert.Throws(ex, () => xs.First(_ => true));
  64. }
  65. [TestMethod]
  66. public void First_Range()
  67. {
  68. var value = 42;
  69. Assert.Equal(value, Observable.Range(value, 10).First());
  70. }
  71. [TestMethod]
  72. public void FirstPredicate_Range()
  73. {
  74. var value = 42;
  75. Assert.Equal(46, Observable.Range(value, 10).First(i => i > 45));
  76. }
  77. }
  78. }