PagedBufferedTextWriter does not flush synchronous data prior to writing data asynchronously
Fixes #5241
This commit is contained in:
parent
43071319aa
commit
d9ff1d81d6
|
|
@ -86,19 +86,22 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal
|
||||||
_charBuffer.Append(value);
|
_charBuffer.Append(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Task WriteAsync(char value)
|
public override async Task WriteAsync(char value)
|
||||||
{
|
{
|
||||||
return _inner.WriteAsync(value);
|
await FlushAsync();
|
||||||
|
await _inner.WriteAsync(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Task WriteAsync(char[] buffer, int index, int count)
|
public override async Task WriteAsync(char[] buffer, int index, int count)
|
||||||
{
|
{
|
||||||
return _inner.WriteAsync(buffer, index, count);
|
await FlushAsync();
|
||||||
|
await _inner.WriteAsync(buffer, index, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Task WriteAsync(string value)
|
public override async Task WriteAsync(string value)
|
||||||
{
|
{
|
||||||
return _inner.WriteAsync(value);
|
await FlushAsync();
|
||||||
|
await _inner.WriteAsync(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Dispose(bool disposing)
|
protected override void Dispose(bool disposing)
|
||||||
|
|
|
||||||
|
|
@ -187,6 +187,63 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal
|
||||||
Assert.Equal<char>(Content, inner.ToString().ToCharArray());
|
Assert.Equal<char>(Content, inner.ToString().ToCharArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task SynchronousWrites_FollowedByAsyncWriteString_WritesAllContent()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var pool = new TestArrayPool();
|
||||||
|
var inner = new StringWriter();
|
||||||
|
|
||||||
|
var writer = new PagedBufferedTextWriter(new TestArrayPool(), inner);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
writer.Write('a');
|
||||||
|
writer.Write(new[] { 'b', 'c', 'd' });
|
||||||
|
writer.Write("ef");
|
||||||
|
await writer.WriteAsync("ghi");
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Equal("abcdefghi", inner.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task SynchronousWrites_FollowedByAsyncWriteChar_WritesAllContent()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var pool = new TestArrayPool();
|
||||||
|
var inner = new StringWriter();
|
||||||
|
|
||||||
|
var writer = new PagedBufferedTextWriter(new TestArrayPool(), inner);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
writer.Write('a');
|
||||||
|
writer.Write(new[] { 'b', 'c', 'd' });
|
||||||
|
writer.Write("ef");
|
||||||
|
await writer.WriteAsync('g');
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Equal("abcdefg", inner.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task SynchronousWrites_FollowedByAsyncWriteCharArray_WritesAllContent()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var pool = new TestArrayPool();
|
||||||
|
var inner = new StringWriter();
|
||||||
|
|
||||||
|
var writer = new PagedBufferedTextWriter(new TestArrayPool(), inner);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
writer.Write('a');
|
||||||
|
writer.Write(new[] { 'b', 'c', 'd' });
|
||||||
|
writer.Write("ef");
|
||||||
|
await writer.WriteAsync(new[] { 'g', 'h', 'i' });
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Equal("abcdefghi", inner.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task FlushAsync_ReturnsPages()
|
public async Task FlushAsync_ReturnsPages()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue