FinallyTest.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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.Text;
  7. using System.Linq;
  8. using Xunit;
  9. namespace Tests
  10. {
  11. public class FinallyTest : Tests
  12. {
  13. [Fact]
  14. public void Finally_Arguments()
  15. {
  16. AssertThrows<ArgumentNullException>(() => EnumerableEx.Finally<int>(null, () => { }));
  17. AssertThrows<ArgumentNullException>(() => EnumerableEx.Finally<int>(new[] { 1 }, null));
  18. }
  19. [Fact]
  20. public void Finally1()
  21. {
  22. var done = false;
  23. var xs = Enumerable.Range(0, 2).Finally(() => done = true);
  24. Assert.False(done);
  25. var e = xs.GetEnumerator();
  26. Assert.False(done);
  27. HasNext(e, 0);
  28. Assert.False(done);
  29. HasNext(e, 1);
  30. Assert.False(done);
  31. NoNext(e);
  32. Assert.True(done);
  33. }
  34. [Fact]
  35. public void Finally2()
  36. {
  37. var done = false;
  38. var xs = Enumerable.Range(0, 2).Finally(() => done = true);
  39. Assert.False(done);
  40. var e = xs.GetEnumerator();
  41. Assert.False(done);
  42. HasNext(e, 0);
  43. Assert.False(done);
  44. e.Dispose();
  45. Assert.True(done);
  46. }
  47. [Fact]
  48. public void Finally3()
  49. {
  50. var done = false;
  51. var ex = new MyException();
  52. var xs = EnumerableEx.Throw<int>(ex).Finally(() => done = true);
  53. Assert.False(done);
  54. var e = xs.GetEnumerator();
  55. Assert.False(done);
  56. try
  57. {
  58. HasNext(e, 0);
  59. Assert.True(false);
  60. }
  61. catch (MyException ex_)
  62. {
  63. Assert.Same(ex, ex_);
  64. }
  65. Assert.True(done);
  66. }
  67. }
  68. }