public void TestLatestException_Clear_Single() { var item1 = new Mock <IDisposable>(); var item2 = new Mock <IDisposable>(); var item3 = new Mock <IDisposable>(); var item4 = new Mock <IDisposable>(); var item5 = new Mock <IDisposable>(); var ex4 = new Exception("4"); item4.Setup(o => o.Dispose()).Callback(() => throw ex4); var target = new CombinedDisposables(reverse: false, removeDispose: true); target.Add(item1.Object); target.Add(item2.Object); target.Add(item3.Object); target.Add(item4.Object); target.Add(item5.Object); target.Clear(); target.LatestException.Should() .BeOfType <Exception>() .Which.Should().BeSameAs(ex4); }
public void TestLatestException_Dispose_Reserve() { var item1 = new Mock <IDisposable>(); var item2 = new Mock <IDisposable>(); var item3 = new Mock <IDisposable>(); var item4 = new Mock <IDisposable>(); var item5 = new Mock <IDisposable>(); var ex2 = new Exception("2"); item2.Setup(o => o.Dispose()).Callback(() => throw ex2); var ex4 = new Exception("4"); item4.Setup(o => o.Dispose()).Callback(() => throw ex4); var target = new CombinedDisposables(reverse: true, removeDispose: true); target.Add(item1.Object); target.Add(item2.Object); target.Add(item3.Object); target.Add(item4.Object); target.Add(item5.Object); target.Dispose(); target.LatestException.Should() .BeOfType <AggregateException>() .Which.InnerExceptions.Should().Equal(ex4, ex2); }
public void TestClear_NoDispose() { var item1 = new Mock <IDisposable>(); var item2 = new Mock <IDisposable>(); var item3 = new Mock <IDisposable>(); var item4 = new Mock <IDisposable>(); var item5 = new Mock <IDisposable>(); var target = new CombinedDisposables(); target.Add(item1.Object); target.Add(item2.Object); target.Add(item3.Object); target.Add(item4.Object); target.Add(item5.Object); target.Should().HaveCount(5); target.DisposeOnRemove.Should().Be(false, "念のため前提を確認"); target.Clear(); target.Should().HaveCount(0); item1.Verify(o => o.Dispose(), Times.Never()); item2.Verify(o => o.Dispose(), Times.Never()); item3.Verify(o => o.Dispose(), Times.Never()); item4.Verify(o => o.Dispose(), Times.Never()); item5.Verify(o => o.Dispose(), Times.Never()); }
public void TestConstructor_Default() { var target = new CombinedDisposables(); target.ReverseDispose.Should().Be(true); target.DisposeOnRemove.Should().Be(false); target.LatestException.Should().BeNull(); target.IsDisposed.Should().Be(false); target.IsReadOnly.Should().Be(false); target.Count.Should().Be(0); target.Should().BeEmpty(); }
public void TestRemove_WithDispose() { var item1 = new Mock <IDisposable>(); var item2 = new Mock <IDisposable>(); var item3 = new Mock <IDisposable>(); var item4 = new Mock <IDisposable>(); var item5 = new Mock <IDisposable>(); var target = new CombinedDisposables(reverse: true, removeDispose: true); target.Add(item1.Object); target.Add(item2.Object); target.Add(item3.Object); target.Add(item4.Object); target.Add(item5.Object); target.Should().HaveCount(5); target.DisposeOnRemove.Should().Be(true, "念のため前提を確認"); target.Remove(item2.Object).Should().Be(true); target.Should().Equal( item1.Object, item3.Object, item4.Object, item5.Object ); item2.Verify(o => o.Dispose(), Times.Once()); target.Remove(item2.Object).Should().Be(false, "除去済みオブジェクトを再指定"); target.Should().Equal( item1.Object, item3.Object, item4.Object, item5.Object ); item2.Verify(o => o.Dispose(), Times.Exactly(2)); target.Remove(item1.Object).Should().Be(true); target.Remove(item3.Object).Should().Be(true); target.Remove(item4.Object).Should().Be(true); target.Remove(item5.Object).Should().Be(true); target.Should().HaveCount(0); item1.Verify(o => o.Dispose(), Times.Once()); item3.Verify(o => o.Dispose(), Times.Once()); item4.Verify(o => o.Dispose(), Times.Once()); item5.Verify(o => o.Dispose(), Times.Once()); var item6 = new Mock <IDisposable>(); target.Remove(item6.Object).Should().Be(false); item6.Verify(o => o.Dispose(), Times.Once()); }
public void TestAdd() { var item1 = new Mock <IDisposable>(); var item2 = new Mock <IDisposable>(); var target = new CombinedDisposables(); target.Add(item1.Object); target.Count.Should().Be(1); target.Add(item2.Object); target.Count.Should().Be(2); target.Should().Equal(item1.Object, item2.Object); }
public void TestDispose_Reverse() { var item1 = new Mock <IDisposable>(); var item2 = new Mock <IDisposable>(); var item3 = new Mock <IDisposable>(); var item4 = new Mock <IDisposable>(); var item5 = new Mock <IDisposable>(); var log = new List <IDisposable>(); item1.Setup(o => o.Dispose()).Callback(() => log.Add(item1.Object)); item2.Setup(o => o.Dispose()).Callback(() => log.Add(item2.Object)); item3.Setup(o => o.Dispose()).Callback(() => log.Add(item3.Object)); item4.Setup(o => o.Dispose()).Callback(() => log.Add(item4.Object)); item5.Setup(o => o.Dispose()).Callback(() => log.Add(item5.Object)); var target = new CombinedDisposables(reverse: true, removeDispose: false); target.Add(item1.Object); target.Add(item2.Object); target.Add(item3.Object); target.Add(item4.Object); target.Add(item5.Object); target.Dispose(); target.Should().HaveCount(0); target.IsDisposed.Should().Be(true); item1.Verify(o => o.Dispose(), Times.Once()); item2.Verify(o => o.Dispose(), Times.Once()); item3.Verify(o => o.Dispose(), Times.Once()); item4.Verify(o => o.Dispose(), Times.Once()); item5.Verify(o => o.Dispose(), Times.Once()); log.Should().Equal( item5.Object, item4.Object, item3.Object, item2.Object, item1.Object ); var item6 = new Mock <IDisposable>(); target.Add(item6.Object); item6.Verify(o => o.Dispose(), Times.Once()); }
public void TestCopyTo() { var item1 = new Mock <IDisposable>(); var item2 = new Mock <IDisposable>(); var item3 = new Mock <IDisposable>(); var item4 = new Mock <IDisposable>(); var item5 = new Mock <IDisposable>(); var target = new CombinedDisposables(reverse: true, removeDispose: false); target.Add(item1.Object); target.Add(item2.Object); target.Add(item3.Object); target.Add(item4.Object); target.Add(item5.Object); var source = (ICollection <IDisposable>)target; var dest1 = new IDisposable[5]; source.CopyTo(dest1, 0); dest1.Should().Equal( item1.Object, item2.Object, item3.Object, item4.Object, item5.Object ); var dest2 = new IDisposable[10]; source.CopyTo(dest2, 3); dest2.Should().Equal( null, null, null, item1.Object, item2.Object, item3.Object, item4.Object, item5.Object, null, null ); }
public void TestContains() { var item1 = new Mock <IDisposable>(); var item2 = new Mock <IDisposable>(); var item3 = new Mock <IDisposable>(); var item4 = new Mock <IDisposable>(); var item5 = new Mock <IDisposable>(); var target = new CombinedDisposables(reverse: true, removeDispose: false); target.Add(item1.Object); target.Add(item2.Object); target.Add(item3.Object); target.Add(item4.Object); target.Add(item5.Object); target.Should().HaveCount(5); target.Remove(item2.Object); target.Contains(item1.Object).Should().Be(true); target.Contains(item2.Object).Should().Be(false); target.Contains(item3.Object).Should().Be(true); target.Contains(item4.Object).Should().Be(true); target.Contains(item5.Object).Should().Be(true); target.Remove(item2.Object); // 同じオブジェクトを再度指定 target.Contains(item1.Object).Should().Be(true); target.Contains(item2.Object).Should().Be(false); target.Contains(item3.Object).Should().Be(true); target.Contains(item4.Object).Should().Be(true); target.Contains(item5.Object).Should().Be(true); target.Remove(item1.Object); target.Remove(item3.Object); target.Remove(item4.Object); target.Remove(item5.Object); target.Contains(item1.Object).Should().Be(false); target.Contains(item2.Object).Should().Be(false); target.Contains(item3.Object).Should().Be(false); target.Contains(item4.Object).Should().Be(false); target.Contains(item5.Object).Should().Be(false); }
public void TestLatestException_Remove() { var item1 = new Mock <IDisposable>(); var item2 = new Mock <IDisposable>(); var item3 = new Mock <IDisposable>(); var item4 = new Mock <IDisposable>(); var item5 = new Mock <IDisposable>(); var ex2 = new Exception("2"); item2.Setup(o => o.Dispose()).Callback(() => throw ex2); var ex4 = new Exception("4"); item4.Setup(o => o.Dispose()).Callback(() => throw ex4); var target = new CombinedDisposables(reverse: true, removeDispose: true); target.Add(item1.Object); target.Add(item2.Object); target.Add(item3.Object); target.Add(item4.Object); target.Add(item5.Object); target.Remove(item1.Object).Should().Be(true); target.LatestException.Should().BeNull(); target.Remove(item2.Object).Should().Be(true); target.LatestException.Should().BeSameAs(ex2); target.Remove(item3.Object).Should().Be(true); target.LatestException.Should().BeNull(); target.Remove(item4.Object).Should().Be(true); target.LatestException.Should().BeSameAs(ex4); target.Remove(item5.Object).Should().Be(true); target.LatestException.Should().BeNull(); }
public void TestEnumerate() { var item1 = new Mock <IDisposable>(); var item2 = new Mock <IDisposable>(); var item3 = new Mock <IDisposable>(); var item4 = new Mock <IDisposable>(); var item5 = new Mock <IDisposable>(); var target = new CombinedDisposables(reverse: true, removeDispose: false); target.Add(item1.Object); target.Add(item2.Object); target.Add(item3.Object); target.Add(item4.Object); target.Add(item5.Object); target.AsEnumerable().Should().Equal( item1.Object, item2.Object, item3.Object, item4.Object, item5.Object ); // for Un generic enumeration var ungeneric = new List <object>(); foreach (var obj in ((System.Collections.IEnumerable)target)) { ungeneric.Add(obj); } ungeneric.Should().Equal( item1.Object, item2.Object, item3.Object, item4.Object, item5.Object ); }
public void TestContains_ArgNull() { var target = new CombinedDisposables(); new Action(() => target.Contains(null)).Should().Throw <ArgumentNullException>(); }