ExceptionHelperTest.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  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.Reactive;
  5. using Xunit;
  6. using System;
  7. namespace ReactiveTests.Tests
  8. {
  9. public class ExceptionHelperTest
  10. {
  11. Exception errors;
  12. [Fact]
  13. public void ExceptionHelper_TrySetException_Empty()
  14. {
  15. var ex = new InvalidOperationException();
  16. Assert.True(ExceptionHelper.TrySetException(ref errors, ex));
  17. Assert.Equal(ex, errors);
  18. }
  19. [Fact]
  20. public void ExceptionHelper_TrySetException_Not_Empty()
  21. {
  22. var ex1 = new InvalidOperationException();
  23. errors = ex1;
  24. var ex2 = new NotSupportedException();
  25. Assert.False(ExceptionHelper.TrySetException(ref errors, ex2));
  26. Assert.Equal(ex1, errors);
  27. }
  28. [Fact]
  29. public void ExceptionHelper_TrySetException_Terminate_Empty()
  30. {
  31. var ex = ExceptionHelper.Terminate(ref errors);
  32. Assert.Null(ex);
  33. Assert.Equal(errors, ExceptionHelper.Terminated);
  34. }
  35. [Fact]
  36. public void ExceptionHelper_TrySetException_Terminate_Not_Empty()
  37. {
  38. var ex1 = new InvalidOperationException();
  39. errors = ex1;
  40. var ex = ExceptionHelper.Terminate(ref errors);
  41. Assert.Equal(ex, ex1);
  42. Assert.Equal(errors, ExceptionHelper.Terminated);
  43. }
  44. [Fact]
  45. public void ExceptionHelper_TrySetException_Terminate_Twice()
  46. {
  47. var ex1 = new InvalidOperationException();
  48. errors = ex1;
  49. var ex = ExceptionHelper.Terminate(ref errors);
  50. Assert.Equal(ex, ex1);
  51. Assert.Equal(errors, ExceptionHelper.Terminated);
  52. ex = ExceptionHelper.Terminate(ref errors);
  53. Assert.Equal(ex, ExceptionHelper.Terminated);
  54. Assert.Equal(errors, ExceptionHelper.Terminated);
  55. }
  56. [Fact]
  57. public void ExceptionHelper_TryAddException_Empty()
  58. {
  59. var ex1 = new InvalidOperationException();
  60. Assert.True(ExceptionHelper.TryAddException(ref errors, ex1));
  61. Assert.Equal(ex1, errors);
  62. }
  63. [Fact]
  64. public void ExceptionHelper_TryAddException_Not_Empty()
  65. {
  66. var ex1 = new InvalidOperationException();
  67. errors = ex1;
  68. var ex2 = new NotImplementedException();
  69. Assert.True(ExceptionHelper.TryAddException(ref errors, ex2));
  70. Assert.True(errors is AggregateException);
  71. var x = errors as AggregateException;
  72. Assert.Equal(2, x.InnerExceptions.Count);
  73. Assert.True(x.InnerExceptions[0] is InvalidOperationException);
  74. Assert.True(x.InnerExceptions[1] is NotImplementedException);
  75. }
  76. [Fact]
  77. public void ExceptionHelper_TryAddException_Aggregated()
  78. {
  79. var ex1 = new InvalidOperationException();
  80. var ex2 = new NotImplementedException();
  81. errors = new AggregateException(ex1, ex2);
  82. var ex3 = new InvalidCastException();
  83. Assert.True(ExceptionHelper.TryAddException(ref errors, ex3));
  84. Assert.True(errors is AggregateException);
  85. var x = errors as AggregateException;
  86. Assert.Equal(3, x.InnerExceptions.Count);
  87. Assert.True(x.InnerExceptions[0] is InvalidOperationException);
  88. Assert.True(x.InnerExceptions[1] is NotImplementedException);
  89. Assert.True(x.InnerExceptions[2] is InvalidCastException);
  90. }
  91. [Fact]
  92. public void ExceptionHelper_TryAddException_Terminated()
  93. {
  94. errors = ExceptionHelper.Terminated;
  95. var ex = new InvalidCastException();
  96. Assert.False(ExceptionHelper.TryAddException(ref errors, ex));
  97. Assert.Equal(errors, ExceptionHelper.Terminated);
  98. }
  99. }
  100. }