diff --git a/SabreTools.IO.Test/ReadOnlyCompositeStreamTests.cs b/SabreTools.IO.Test/ReadOnlyCompositeStreamTests.cs index 34efcd1..29eafd2 100644 --- a/SabreTools.IO.Test/ReadOnlyCompositeStreamTests.cs +++ b/SabreTools.IO.Test/ReadOnlyCompositeStreamTests.cs @@ -158,6 +158,24 @@ namespace SabreTools.IO.Test #endregion + #region Dispose + + [Fact] + public void Dispose_DisposesStreams() + { + var first = new MemoryStream(new byte[128]); + var second = new MemoryStream(new byte[128]); + var stream = new ReadOnlyCompositeStream(first); + stream.AddStream(second); + + stream.Dispose(); + + Assert.False(first.CanRead); + Assert.False(second.CanRead); + } + + #endregion + #region Unimplemented [Fact] diff --git a/SabreTools.IO/ReadOnlyCompositeStream.cs b/SabreTools.IO/ReadOnlyCompositeStream.cs index 15c0250..36ae064 100644 --- a/SabreTools.IO/ReadOnlyCompositeStream.cs +++ b/SabreTools.IO/ReadOnlyCompositeStream.cs @@ -163,6 +163,20 @@ namespace SabreTools.IO #region Stream Implementations + /// + protected override void Dispose(bool disposing) + { + if (disposing) + { + foreach (var stream in _streams) + { + stream.Dispose(); + } + } + + base.Dispose(disposing); + } + /// public override void Flush() => throw new NotImplementedException();