Issue #1944: Move DelegatingStream to internal namespace and rename to NonDisposableStream.

This commit is contained in:
sornaks 2015-02-03 11:25:23 -08:00
parent c669f7a612
commit 2c5ae68ab6
9 changed files with 33 additions and 26 deletions

View File

@ -4,6 +4,7 @@
using System; using System;
using System.IO; using System.IO;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNet.Mvc.Internal;
using Microsoft.Net.Http.Headers; using Microsoft.Net.Http.Headers;
using Newtonsoft.Json; using Newtonsoft.Json;
@ -68,8 +69,8 @@ namespace Microsoft.AspNet.Mvc
var response = context.ActionContext.HttpContext.Response; var response = context.ActionContext.HttpContext.Response;
var selectedEncoding = context.SelectedEncoding; var selectedEncoding = context.SelectedEncoding;
using (var delegatingStream = new DelegatingStream(response.Body)) using (var nonDisposableStream = new NonDisposableStream(response.Body))
using (var writer = new StreamWriter(delegatingStream, selectedEncoding, 1024, leaveOpen: true)) using (var writer = new StreamWriter(nonDisposableStream, selectedEncoding, 1024, leaveOpen: true))
{ {
WriteObject(writer, context.Object); WriteObject(writer, context.Object);
} }

View File

@ -8,22 +8,22 @@ using System.IO;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Microsoft.AspNet.Mvc namespace Microsoft.AspNet.Mvc.Internal
{ {
/// <summary> /// <summary>
/// Stream that delegates to an inner stream. /// Stream that delegates to an inner stream.
/// This Stream is present so that the inner stream is not closed /// This Stream is present so that the inner stream is not closed
/// even when Close() or Dispose() is called. /// even when Close() or Dispose() is called.
/// </summary> /// </summary>
public class DelegatingStream : Stream public class NonDisposableStream : Stream
{ {
private readonly Stream _innerStream; private readonly Stream _innerStream;
/// <summary> /// <summary>
/// Initializes a new <see cref="DelegatingStream"/>. /// Initializes a new <see cref="NonDisposableStream"/>.
/// </summary> /// </summary>
/// <param name="innerStream">The stream which should not be closed or flushed.</param> /// <param name="innerStream">The stream which should not be closed or flushed.</param>
public DelegatingStream([NotNull] Stream innerStream) public NonDisposableStream([NotNull] Stream innerStream)
{ {
_innerStream = innerStream; _innerStream = innerStream;
} }

View File

@ -10,6 +10,7 @@ using System.Runtime.Serialization;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Xml; using System.Xml;
using Microsoft.AspNet.Mvc.Internal;
using Microsoft.Net.Http.Headers; using Microsoft.Net.Http.Headers;
namespace Microsoft.AspNet.Mvc.Xml namespace Microsoft.AspNet.Mvc.Xml
@ -168,7 +169,7 @@ namespace Microsoft.AspNet.Mvc.Xml
{ {
var request = context.ActionContext.HttpContext.Request; var request = context.ActionContext.HttpContext.Request;
using (var xmlReader = CreateXmlReader(new DelegatingStream(request.Body))) using (var xmlReader = CreateXmlReader(new NonDisposableStream(request.Body)))
{ {
var type = GetSerializableType(context.ModelType); var type = GetSerializableType(context.ModelType);

View File

@ -7,6 +7,7 @@ using System.IO;
using System.Runtime.Serialization; using System.Runtime.Serialization;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Xml; using System.Xml;
using Microsoft.AspNet.Mvc.Internal;
using Microsoft.Net.Http.Headers; using Microsoft.Net.Http.Headers;
namespace Microsoft.AspNet.Mvc.Xml namespace Microsoft.AspNet.Mvc.Xml
@ -161,7 +162,7 @@ namespace Microsoft.AspNet.Mvc.Xml
var innerStream = context.ActionContext.HttpContext.Response.Body; var innerStream = context.ActionContext.HttpContext.Response.Body;
using (var outputStream = new DelegatingStream(innerStream)) using (var outputStream = new NonDisposableStream(innerStream))
using (var xmlWriter = CreateXmlWriter(outputStream, tempWriterSettings)) using (var xmlWriter = CreateXmlWriter(outputStream, tempWriterSettings))
{ {
var obj = context.Object; var obj = context.Object;

View File

@ -10,6 +10,7 @@ using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Xml; using System.Xml;
using System.Xml.Serialization; using System.Xml.Serialization;
using Microsoft.AspNet.Mvc.Internal;
using Microsoft.Net.Http.Headers; using Microsoft.Net.Http.Headers;
namespace Microsoft.AspNet.Mvc.Xml namespace Microsoft.AspNet.Mvc.Xml
@ -146,7 +147,7 @@ namespace Microsoft.AspNet.Mvc.Xml
{ {
var request = context.ActionContext.HttpContext.Request; var request = context.ActionContext.HttpContext.Request;
using (var xmlReader = CreateXmlReader(new DelegatingStream(request.Body))) using (var xmlReader = CreateXmlReader(new NonDisposableStream(request.Body)))
{ {
var type = GetSerializableType(context.ModelType); var type = GetSerializableType(context.ModelType);

View File

@ -7,6 +7,7 @@ using System.IO;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Xml; using System.Xml;
using System.Xml.Serialization; using System.Xml.Serialization;
using Microsoft.AspNet.Mvc.Internal;
using Microsoft.Net.Http.Headers; using Microsoft.Net.Http.Headers;
namespace Microsoft.AspNet.Mvc.Xml namespace Microsoft.AspNet.Mvc.Xml
@ -137,7 +138,7 @@ namespace Microsoft.AspNet.Mvc.Xml
var innerStream = context.ActionContext.HttpContext.Response.Body; var innerStream = context.ActionContext.HttpContext.Response.Body;
using (var outputStream = new DelegatingStream(innerStream)) using (var outputStream = new NonDisposableStream(innerStream))
using (var xmlWriter = CreateXmlWriter(outputStream, tempWriterSettings)) using (var xmlWriter = CreateXmlWriter(outputStream, tempWriterSettings))
{ {
var obj = context.Object; var obj = context.Object;

View File

@ -7,19 +7,19 @@ using System.Threading.Tasks;
using Microsoft.AspNet.Mvc.Core; using Microsoft.AspNet.Mvc.Core;
using Xunit; using Xunit;
namespace Microsoft.AspNet.Mvc namespace Microsoft.AspNet.Mvc.Internal
{ {
public class DelegatingStreamTests public class NonDisposableStreamTest
{ {
[Fact] [Fact]
public void InnerStreamIsOpenOnClose() public void InnerStreamIsOpenOnClose()
{ {
// Arrange // Arrange
var innerStream = new MemoryStream(); var innerStream = new MemoryStream();
var delegatingStream = new DelegatingStream(innerStream); var nonDisposableStream = new NonDisposableStream(innerStream);
// Act // Act
delegatingStream.Close(); nonDisposableStream.Close();
// Assert // Assert
Assert.True(innerStream.CanRead); Assert.True(innerStream.CanRead);
@ -30,10 +30,10 @@ namespace Microsoft.AspNet.Mvc
{ {
// Arrange // Arrange
var innerStream = new MemoryStream(); var innerStream = new MemoryStream();
var delegatingStream = new DelegatingStream(innerStream); var nonDisposableStream = new NonDisposableStream(innerStream);
// Act // Act
delegatingStream.Dispose(); nonDisposableStream.Dispose();
// Assert // Assert
Assert.True(innerStream.CanRead); Assert.True(innerStream.CanRead);
@ -43,10 +43,10 @@ namespace Microsoft.AspNet.Mvc
public void InnerStreamIsNotFlushedOnDispose() public void InnerStreamIsNotFlushedOnDispose()
{ {
var stream = FlushReportingStream.GetThrowingStream(); var stream = FlushReportingStream.GetThrowingStream();
var delegatingStream = new DelegatingStream(stream); var nonDisposableStream = new NonDisposableStream(stream);
// Act & Assert // Act & Assert
delegatingStream.Dispose(); nonDisposableStream.Dispose();
} }
[Fact] [Fact]
@ -55,10 +55,10 @@ namespace Microsoft.AspNet.Mvc
// Arrange // Arrange
var stream = FlushReportingStream.GetThrowingStream(); var stream = FlushReportingStream.GetThrowingStream();
var delegatingStream = new DelegatingStream(stream); var nonDisposableStream = new NonDisposableStream(stream);
// Act & Assert // Act & Assert
delegatingStream.Close(); nonDisposableStream.Close();
} }
[Fact] [Fact]
@ -67,10 +67,10 @@ namespace Microsoft.AspNet.Mvc
// Arrange // Arrange
var stream = FlushReportingStream.GetThrowingStream(); var stream = FlushReportingStream.GetThrowingStream();
var delegatingStream = new DelegatingStream(stream); var nonDisposableStream = new NonDisposableStream(stream);
// Act & Assert // Act & Assert
delegatingStream.Flush(); nonDisposableStream.Flush();
} }
[Fact] [Fact]
@ -79,10 +79,10 @@ namespace Microsoft.AspNet.Mvc
// Arrange // Arrange
var stream = FlushReportingStream.GetThrowingStream(); var stream = FlushReportingStream.GetThrowingStream();
var delegatingStream = new DelegatingStream(stream); var nonDisposableStream = new NonDisposableStream(stream);
// Act & Assert // Act & Assert
await delegatingStream.FlushAsync(); await nonDisposableStream.FlushAsync();
} }
} }
} }

View File

@ -8,6 +8,7 @@ using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using ConnegWebSite.Models; using ConnegWebSite.Models;
using Microsoft.AspNet.Mvc; using Microsoft.AspNet.Mvc;
using Microsoft.AspNet.Mvc.Internal;
using Microsoft.Net.Http.Headers; using Microsoft.Net.Http.Headers;
namespace ConnegWebSite namespace ConnegWebSite
@ -38,7 +39,7 @@ namespace ConnegWebSite
builder.AppendLine(); builder.AppendLine();
builder.AppendLine("END:VCARD"); builder.AppendLine("END:VCARD");
var responseStream = new DelegatingStream(context.ActionContext.HttpContext.Response.Body); var responseStream = new NonDisposableStream(context.ActionContext.HttpContext.Response.Body);
using (var writer = new StreamWriter(responseStream, context.SelectedEncoding, bufferSize: 1024)) using (var writer = new StreamWriter(responseStream, context.SelectedEncoding, bufferSize: 1024))
{ {
await writer.WriteAsync(builder.ToString()); await writer.WriteAsync(builder.ToString());

View File

@ -8,6 +8,7 @@ using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using ConnegWebSite.Models; using ConnegWebSite.Models;
using Microsoft.AspNet.Mvc; using Microsoft.AspNet.Mvc;
using Microsoft.AspNet.Mvc.Internal;
using Microsoft.Net.Http.Headers; using Microsoft.Net.Http.Headers;
namespace ConnegWebSite namespace ConnegWebSite
@ -41,7 +42,7 @@ namespace ConnegWebSite
builder.AppendLine(); builder.AppendLine();
builder.AppendLine("END:VCARD"); builder.AppendLine("END:VCARD");
var responseStream = new DelegatingStream(context.ActionContext.HttpContext.Response.Body); var responseStream = new NonDisposableStream(context.ActionContext.HttpContext.Response.Body);
using (var writer = new StreamWriter(responseStream, context.SelectedEncoding, bufferSize: 1024)) using (var writer = new StreamWriter(responseStream, context.SelectedEncoding, bufferSize: 1024))
{ {
await writer.WriteAsync(builder.ToString()); await writer.WriteAsync(builder.ToString());